NETVIRT-1630 migrate to md-sal APIs
[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).put(LogicalDatastoreType.OPERATIONAL, dpnOpId, subnetToDpnLocal,
115                 WriteTransaction.CREATE_MISSING_PARENTS);
116
117     }
118
119     @Test
120     public void testAddPortOpDataEntryPortOpPresent() {
121
122         subOpDpnManager.addPortOpDataEntry(infName, subnetId, dpId);
123
124         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, portOpIdentifier, portOp,
125                 WriteTransaction.CREATE_MISSING_PARENTS);
126     }
127
128     @Test
129     public void testAddPortOpDataEntryPortOpAbsent() {
130
131         doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
132             .OPERATIONAL, portOpIdentifier);
133
134         subOpDpnManager.addPortOpDataEntry(infName, subnetId, dpId);
135
136         verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, portOpIdentifier, portOp,
137                 WriteTransaction.CREATE_MISSING_PARENTS);
138     }
139
140     @Test
141     public void testRemoveInterfaceFromDpn() {
142
143         subOpDpnManager.removeInterfaceFromDpn(subnetId, dpId, infName);
144
145         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, dpnOpId);
146     }
147
148     @Test
149     public void testRemovePortOpDataEntryPortOpPresent() {
150
151         subOpDpnManager.removePortOpDataEntry(infName, null);
152
153         verify(mockWriteTx).delete(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
154     }
155
156     @Test
157     public void testRemovePortOpDataEntryPortOpAbsent() {
158
159         doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
160             .OPERATIONAL, portOpIdentifier);
161
162         subOpDpnManager.removePortOpDataEntry(infName, null);
163
164         verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
165
166     }
167
168     @Test
169     public void testGetPortOpDataEntryPortOpPresent() {
170
171         subOpDpnManager.getPortOpDataEntry(infName);
172
173         verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
174
175     }
176
177     @Test
178     public void testGetPortOpDataEntryPortOpAbsent() {
179
180         doReturn(FluentFutures.immediateFluentFuture(Optional.empty())).when(mockReadTx).read(LogicalDatastoreType
181             .OPERATIONAL, portOpIdentifier);
182
183         subOpDpnManager.getPortOpDataEntry(infName);
184
185         verify(mockReadTx).read(LogicalDatastoreType.OPERATIONAL, portOpIdentifier);
186
187     }
188
189 }