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