2 * Copyright (c) 2015, 2016 Inocybe Technologies. All rights reserved.
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
9 package org.opendaylight.netvirt.openstack.netvirt.providers.openflow13;
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;
17 import java.lang.reflect.Field;
18 import java.util.concurrent.ExecutorService;
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;
33 * Unit test for {@link PipelineOrchestratorImplTest}
35 @RunWith(MockitoJUnitRunner.class)
36 public class PipelineOrchestratorImplTest {
37 @InjectMocks private PipelineOrchestratorImpl orchestrator;
39 @Mock private ExecutorService eventHandler;
40 @Mock private Southbound southbound;
43 * Test for method {@link PipelineOrchestratorImpl#getTableOffset()}
46 public void testGetTableOffset() {
47 short tableOffset = 0;
48 NetvirtProvidersProvider.setTableOffset(tableOffset);
49 assertEquals("tableOffset was not set", tableOffset, orchestrator.getTableOffset());
53 * Test for {@link PipelineOrchestratorImpl#getTable(Service)}
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));
64 * Registers a mock service and verifies the registration by asking the
65 * pipeline orchestrator to return the associated service from its internal
69 public void testRegisterAndUnregisterService() {
70 Service service = Service.CLASSIFIER;
71 ServiceReference<?> serviceReference = mock(ServiceReference.class);
72 when(serviceReference.getProperty(anyString())).thenReturn(service);
74 AbstractServiceInstance abstractServiceInstance = mock(AbstractServiceInstance.class);
76 orchestrator.registerService(serviceReference, abstractServiceInstance);
77 assertEquals("Error, registerService() service registration fails",
78 abstractServiceInstance,
79 orchestrator.getServiceInstance(service));
81 orchestrator.unregisterService(serviceReference);
82 assertNull("Error, unregisterService() didn't delete the service", orchestrator.getServiceInstance(service));
87 * {@link PipelineOrchestratorImpl#getNextServiceInPipeline(Service)}
90 public void testGetNextServiceInPipeline() {
92 assertEquals(orchestrator.getNextServiceInPipeline(Service.CLASSIFIER),
93 Service.ARP_RESPONDER);
95 orchestrator.getNextServiceInPipeline(Service.ARP_RESPONDER),
98 orchestrator.getNextServiceInPipeline(Service.INBOUND_NAT),
99 Service.RESUBMIT_ACL_SERVICE);
101 orchestrator.getNextServiceInPipeline(Service.RESUBMIT_ACL_SERVICE),
102 Service.ACL_LEARN_SERVICE);
104 orchestrator.getNextServiceInPipeline(Service.ACL_LEARN_SERVICE),
106 assertEquals(orchestrator.getNextServiceInPipeline(Service.EGRESS_ACL),
107 Service.LOAD_BALANCER);
109 orchestrator.getNextServiceInPipeline(Service.LOAD_BALANCER),
111 assertEquals(orchestrator.getNextServiceInPipeline(Service.ROUTING),
112 Service.L3_FORWARDING);
114 orchestrator.getNextServiceInPipeline(Service.L3_FORWARDING),
116 assertEquals(orchestrator.getNextServiceInPipeline(Service.L2_REWRITE),
117 Service.INGRESS_ACL);
119 orchestrator.getNextServiceInPipeline(Service.INGRESS_ACL),
120 Service.OUTBOUND_NAT);
122 orchestrator.getNextServiceInPipeline(Service.OUTBOUND_NAT),
125 orchestrator.getNextServiceInPipeline(Service.L2_LEARN),
126 Service.L2_FORWARDING);
127 assertNull(orchestrator.getNextServiceInPipeline(Service.L2_FORWARDING));
131 public void testSetDependencies() throws Exception {
132 NodeCacheManager nodeCacheManager = mock(NodeCacheManager.class);
133 Southbound southbound = mock(Southbound.class);
135 ServiceHelper.overrideGlobalInstance(NodeCacheManager.class, nodeCacheManager);
136 ServiceHelper.overrideGlobalInstance(Southbound.class, southbound);
138 orchestrator.setDependencies(mock(BundleContext.class), mock(ServiceReference.class));
140 // assertEquals("Error, did not return the correct object", getField("nodeCacheManager"), nodeCacheManager);
141 assertEquals("Error, did not return the correct object", getField("southbound"), southbound);
144 private Object getField(String fieldName) throws Exception {
145 Field field = PipelineOrchestratorImpl.class.getDeclaredField(fieldName);
146 field.setAccessible(true);
147 return field.get(orchestrator);