Fix NPE triggered after disabling SG on a port
[netvirt.git] / openstack / net-virt-providers / src / test / java / org / opendaylight / netvirt / openstack / netvirt / providers / openflow13 / PipelineOrchestratorImplTest.java
1 /*
2  * Copyright (c) 2015, 2016 Inocybe Technologies.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.netvirt.openstack.netvirt.providers.openflow13;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNull;
13 import static org.mockito.Matchers.anyString;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.when;
16
17 import java.lang.reflect.Field;
18 import java.util.concurrent.ExecutorService;
19
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.mockito.InjectMocks;
23 import org.mockito.Mock;
24 import org.mockito.runners.MockitoJUnitRunner;
25 import org.opendaylight.netvirt.openstack.netvirt.api.NodeCacheManager;
26 import org.opendaylight.netvirt.openstack.netvirt.api.Southbound;
27 import org.opendaylight.netvirt.openstack.netvirt.providers.NetvirtProvidersProvider;
28 import org.opendaylight.netvirt.utils.servicehelper.ServiceHelper;
29 import org.osgi.framework.BundleContext;
30 import org.osgi.framework.ServiceReference;
31
32 /**
33  * Unit test for {@link PipelineOrchestratorImplTest}
34  */
35 @RunWith(MockitoJUnitRunner.class)
36 public class PipelineOrchestratorImplTest {
37     @InjectMocks private PipelineOrchestratorImpl orchestrator;
38
39     @Mock private ExecutorService eventHandler;
40     @Mock private Southbound southbound;
41
42     /**
43      * Test for method {@link PipelineOrchestratorImpl#getTableOffset()}
44      */
45     @Test
46     public void testGetTableOffset() {
47         short tableOffset = 0;
48         NetvirtProvidersProvider.setTableOffset(tableOffset);
49         assertEquals("tableOffset was not set", tableOffset, orchestrator.getTableOffset());
50     }
51
52     /**
53      * Test for {@link PipelineOrchestratorImpl#getTable(Service)}
54      */
55     @Test
56     public void testGetTableOffsetWithService() {
57         short tableOffset = 0;
58         NetvirtProvidersProvider.setTableOffset(tableOffset);
59         assertEquals("tableOffset was not set", Service.CLASSIFIER.getTable(),
60                 orchestrator.getTable(Service.CLASSIFIER));
61     }
62
63     /***
64      * Registers a mock service and verifies the registration by asking the
65      * pipeline orchestrator to return the associated service from its internal
66      * registry
67      */
68     @Test
69     public void testRegisterAndUnregisterService() {
70         Service service = Service.CLASSIFIER;
71         ServiceReference<?> serviceReference = mock(ServiceReference.class);
72         when(serviceReference.getProperty(anyString())).thenReturn(service);
73
74         AbstractServiceInstance abstractServiceInstance = mock(AbstractServiceInstance.class);
75
76         orchestrator.registerService(serviceReference, abstractServiceInstance);
77         assertEquals("Error, registerService() service registration fails",
78                 abstractServiceInstance,
79                 orchestrator.getServiceInstance(service));
80
81         orchestrator.unregisterService(serviceReference);
82         assertNull("Error, unregisterService() didn't delete the service", orchestrator.getServiceInstance(service));
83     }
84
85     /**
86      * Test method
87      * {@link PipelineOrchestratorImpl#getNextServiceInPipeline(Service)}
88      */
89     @Test
90     public void testGetNextServiceInPipeline() {
91
92         assertEquals(orchestrator.getNextServiceInPipeline(Service.CLASSIFIER),
93                 Service.ARP_RESPONDER);
94         assertEquals(
95                 orchestrator.getNextServiceInPipeline(Service.ARP_RESPONDER),
96                 Service.INBOUND_NAT);
97         assertEquals(
98                 orchestrator.getNextServiceInPipeline(Service.INBOUND_NAT),
99                 Service.RESUBMIT_ACL_SERVICE);
100         assertEquals(
101                 orchestrator.getNextServiceInPipeline(Service.RESUBMIT_ACL_SERVICE),
102                 Service.ACL_LEARN_SERVICE);
103         assertEquals(
104                 orchestrator.getNextServiceInPipeline(Service.ACL_LEARN_SERVICE),
105                 Service.EGRESS_ACL);
106         assertEquals(orchestrator.getNextServiceInPipeline(Service.EGRESS_ACL),
107                 Service.LOAD_BALANCER);
108         assertEquals(
109                 orchestrator.getNextServiceInPipeline(Service.LOAD_BALANCER),
110                 Service.ROUTING);
111         assertEquals(orchestrator.getNextServiceInPipeline(Service.ROUTING),
112                 Service.L3_FORWARDING);
113         assertEquals(
114                 orchestrator.getNextServiceInPipeline(Service.L3_FORWARDING),
115                 Service.L2_REWRITE);
116         assertEquals(orchestrator.getNextServiceInPipeline(Service.L2_REWRITE),
117                 Service.INGRESS_ACL);
118         assertEquals(
119                 orchestrator.getNextServiceInPipeline(Service.INGRESS_ACL),
120                 Service.OUTBOUND_NAT);
121         assertEquals(
122                 orchestrator.getNextServiceInPipeline(Service.OUTBOUND_NAT),
123                 Service.L2_LEARN);
124         assertEquals(
125                 orchestrator.getNextServiceInPipeline(Service.L2_LEARN),
126                 Service.L2_FORWARDING);
127         assertNull(orchestrator.getNextServiceInPipeline(Service.L2_FORWARDING));
128     }
129
130   @Test
131   public void testSetDependencies() throws Exception {
132       NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
133       Southbound southbound = mock(Southbound.class);
134
135       ServiceHelper.overrideGlobalInstance(NodeCacheManager.class, nodeCacheManager);
136       ServiceHelper.overrideGlobalInstance(Southbound.class, southbound);
137
138       orchestrator.setDependencies(mock(BundleContext.class), mock(ServiceReference.class));
139
140 //      assertEquals("Error, did not return the correct object", getField("nodeCacheManager"), nodeCacheManager);
141       assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
142   }
143
144   private Object getField(String fieldName) throws Exception {
145       Field field = PipelineOrchestratorImpl.class.getDeclaredField(fieldName);
146       field.setAccessible(true);
147       return field.get(orchestrator);
148   }
149 }