MRI version bumpup for Aluminium
[netvirt.git] / vpnmanager / impl / src / test / java / org / opendaylight / netvirt / vpnmanager / test / SubnetOpDpnManagerTest.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 package org.opendaylight.netvirt.vpnmanager.test;
10
11 import static org.mockito.Mockito.doReturn;
12 import static org.mockito.Mockito.verify;
13
14 import java.util.ArrayList;
15 import java.util.List;
16 import java.util.Optional;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20 import org.mockito.Mock;
21 import org.mockito.junit.MockitoJUnitRunner;
22 import org.opendaylight.mdsal.binding.api.DataBroker;
23 import org.opendaylight.mdsal.binding.api.ReadTransaction;
24 import org.opendaylight.mdsal.binding.api.WriteTransaction;
25 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
26 import org.opendaylight.netvirt.vpnmanager.SubnetOpDpnManager;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.PortOpData;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.SubnetOpData;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.port.op.data.PortOpDataEntry;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.port.op.data.PortOpDataEntryBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.port.op.data.PortOpDataEntryKey;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntry;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntryKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.SubnetToDpn;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.SubnetToDpnBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.SubnetToDpnKey;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.subnet.to.dpn.VpnInterfaces;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.subnet.to.dpn.VpnInterfacesBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.subnet.to.dpn.VpnInterfacesKey;
41 import org.opendaylight.yangtools.util.concurrent.FluentFutures;
42 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
43 import org.opendaylight.yangtools.yang.common.Uint64;
44
45 @RunWith(MockitoJUnitRunner.class)
46 public class SubnetOpDpnManagerTest {
47
48     Uint64 dpId = Uint64.valueOf(1);
49     Uuid subnetId = Uuid.getDefaultInstance("067e6162-3b6f-4ae2-a171-2470b63dff00");
50     String infName = "VPN";
51     SubnetToDpn subnetToDpn = null;
52     PortOpDataEntry portOp = null;
53     String portId = "abc";
54
55     InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier =
56         InstanceIdentifier.builder(SubnetOpData.class).child(SubnetOpDataEntry.class,
57             new SubnetOpDataEntryKey(subnetId)).build();
58     InstanceIdentifier<SubnetToDpn> dpnOpId = subOpIdentifier.child(SubnetToDpn.class, new SubnetToDpnKey(dpId));
59     InstanceIdentifier<PortOpDataEntry> portOpIdentifier =
60         InstanceIdentifier.builder(PortOpData.class).child(PortOpDataEntry.class,
61             new PortOpDataEntryKey(infName)).build();
62
63     @Mock
64     DataBroker dataBroker;
65     @Mock
66     ReadTransaction mockReadTx;
67     @Mock
68     WriteTransaction mockWriteTx;
69
70     SubnetOpDpnManager subOpDpnManager;
71
72     Optional<SubnetToDpn> optionalSubDpn;
73     Optional<PortOpDataEntry> optionalPortOp;
74
75     @Before
76     public void setUp() throws Exception {
77         setupMocks();
78
79         subOpDpnManager = new SubnetOpDpnManager(dataBroker);
80
81         optionalSubDpn = Optional.of(subnetToDpn);
82         optionalPortOp = Optional.of(portOp);
83
84         doReturn(FluentFutures.immediateFluentFuture(optionalPortOp)).when(mockReadTx).read(LogicalDatastoreType
85             .OPERATIONAL, portOpIdentifier);
86         doReturn(FluentFutures.immediateFluentFuture(optionalSubDpn)).when(mockReadTx).read(LogicalDatastoreType
87             .OPERATIONAL, dpnOpId);
88
89     }
90
91     private void setupMocks() {
92
93         List<VpnInterfaces> vpnInterfaces = new ArrayList<>();
94         List<Uuid> subnetIdList = new ArrayList<>();
95         subnetIdList.add(subnetId);
96         subnetToDpn = new SubnetToDpnBuilder().setDpnId(dpId).withKey(new SubnetToDpnKey(dpId)).setVpnInterfaces(
97             vpnInterfaces).build();
98         portOp = new PortOpDataEntryBuilder().setDpnId(dpId).withKey(new PortOpDataEntryKey(infName)).setSubnetIds(
99             subnetIdList).setPortId(portId).build();
100         doReturn(mockReadTx).when(dataBroker).newReadOnlyTransaction();
101         doReturn(mockWriteTx).when(dataBroker).newWriteOnlyTransaction();
102     }
103
104     @Test
105     public void testAddInterfaceToDpn() {
106
107         subOpDpnManager.addInterfaceToDpn(subnetId, dpId, infName);
108         List<VpnInterfaces> vpnIntfList = new ArrayList<>();
109         VpnInterfaces vpnIntfs =
110                 new VpnInterfacesBuilder().withKey(new VpnInterfacesKey(infName)).setInterfaceName(infName).build();
111         vpnIntfList.add(vpnIntfs);
112         SubnetToDpn subnetToDpnLocal = new SubnetToDpnBuilder().setDpnId(dpId).withKey(new SubnetToDpnKey(dpId))
113                 .setVpnInterfaces(vpnIntfList).build();
114         verify(mockWriteTx).mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, dpnOpId, subnetToDpnLocal);
115
116     }
117
118     @Test
119     public void testAddPortOpDataEntryPortOpPresent() {
120
121         subOpDpnManager.addPortOpDataEntry(infName, subnetId, dpId);
122
123         verify(mockWriteTx).mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, portOpIdentifier, portOp);
124     }
125
126     @Test
127     public void testAddPortOpDataEntryPortOpAbsent() {
128
129         doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
130             .OPERATIONAL, portOpIdentifier);
131
132         subOpDpnManager.addPortOpDataEntry(infName, subnetId, dpId);
133
134         verify(mockWriteTx).mergeParentStructurePut(LogicalDatastoreType.OPERATIONAL, portOpIdentifier, portOp);
135     }
136
137     @Test
138     public void testRemoveInterfaceFromDpn() {
139
140         subOpDpnManager.removeInterfaceFromDpn(subnetId, dpId, infName);
141
142         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, dpnOpId);
143     }
144
145     @Test
146     public void testRemovePortOpDataEntryPortOpPresent() {
147
148         subOpDpnManager.removePortOpDataEntry(infName, null);
149
150         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
151     }
152
153     @Test
154     public void testRemovePortOpDataEntryPortOpAbsent() {
155
156         doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
157             .OPERATIONAL, portOpIdentifier);
158
159         subOpDpnManager.removePortOpDataEntry(infName, null);
160
161         verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
162
163     }
164
165     @Test
166     public void testGetPortOpDataEntryPortOpPresent() {
167
168         subOpDpnManager.getPortOpDataEntry(infName);
169
170         verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
171
172     }
173
174     @Test
175     public void testGetPortOpDataEntryPortOpAbsent() {
176
177         doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
178             .OPERATIONAL, portOpIdentifier);
179
180         subOpDpnManager.getPortOpDataEntry(infName);
181
182         verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
183
184     }
185
186 }