2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. 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
8 package org.opendaylight.vpnservice.natservice.internal.test;
10 import static org.junit.Assert.assertEquals;
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;
22 import static org.mockito.Matchers.any;
23 import static org.mockito.Mockito.when;
24 import static org.mockito.Mockito.eq;
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;
51 import com.google.common.util.concurrent.Futures;
53 import org.powermock.api.mockito.PowerMockito;
54 import org.powermock.core.classloader.annotations.PrepareForTest;
55 import org.powermock.modules.junit4.PowerMockRunner;
58 @RunWith(PowerMockRunner.class)
59 @PrepareForTest(MDSALUtil.class)
60 public class NaptManagerTest {
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;
68 private NaptManager naptManager;
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);
84 PowerMockito.mockStatic(MDSALUtil.class);
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();
97 PowerMockito.doNothing().when(MDSALUtil.class, "syncWrite", dataBroker, LogicalDatastoreType.OPERATIONAL, ipmapId, ipmap);
98 } catch (Exception e) {
99 // Test failed anyways
100 assertEquals("true", "false");
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();
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();
116 PowerMockito.doNothing().when(MDSALUtil.class, "syncWrite", dataBroker, LogicalDatastoreType.OPERATIONAL, ipmapId, ipmap);
117 } catch (Exception e) {
118 // Test failed anyways
119 assertEquals("true", "false");
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();
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();
134 PowerMockito.doNothing().when(MDSALUtil.class, "syncWrite", dataBroker, LogicalDatastoreType.OPERATIONAL, ipmapId, ipmap);
135 } catch (Exception e) {
136 // Test failed anyways
137 assertEquals("true", "false");
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();
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();
152 PowerMockito.doNothing().when(MDSALUtil.class, "syncWrite", dataBroker, LogicalDatastoreType.OPERATIONAL, ipmapId, ipmap);
153 } catch (Exception e) {
154 // Test failed anyways
155 assertEquals("true", "false");
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();
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();
173 PowerMockito.when(MDSALUtil.class, "read", dataBroker, LogicalDatastoreType.CONFIGURATION, id).thenReturn(null);
174 } catch (Exception e) {
175 // Test failed anyways
176 assertEquals("true", "false");
178 naptManager.getExternalAddressMapping(5, internalIpPort);
179 PowerMockito.verifyStatic(); */
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();
189 PowerMockito.doNothing().when(MDSALUtil.class, "read", dataBroker, LogicalDatastoreType.OPERATIONAL, id);
190 } catch (Exception e) {
191 // Test failed anyways
192 assertEquals("true", "false");
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);*/