Add working integration-test
[ovsdb.git] / openstack / net-virt-providers / src / test / java / org / opendaylight / ovsdb / openstack / netvirt / providers / openflow13 / MdsalConsumerImplTest.java
1 /*
2  * Copyright (c) 2015 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.ovsdb.openstack.netvirt.providers.openflow13;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertSame;
14 import static org.junit.Assert.assertTrue;
15 import static org.mockito.Matchers.any;
16 import static org.mockito.Matchers.anyString;
17 import static org.mockito.Matchers.eq;
18 import static org.mockito.Matchers.same;
19 import static org.mockito.Mockito.mock;
20 import static org.mockito.Mockito.times;
21 import static org.mockito.Mockito.verify;
22 import static org.mockito.Mockito.when;
23
24 import java.lang.reflect.Field;
25 import java.util.ArrayList;
26 import java.util.List;
27
28 import org.junit.Before;
29 import org.junit.Ignore;
30 import org.junit.Test;
31 import org.junit.runner.RunWith;
32 import org.mockito.InjectMocks;
33 import org.mockito.Mock;
34 import org.mockito.Mockito;
35 import org.mockito.runners.MockitoJUnitRunner;
36 import org.powermock.api.mockito.PowerMockito;
37 import org.powermock.core.classloader.annotations.PrepareForTest;
38 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
39 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
40 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
41 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
42 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
43 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
44 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
45 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
52 import org.opendaylight.yangtools.concepts.ListenerRegistration;
53 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
54 import org.opendaylight.neutron.spi.INeutronPortCRUD;
55 import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
56 import org.opendaylight.ovsdb.openstack.netvirt.NeutronCacheUtils;
57 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
58 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
59 import org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl;
60 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
61
62 /**
63  * Unit test for {@link MdsalConsumerImpl}
64  */
65 /* TODO SB_MIGRATION */
66 @Ignore
67 @RunWith(MockitoJUnitRunner.class)
68 public class MdsalConsumerImplTest {
69
70     private MdsalConsumerImpl mdsalConsumer;
71
72     @Mock
73     private DataBroker dataBroker;
74
75     @Mock
76     private ConsumerContext session;
77
78     @Mock
79     private ProviderContext providerSession;
80
81     @Mock
82     private NotificationProviderService notificationService;
83
84     @Before
85     public void setUp(){
86
87         mdsalConsumer = new MdsalConsumerImpl();
88         dataBroker = Mockito.mock(DataBroker.class);
89         session = Mockito.mock(ConsumerContext.class);
90         providerSession = Mockito.mock(ProviderContext.class);
91         notificationService = Mockito.mock(NotificationProviderService.class);
92
93         when(session.getSALService(DataBroker.class)).thenReturn(dataBroker);
94         when(providerSession.getSALService(NotificationProviderService.class)).thenReturn(notificationService);
95
96         //Initialize the Mdsal consumer
97         mdsalConsumer.onSessionInitialized(session);
98         mdsalConsumer.onSessionInitiated(providerSession);
99     }
100
101     /**
102      * Test method for
103      *          {@link MdsalConsumerImpl#getConsumerContext()}
104      *          {@link MdsalConsumerImpl#getDataBroker()}
105      *          {@link MdsalConsumerImpl#getNotificationService()}
106      *
107      */
108     @Test
109     public void InitializationsTests(){
110
111         assertSame("Error, getConsumerContext - returned context is invalid", session, mdsalConsumer.getConsumerContext());
112         assertSame("Error, getDataBroker - returned broker is invalid", dataBroker, mdsalConsumer.getDataBroker());
113         assertSame("Error, getNotificationService - returned notification service provider is invalid", notificationService, mdsalConsumer.getNotificationService());
114
115     }
116
117     /**
118      * Test method {@link MdsalConsumerImpl#notifyFlowCapableNodeCreateEvent(String, Action)}
119      */
120     @Test
121     public void notifyFlowCapableNodeCreateEventTest() throws Exception{
122
123         FlowCapableNodeDataChangeListener nodeChangeListener = (FlowCapableNodeDataChangeListener) getClassField(mdsalConsumer, "flowCapableNodeChangeListener");
124
125         //Send a notification
126         mdsalConsumer.notifyFlowCapableNodeCreateEvent("flowId1", Action.ADD);
127
128         List<Node> nodeCache = (List<Node>) getClassField(nodeChangeListener, "nodeCache");
129         assertEquals("Error, notifyFlowCapableNodeEvent() - MdsalConsumerImpl NodeDataChangeLister inventory size after an ADD operation is incorrect", 1, nodeCache.size());
130     }
131
132     /**
133      * Get the specified field from MdsalConsumerImpl using reflection
134      * @param instancee - the class instance
135      * @param fieldName - the field to retrieve
136      *
137      * @return the desired field
138      */
139     private Object getClassField(MdsalConsumerImpl instance, String fieldName) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
140         Field field = MdsalConsumerImpl.class.getDeclaredField(fieldName);
141         field.setAccessible(true);
142         return field.get(instance);
143     }
144
145     /**
146      * Get the specified field from FlowCapableNodeDataChangeListener using reflection
147      * @param instancee - the class instance
148      * @param fieldName - the field to retrieve
149      *
150      * @return the desired field
151      */
152     private Object getClassField(FlowCapableNodeDataChangeListener instance, String fieldName) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
153         Field field = FlowCapableNodeDataChangeListener.class.getDeclaredField(fieldName);
154         field.setAccessible(true);
155         return field.get(instance);
156     }
157
158 }