Merge "LLDP monitor interval update fixes"
[vpnservice.git] / natservice / natservice-impl / src / test / java / org / opendaylight / vpnservice / natservice / internal / test / NaptManagerTest.java
1 /*
2  * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others.  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
10 package org.opendaylight.vpnservice.natservice.internal.test;
11
12 import static org.junit.Assert.assertEquals;
13
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.junit.runner.RunWith;
17 import org.mockito.Matchers;
18 import org.mockito.Mock;
19 import org.mockito.Mockito;
20 import org.mockito.MockitoAnnotations;
21 import org.mockito.stubbing.OngoingStubbing;
22
23 import static org.mockito.Matchers.any;
24 import static org.mockito.Mockito.when;
25 import static org.mockito.Mockito.eq;
26
27 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
28 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
29 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
30 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
31 import org.opendaylight.vpnservice.mdsalutil.MDSALUtil;
32 import org.opendaylight.vpnservice.natservice.internal.IPAddress;
33 import org.opendaylight.vpnservice.natservice.internal.NaptManager;
34 import org.opendaylight.vpnservice.natservice.internal.SessionAddress;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.CreateIdPoolInput;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.IntextIpMap;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.IntextIpPortMap;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.IpMapping;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.IpMappingKey;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.ip.mapping.IpMap;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.ip.mapping.IpMapBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.ip.mapping.IpMapKey;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.port.map.IpPortMapping;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.port.map.IpPortMappingKey;
46 import org.opendaylight.yangtools.concepts.ListenerRegistration;
47 import org.opendaylight.yangtools.yang.binding.DataObject;
48 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
49 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
50 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
51
52 import com.google.common.util.concurrent.Futures;
53
54 import org.powermock.api.mockito.PowerMockito;
55 import org.powermock.core.classloader.annotations.PrepareForTest;
56 import org.powermock.modules.junit4.PowerMockRunner;
57
58
59 @RunWith(PowerMockRunner.class)
60 @PrepareForTest(MDSALUtil.class)
61 public class NaptManagerTest {
62
63     @Mock IdManagerService idMgr;
64     @Mock DataBroker dataBroker;
65     @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
66     InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.ip.mapping.IpMap> ipmapId = null;
67     org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.natservice.rev160111.intext.ip.map.ip.mapping.IpMap ipmap = null;
68
69     private NaptManager naptManager;
70
71     @Before
72     public void init() {
73         MockitoAnnotations.initMocks(this);
74         when(dataBroker.registerDataChangeListener(
75                 any(LogicalDatastoreType.class),
76                 any(InstanceIdentifier.class),
77                 any(DataChangeListener.class),
78                 any(DataChangeScope.class)))
79                 .thenReturn(dataChangeListenerRegistration);
80         naptManager = new NaptManager(dataBroker);
81         when(idMgr.createIdPool(any(CreateIdPoolInput.class)))
82                   .thenReturn(Futures.immediateFuture(RpcResultBuilder.<Void>success().build()));
83         naptManager.setIdManager(idMgr);
84
85         PowerMockito.mockStatic(MDSALUtil.class);
86
87     }
88
89
90     @Test
91     public void testRegisterMappingIpIP() {
92
93         // TODO : Issue with Mockito.any() usage, so for now run registerMapping testcases as seperate Tests. This needs to be fixed properly.
94         ipmapId = InstanceIdentifier.builder(
95                 IntextIpMap.class).child(IpMapping.class, new IpMappingKey(5L)).child(IpMap.class, new IpMapKey("10.0.0.1")).build();
96         ipmap = new IpMapBuilder().setKey(new IpMapKey("10.0.0.1")).setInternalIp("10.0.0.1").setExternalIp("192.17.13.1").build();
97         try {
98             PowerMockito.doNothing().when(MDSALUtil.class, "syncWrite", dataBroker, LogicalDatastoreType.OPERATIONAL, ipmapId, ipmap);
99         } catch (Exception e) {
100             // Test failed anyways
101             assertEquals("true", "false");
102         }
103         IPAddress internal = new IPAddress("10.0.0.1",0);
104         IPAddress external = new IPAddress("192.17.13.1", 0);
105         naptManager.registerMapping(5, internal, external);
106         PowerMockito.verifyStatic();
107
108     }
109
110     @Test
111     public void testRegisterMappingIpSubnet() {
112
113         ipmapId = InstanceIdentifier.builder(
114                 IntextIpMap.class).child(IpMapping.class, new IpMappingKey(5L)).child(IpMap.class, new IpMapKey("10.0.0.1")).build();
115         ipmap = new IpMapBuilder().setKey(new IpMapKey("10.0.0.1")).setInternalIp("10.0.0.1").setExternalIp("192.17.13.1/24").build();
116         try {
117             PowerMockito.doNothing().when(MDSALUtil.class, "syncWrite", dataBroker, LogicalDatastoreType.OPERATIONAL, ipmapId, ipmap);
118         } catch (Exception e) {
119             // Test failed anyways
120             assertEquals("true", "false");
121         }
122         IPAddress internal = new IPAddress("10.0.0.1",0);
123         IPAddress external = new IPAddress("192.17.13.1", 24);
124         naptManager.registerMapping(5, internal, external);
125         PowerMockito.verifyStatic();
126     }
127
128     @Test
129     public void testRegisterMappingSubnetIp() {
130
131         ipmapId = InstanceIdentifier.builder(
132                 IntextIpMap.class).child(IpMapping.class, new IpMappingKey(6L)).child(IpMap.class, new IpMapKey("10.0.2.1/16")).build();
133         ipmap = new IpMapBuilder().setKey(new IpMapKey("10.0.0.1")).setInternalIp("10.0.0.1").setExternalIp("192.19.15.3").build();
134         try {
135             PowerMockito.doNothing().when(MDSALUtil.class, "syncWrite", dataBroker, LogicalDatastoreType.OPERATIONAL, ipmapId, ipmap);
136         } catch (Exception e) {
137             // Test failed anyways
138             assertEquals("true", "false");
139         }
140         IPAddress internal = new IPAddress("10.0.2.1",16);
141         IPAddress external = new IPAddress("192.19.15.3", 0);
142         naptManager.registerMapping(6, internal, external);
143         PowerMockito.verifyStatic();
144      }
145
146     @Test
147     public void testRegisterMappingSubnetSubnet() {
148
149         ipmapId = InstanceIdentifier.builder(
150                 IntextIpMap.class).child(IpMapping.class, new IpMappingKey(6L)).child(IpMap.class, new IpMapKey("10.2.0.1/24")).build();
151         ipmap = new IpMapBuilder().setKey(new IpMapKey("10.2.0.1/24")).setInternalIp("10.2.0.1/24").setExternalIp("192.21.16.1/16").build();
152         try {
153             PowerMockito.doNothing().when(MDSALUtil.class, "syncWrite", dataBroker, LogicalDatastoreType.OPERATIONAL, ipmapId, ipmap);
154         } catch (Exception e) {
155             // Test failed anyways
156             assertEquals("true", "false");
157         }
158         IPAddress internal = new IPAddress("10.2.0.1",24);
159         IPAddress external = new IPAddress("192.21.16.1", 16);
160         naptManager.registerMapping(6, internal, external);
161         PowerMockito.verifyStatic();
162     }
163
164
165     @Test
166     public void testgetExternalAddressMapping() {
167         // TODO : This needs to be modified to make it work
168         // Testcase to test when no entry exists in ip-pot-map
169         /*SessionAddress internalIpPort = new SessionAddress("10.0.0.1", 2);
170         InstanceIdentifierBuilder<IpPortMapping> idBuilder =
171                 InstanceIdentifier.builder(IntextIpPortMap.class).child(IpPortMapping.class, new IpPortMappingKey(5L));
172         InstanceIdentifier<IpPortMapping> id = idBuilder.build();
173         try {
174              PowerMockito.when(MDSALUtil.class, "read", dataBroker, LogicalDatastoreType.CONFIGURATION, id).thenReturn(null);
175         } catch (Exception e) {
176             // Test failed anyways
177             assertEquals("true", "false");
178         }
179         naptManager.getExternalAddressMapping(5, internalIpPort);
180         PowerMockito.verifyStatic(); */  
181     }
182
183     @Test
184     public void testReleaseAddressMapping() {
185         // TODO : Below needs to be modified to make it work
186       /*  InstanceIdentifierBuilder<IpMapping> idBuilder =
187                 InstanceIdentifier.builder(IntextIpMap.class).child(IpMapping.class, new IpMappingKey(5L));
188         InstanceIdentifier<IpMapping> id = idBuilder.build();
189         try {
190             PowerMockito.doNothing().when(MDSALUtil.class, "read", dataBroker, LogicalDatastoreType.OPERATIONAL, id);
191         } catch (Exception e) {
192             // Test failed anyways
193             assertEquals("true", "false");
194         }
195         IPAddress internal = new IPAddress("10.0.0.1",0);
196         IPAddress external = new IPAddress("192.17.13.1", 0);
197         naptManager.registerMapping(5, internal, external);
198         SessionAddress internalSession = new SessionAddress("10.0.0.1", 0);
199         naptManager.releaseAddressMapping(5L, internalSession);*/
200     }
201
202
203 }