Change PortMapping implementations
[transportpce.git] / common / src / test / java / org / opendaylight / transportpce / common / mapping / PortMappingVersion121Test.java
1 /*
2  * Copyright © 2020 Orange Labs, Inc. 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.transportpce.common.mapping;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
14 import static org.junit.Assert.fail;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.when;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.Collections;
21 import java.util.HashMap;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Optional;
25 import java.util.Random;
26 import java.util.concurrent.ExecutionException;
27 import org.eclipse.jdt.annotation.NonNull;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.opendaylight.mdsal.binding.api.DataBroker;
31 import org.opendaylight.mdsal.binding.api.ReadTransaction;
32 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
33 import org.opendaylight.transportpce.common.Timeouts;
34 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
35 import org.opendaylight.transportpce.test.DataStoreContext;
36 import org.opendaylight.transportpce.test.DataStoreContextImpl;
37 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.Network;
38 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.NetworkBuilder;
39 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.mapping.Mapping;
40 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.network.Nodes;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.Direction;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.Port;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.ParentCircuitPackBuilder;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsBuilder;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsKey;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksBuilder;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPorts;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPortsBuilder;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.ConnectionPortsKey;
54 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface;
55 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
56 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey;
57 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
58 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDeviceBuilder;
59 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.ConnectionMap;
60 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.ConnectionMapBuilder;
61 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.ConnectionMapKey;
62 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Degree;
63 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.DegreeBuilder;
64 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.DegreeKey;
65 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Info;
66 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.InfoBuilder;
67 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Protocols;
68 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.ProtocolsBuilder;
69 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroup;
70 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupBuilder;
71 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.SharedRiskGroupKey;
72 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.connection.map.Destination;
73 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.connection.map.DestinationBuilder;
74 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.connection.map.DestinationKey;
75 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.connection.map.SourceBuilder;
76 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.port.Interfaces;
77 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.port.InterfacesBuilder;
78 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.port.PartnerPortBuilder;
79 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OpenROADMOpticalMultiplex;
80 import org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.OpticalTransport;
81 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.Protocols1Builder;
82 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.LldpBuilder;
83 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.PortConfig;
84 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.PortConfigBuilder;
85 import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.PortConfigKey;
86 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
87 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
88 import org.opendaylight.yangtools.yang.binding.Augmentation;
89 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
90 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
91 import org.opendaylight.yangtools.yang.common.Uint16;
92 import org.opendaylight.yangtools.yang.common.Uint32;
93 import org.slf4j.Logger;
94 import org.slf4j.LoggerFactory;
95
96 public class PortMappingVersion121Test {
97
98     private static final Logger LOG = LoggerFactory.getLogger(PortMappingVersion121Test.class);
99     private static DataBroker dataBroker;
100     private static DeviceTransactionManager deviceTransactionManager;
101     private static PortMappingVersion121 portMappingVersion121;
102     private Random ran = new Random();
103
104     @Before
105     public void setUp() throws Exception {
106         // test createMappingData for a xpdr node with 3 network + 1 client + bidirectional & unidirectional ports
107         DataStoreContext dataStoreContext = new DataStoreContextImpl();
108         dataBroker = dataStoreContext.getDataBroker();
109         deviceTransactionManager = mock(DeviceTransactionManager.class);
110         portMappingVersion121 = new PortMappingVersion121(dataBroker, deviceTransactionManager);
111     }
112
113     @Test
114     public void createMappingDataTestRdm() {
115         // mock node info
116         final Info info = getInfo2();
117
118         List<Interfaces> interfacesList = Arrays.asList(getInterfaces("i1"), getInterfaces("i2"));
119
120         // mock 1 bidirectional port for degree
121         Ports ports = getPortsWithInterfaces(interfacesList, "p1");
122         List<Ports> portsList = Arrays.asList(ports);
123
124         // mock 2 bidirectional port for SRG
125         Ports ports1 = getPortsWithInterfaces(interfacesList, "p2");
126         List<Ports> portsList1 = Arrays.asList(ports1);
127
128         // mock 2 unidirectional ports for degree
129         Ports ports2 = getPorts("p2", Port.PortQual.RoadmExternal, "c3", "p3", Direction.Rx);
130         Ports ports3 = getPorts("p3", Port.PortQual.RoadmExternal, "c3", "p2", Direction.Tx);
131         List<Ports> portsList2 = Arrays.asList(ports2, ports3);
132
133         // mock 2 unidirectional ports for degree, reverse direction
134         Ports ports22 = getPorts("p22", Port.PortQual.RoadmExternal, "c5", "p33", Direction.Tx);
135         Ports ports33 = getPorts("p33", Port.PortQual.RoadmExternal, "c5", "p22", Direction.Rx);
136         List<Ports> portsList22 = Arrays.asList(ports22, ports33);
137
138         // mock 2 unidirectional ports for srg
139         Ports ports4 = getPorts("p4", Port.PortQual.RoadmExternal, "c4", "p5", Direction.Rx);
140         Ports ports5 = getPorts("p5", Port.PortQual.RoadmExternal, "c4", "p4", Direction.Tx);
141         List<Ports> portsList4 = Arrays.asList(ports4, ports5);
142
143         // mock 2 unidirectional ports for srg, reverse direction
144         Ports ports44 = getPorts("p44", Port.PortQual.RoadmExternal, "c6", "p55", Direction.Tx);
145         Ports ports55 = getPorts("p55", Port.PortQual.RoadmExternal, "c6", "p44", Direction.Rx);
146         List<Ports> portsList44 = Arrays.asList(ports44, ports55);
147
148         // mock 6 circuit packs
149         final CircuitPacks circuitPackObject = getCircuitPacks(portsList, "c1", "pc1");
150         final CircuitPacks circuitPackObject2 = getCircuitPacks(portsList, "c2", "pc2");
151         final CircuitPacks circuitPackObject3 = getCircuitPacks(portsList2, "c3", "pc3");
152         final CircuitPacks circuitPackObject4 = getCircuitPacks(portsList4, "c4", "pc4");
153         final CircuitPacks circuitPackObject5 = getCircuitPacks(portsList22, "c5", "pc5");
154         final CircuitPacks circuitPackObject6 = getCircuitPacks(portsList44, "c6", "pc6");
155
156         // mock 6 connection ports
157         ConnectionPorts connectionPorts = getConnectionPorts("c1", "p1");
158         Map<ConnectionPortsKey, ConnectionPorts> connectionPortsMap = new HashMap<>();
159         connectionPortsMap.put(connectionPorts.key(), connectionPorts);
160
161         ConnectionPorts connectionPorts2 = getConnectionPorts("c2", "p1");
162         List<ConnectionPorts> connectionPortsList2 = new ArrayList<ConnectionPorts>();
163         connectionPortsList2.add(connectionPorts2);
164
165         ConnectionPorts connectionPorts3 = getConnectionPorts("c3", "p2");
166         ConnectionPorts connectionPorts4 = getConnectionPorts("c3", "p3");
167         Map<ConnectionPortsKey, ConnectionPorts> connectionPortsMap3 = new HashMap<>();
168         connectionPortsMap3.put(connectionPorts3.key(), connectionPorts3);
169         connectionPortsMap3.put(connectionPorts4.key(), connectionPorts4);
170
171         ConnectionPorts connectionPorts5 = getConnectionPorts("c4", "p4");
172         ConnectionPorts connectionPorts6 = getConnectionPorts("c4", "p5");
173         List<ConnectionPorts> connectionPortsList4 = new ArrayList<ConnectionPorts>();
174         connectionPortsList4.add(connectionPorts5);
175         connectionPortsList4.add(connectionPorts6);
176
177         ConnectionPorts connectionPorts33 = getConnectionPorts("c5", "p22");
178         ConnectionPorts connectionPorts44 = getConnectionPorts("c5", "p33");
179         Map<ConnectionPortsKey, ConnectionPorts> connectionPortsMap33 = new HashMap<>();
180         connectionPortsMap33.put(connectionPorts33.key(), connectionPorts33);
181         connectionPortsMap33.put(connectionPorts44.key(), connectionPorts44);
182
183         ConnectionPorts connectionPorts55 = getConnectionPorts("c6", "p44");
184         ConnectionPorts connectionPorts66 = getConnectionPorts("c6", "p55");
185         Map<ConnectionPortsKey, ConnectionPorts> connectionPortsMap44 = new HashMap<>();
186         connectionPortsMap44.put(connectionPorts55.key(), connectionPorts55);
187         connectionPortsMap44.put(connectionPorts66.key(), connectionPorts66);
188
189         // mock one degree with bidirectional port
190         org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks circuitPacks =
191                 new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacksBuilder()
192                 .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
193                         .degree.CircuitPacksKey(Uint32.valueOf(1)))
194                         .setCircuitPackName("c1").build();
195         Map<
196                 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacksKey,
197                 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks> circuitPacksMap =
198                         new HashMap<>();
199         circuitPacksMap.put(circuitPacks.key(), circuitPacks);
200
201         final Degree ordmDegreeObject = new DegreeBuilder().setDegreeNumber(Uint16.valueOf(1))
202                 .setCircuitPacks(circuitPacksMap).setConnectionPorts(connectionPortsMap).build();
203
204         // mock one srg with bidirectional port
205         org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks srgCircuitPacks =
206                 new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacksBuilder()
207                 .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
208                         .srg.CircuitPacksKey(Uint32.valueOf(2)))
209                         .setCircuitPackName("c2").build();
210         Map<
211                 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacksKey,
212                 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks> srgCircuitPacksList =
213                         new HashMap<>();
214         srgCircuitPacksList.put(srgCircuitPacks.key(), srgCircuitPacks);
215
216         final SharedRiskGroup ordmSrgObject = new SharedRiskGroupBuilder().setSrgNumber(Uint16.valueOf(1))
217                 .setCircuitPacks(srgCircuitPacksList).build();
218
219         // mock one degree with 2 unidirectional ports
220         org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks circuitPacks3 =
221                 new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacksBuilder()
222                 .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
223                         .degree.CircuitPacksKey(Uint32.valueOf(3)))
224                         .setCircuitPackName("c3").build();
225         List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks> circuitPacksList3 =
226                 new ArrayList<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks>();
227         circuitPacksList3.add(circuitPacks3);
228
229         Map<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacksKey,
230             org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks> values =
231             new HashMap<>();
232         org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacksKey circuitPackKey =
233                 new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacksKey(
234                         Uint32.valueOf(3));
235         values.put(circuitPackKey, circuitPacks3);
236         final Degree ordmDegreeObject3 = new DegreeBuilder().setDegreeNumber(Uint16.valueOf(2)).setCircuitPacks(values)
237                 .setConnectionPorts(connectionPortsMap3).build();
238         // mock one srg with 2 unidirectional ports
239         org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks srgCircuitPacks4 =
240                 new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacksBuilder()
241                 .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
242                         .srg.CircuitPacksKey(Uint32.valueOf(4)))
243                         .setCircuitPackName("c4").build();
244         Map<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacksKey,
245                 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks>
246             srgCircuitPacksList4 = new HashMap<>();
247         srgCircuitPacksList4.put(srgCircuitPacks4.key(), srgCircuitPacks4);
248
249         final SharedRiskGroup ordmSrgObject4 = new SharedRiskGroupBuilder().setSrgNumber(Uint16.valueOf(2))
250                 .setCircuitPacks(srgCircuitPacksList4).build();
251
252         // mock one degree with unidirectional ports, reverse direction
253         org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks circuitPacks5 =
254                 new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacksBuilder()
255                 .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
256                         .degree.CircuitPacksKey(Uint32.valueOf(5)))
257                         .setCircuitPackName("c5").build();
258         List<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks> circuitPacksList5 =
259                 new ArrayList<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacks>();
260         circuitPacksList5.add(circuitPacks5);
261         values = new HashMap<>();
262         circuitPackKey = new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.degree.CircuitPacksKey(
263                 Uint32.valueOf(5));
264         values.put(circuitPackKey, circuitPacks5);
265         final Degree ordmDegreeObject5 = new DegreeBuilder().setDegreeNumber(Uint16.valueOf(3)).setCircuitPacks(values)
266                 .setConnectionPorts(connectionPortsMap44).build();
267
268         // mock one srg with 2 unidirectional ports, reverse direction
269         org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks srgCircuitPacks6 =
270                 new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacksBuilder()
271                 .withKey(new org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
272                         .srg.CircuitPacksKey(Uint32.valueOf(6)))
273                         .setCircuitPackName("c6").build();
274         Map<
275                 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacksKey,
276                 org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.srg.CircuitPacks> srgCircuitPacksMap6 =
277                         new HashMap<>();
278         srgCircuitPacksMap6.put(srgCircuitPacks6.key(), srgCircuitPacks6);
279
280         final SharedRiskGroup ordmSrgObject6 = new SharedRiskGroupBuilder().setSrgNumber(Uint16.valueOf(3))
281                 .setCircuitPacks(srgCircuitPacksMap6).build();
282
283         // mock lldp configuration
284         PortConfig portConfig =
285                 new PortConfigBuilder().setIfName("i1").setAdminStatus(PortConfig.AdminStatus.Txandrx).build();
286         Map<PortConfigKey, PortConfig> portConfigMap = new HashMap<>();
287         portConfigMap.put(portConfig.key(), portConfig);
288         Augmentation<Protocols> augmentation =
289                 new Protocols1Builder().setLldp(new LldpBuilder().setPortConfig(portConfigMap).build()).build();
290         Protocols protocols = new ProtocolsBuilder().addAugmentation(augmentation).build();
291
292         // mock responses for deviceTransactionManager calls
293         InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.device
294             .rev170206.org.openroadm.device.container.org.openroadm.device.Degree> deviceIID = InstanceIdentifier
295             .create(OrgOpenroadmDevice.class)
296             .child(org.opendaylight.yang.gen.v1.http.org.openroadm.device
297                     .rev170206.org.openroadm.device.container.org.openroadm.device.Degree.class,
298                                 new DegreeKey(Uint16.valueOf(1)));
299         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, deviceIID,
300                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
301                         .thenReturn(Optional.of(ordmDegreeObject));
302
303         InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
304             .org.openroadm.device.container.org.openroadm.device.Degree> deviceIID3 = InstanceIdentifier
305             .create(OrgOpenroadmDevice.class)
306             .child(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
307             .org.openroadm.device.container.org.openroadm.device.Degree.class,
308                                 new DegreeKey(Uint16.valueOf(2)));
309         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, deviceIID3,
310                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
311                         .thenReturn(Optional.of(ordmDegreeObject3));
312
313         InstanceIdentifier<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
314             .org.openroadm.device.container.org.openroadm.device.Degree> deviceIID5 = InstanceIdentifier
315             .create(OrgOpenroadmDevice.class)
316             .child(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206
317             .org.openroadm.device.container.org.openroadm.device.Degree.class,
318                                 new DegreeKey(Uint16.valueOf(3)));
319         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, deviceIID5,
320                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
321                         .thenReturn(Optional.of(ordmDegreeObject5));
322
323         InstanceIdentifier<Protocols> protocoliid =
324                 InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Protocols.class);
325         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, protocoliid,
326                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(protocols));
327
328         Interface interfaceObject = new InterfaceBuilder().withKey(new InterfaceKey("itf1"))
329                 .setSupportingCircuitPackName("sc1").build();
330         InstanceIdentifier<Interface> interfaceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
331                 .child(Interface.class, new InterfaceKey(portConfig.getIfName()));
332         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, interfaceIID,
333                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
334                         .thenReturn(Optional.of(interfaceObject));
335
336         InstanceIdentifier<Ports> portID = getChild("c1", "p1");
337         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID,
338                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports));
339
340         InstanceIdentifier<Ports> portID1 = getChild("c2", "p1");
341         when(deviceTransactionManager.getDataFromDevice("node",
342             LogicalDatastoreType.OPERATIONAL, portID1,
343             Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
344             .thenReturn(Optional.of(ports1));
345
346         InstanceIdentifier<Ports> portID2 = getChild("c3", "p2");
347         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID2,
348                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports2));
349
350         InstanceIdentifier<Ports> portID3 = getChild("c3", "p3");
351         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID3,
352                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports3));
353
354         InstanceIdentifier<Ports> portID22 = getChild("c5", "p22");
355         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID22,
356                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports22));
357
358         InstanceIdentifier<Ports> portID33 = getChild("c5", "p33");
359         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID33,
360                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports33));
361
362         InstanceIdentifier<Ports> portID4 = getChild("c4", "p4");
363         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID4,
364                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports4));
365
366         InstanceIdentifier<Ports> portID5 = getChild("c4", "p5");
367         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID5,
368                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports5));
369
370         InstanceIdentifier<Ports> portID44 = getChild("c6", "p44");
371         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID44,
372                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports44));
373
374         InstanceIdentifier<Ports> portID55 = getChild("c6", "p55");
375         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID55,
376                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports55));
377
378         InstanceIdentifier<Info> infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
379         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, infoIID,
380                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(info));
381
382         InstanceIdentifier<CircuitPacks> circuitPacksIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
383                 .child(CircuitPacks.class, new CircuitPacksKey("c1"));
384         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID,
385                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
386                         .thenReturn(Optional.of(circuitPackObject));
387
388         InstanceIdentifier<CircuitPacks> circuitPacksIID2 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
389                 .child(CircuitPacks.class, new CircuitPacksKey("c2"));
390         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID2,
391                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
392                         .thenReturn(Optional.of(circuitPackObject2));
393
394         InstanceIdentifier<CircuitPacks> circuitPacksIID3 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
395                 .child(CircuitPacks.class, new CircuitPacksKey("c3"));
396         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID3,
397                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
398                         .thenReturn(Optional.of(circuitPackObject3));
399
400         InstanceIdentifier<CircuitPacks> circuitPacksIID4 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
401                 .child(CircuitPacks.class, new CircuitPacksKey("c4"));
402         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID4,
403                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
404                         .thenReturn(Optional.of(circuitPackObject4));
405
406         InstanceIdentifier<CircuitPacks> circuitPacksIID5 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
407                 .child(CircuitPacks.class, new CircuitPacksKey("c5"));
408         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID5,
409                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
410                         .thenReturn(Optional.of(circuitPackObject5));
411
412         InstanceIdentifier<CircuitPacks> circuitPacksIID6 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
413                 .child(CircuitPacks.class, new CircuitPacksKey("c6"));
414         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID6,
415                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
416                         .thenReturn(Optional.of(circuitPackObject6));
417
418         InstanceIdentifier<SharedRiskGroup> srgIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
419                 .child(SharedRiskGroup.class, new SharedRiskGroupKey(Uint16.valueOf(1)));
420         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, srgIID,
421                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
422                         .thenReturn(Optional.of(ordmSrgObject));
423
424         InstanceIdentifier<SharedRiskGroup> srgIID4 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
425                 .child(SharedRiskGroup.class, new SharedRiskGroupKey(Uint16.valueOf(2)));
426         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, srgIID4,
427                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
428                         .thenReturn(Optional.of(ordmSrgObject4));
429
430         InstanceIdentifier<SharedRiskGroup> srgIID6 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
431                 .child(SharedRiskGroup.class, new SharedRiskGroupKey(Uint16.valueOf(3)));
432         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, srgIID6,
433                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
434                         .thenReturn(Optional.of(ordmSrgObject6));
435
436         Interface ifc1 = new InterfaceBuilder().withKey(new InterfaceKey("ifc1"))
437                 .setType(OpticalTransport.class).build();
438         Interface ifc2 = new InterfaceBuilder().withKey(new InterfaceKey("ifc2"))
439                 .setType(OpenROADMOpticalMultiplex.class).build();
440
441         // test createMappingData with a node with 3 dgree + 3 srg + bidirectional & unidirectional ports
442         assertTrue("creating mappingdata for existed node returns true",
443                 portMappingVersion121.createMappingData("node"));
444
445         // assert all portmappings have been created for the roadm node
446         ReadTransaction rr = dataBroker.newReadOnlyTransaction();
447         InstanceIdentifier<Network> mappingIID = InstanceIdentifier.create(Network.class);
448         Network network = new NetworkBuilder().build();
449         try {
450             Optional<Network> optionalNetwork = rr.read(LogicalDatastoreType.CONFIGURATION, mappingIID).get();
451             if (optionalNetwork.isPresent()) {
452                 network = optionalNetwork.get();
453             }
454
455         } catch (ExecutionException | InterruptedException e) {
456             LOG.error("Failed to read mapping.", e);
457             fail();
458
459         }
460         List<String> testMappings = Arrays.asList("SRG2-PP1-RX", "SRG3-PP1-RX", "SRG1-PP1-TXRX", "SRG3-PP1-TX",
461                 "DEG1-TTP-TXRX", "SRG2-PP1-TX", "DEG2-TTP-RX", "DEG2-TTP-TX", "DEG3-TTP-RX", "DEG3-TTP-TX");
462         List<String> mappings = new ArrayList<>();
463         List<Nodes> nodes = new ArrayList<>(network.nonnullNodes().values());
464         List<Mapping> mappingValues = new ArrayList<>(nodes.get(0).nonnullMapping().values());
465         for (int i = 0; i < testMappings.size(); i++) {
466             mappings.add(mappingValues.get(i).getLogicalConnectionPoint());
467         }
468         Collections.sort(testMappings);
469         Collections.sort(mappings);
470         assertEquals("test mapping are equals to mapping", testMappings, mappings);
471
472         // test updateMapping
473         assertTrue("update mapping for node returns true",
474                 portMappingVersion121.updateMapping("node", mappingValues.get(0)));
475
476         // test createMapping for non-existent roadm node
477         assertFalse("create non existed roadm node returns false", portMappingVersion121.createMappingData("node2"));
478
479         // test updateMapping for null roadm node
480         assertFalse("updating null roadm node returns false",
481                 portMappingVersion121.updateMapping(null, mappingValues.get(0)));
482
483     }
484
485     @Test
486     public void createMappingDataTestXpdr() {
487         // mock node info
488         final Info info = getInfo();
489
490         // mock 1 bidirectional port for network
491         Ports ports = new PortsBuilder().withKey(new PortsKey("p1")).setPortName("p1")
492                 .setPortQual(Port.PortQual.XpdrNetwork)
493                 .setPortDirection(Direction.Bidirectional).build();
494         List<Ports> portsList = new ArrayList<>();
495         portsList.add(ports);
496
497         // mock 1 bidirectional port for client
498         Ports ports11 = new PortsBuilder().withKey(new PortsKey("p11")).setPortName("p11")
499                 .setPortQual(Port.PortQual.XpdrClient)
500                 .setPortDirection(Direction.Bidirectional).build();
501         List<Ports> portsList11 = new ArrayList<>();
502         portsList11.add(ports11);
503
504         // mock 2 unidirectional ports for network
505         Ports ports2 = getPorts("p2", Port.PortQual.XpdrNetwork, "c3", "p3", Direction.Rx);
506         Ports ports3 = getPorts("p3", Port.PortQual.XpdrNetwork, "c3", "p2", Direction.Tx);
507         List<Ports> portsList2 = new ArrayList<>();
508         portsList2.add(ports2);
509         portsList2.add(ports3);
510
511         // mock 2 unidirectional ports for network, reverse direction
512         Ports ports4 = getPorts("p4", Port.PortQual.XpdrNetwork, "c4", "p5", Direction.Tx);
513         Ports ports5 = getPorts("p5", Port.PortQual.XpdrNetwork, "c4", "p4", Direction.Rx);
514         List<Ports> portsList4 = new ArrayList<>();
515         portsList4.add(ports4);
516         portsList4.add(ports5);
517
518         // mock connection map
519         Destination destination = new DestinationBuilder()
520                 .setCircuitPackName("c2").setPortName("p11").build();
521         List<Destination> destinationList = new ArrayList<>();
522         destinationList.add(destination);
523         ConnectionMap connectionMap = getConnectionMap(destinationList);
524         Map<ConnectionMapKey, ConnectionMap> connectionMapMap = new HashMap<>();
525         connectionMapMap.put(connectionMap.key(), connectionMap);
526
527         // mock reponses for deviceTransactionManager
528         InstanceIdentifier<Ports> portID = getChild("c1", "p1");
529         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID,
530                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports));
531
532         InstanceIdentifier<Ports> portID11 = getChild("c2", "p11");
533         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID11,
534                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports11));
535
536         InstanceIdentifier<Ports> portID2 = getChild("c3", "p2");
537         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID2,
538                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports2));
539
540         InstanceIdentifier<Ports> portID3 = getChild("c3", "p3");
541         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID3,
542                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports3));
543
544         InstanceIdentifier<Ports> portID4 = getChild("c4", "p4");
545         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID4,
546                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports4));
547
548         InstanceIdentifier<Ports> portID5 = getChild("c4", "p5");
549         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, portID5,
550                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(ports5));
551
552         InstanceIdentifier<Info> infoIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(Info.class);
553         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, infoIID,
554                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(info));
555
556         // mock 4 circuit packs
557         CircuitPacks circuitPackObject = getCircuitPacks(portsList, "c1", "pc1");
558         CircuitPacks circuitPackObject2 = getCircuitPacks(portsList11, "c2", "pc2");
559         CircuitPacks circuitPackObject3 = getCircuitPacks(portsList2, "c3", "pc3");
560         CircuitPacks circuitPackObject4 = getCircuitPacks(portsList4, "c4", "pc4");
561
562         InstanceIdentifier<CircuitPacks> circuitPacksIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
563                 .child(CircuitPacks.class, new CircuitPacksKey("c1"));
564         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID,
565                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
566                         .thenReturn(Optional.of(circuitPackObject));
567
568         InstanceIdentifier<CircuitPacks> circuitPacksIID2 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
569                 .child(CircuitPacks.class, new CircuitPacksKey("c2"));
570         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID2,
571                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
572                         .thenReturn(Optional.of(circuitPackObject2));
573
574         InstanceIdentifier<CircuitPacks> circuitPacksIID3 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
575                 .child(CircuitPacks.class, new CircuitPacksKey("c3"));
576         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID3,
577                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
578                         .thenReturn(Optional.of(circuitPackObject3));
579
580         InstanceIdentifier<CircuitPacks> circuitPacksIID4 = InstanceIdentifier.create(OrgOpenroadmDevice.class)
581                 .child(CircuitPacks.class, new CircuitPacksKey("c4"));
582         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, circuitPacksIID4,
583                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT))
584                         .thenReturn(Optional.of(circuitPackObject4));
585
586         Map<CircuitPacksKey, CircuitPacks> circuitPacksMap = new HashMap<>();
587         circuitPacksMap.put(circuitPackObject.key(), circuitPackObject);
588         circuitPacksMap.put(circuitPackObject2.key(), circuitPackObject2);
589         circuitPacksMap.put(circuitPackObject3.key(), circuitPackObject3);
590         circuitPacksMap.put(circuitPackObject4.key(), circuitPackObject4);
591
592         OrgOpenroadmDevice deviceObject = new OrgOpenroadmDeviceBuilder().setCircuitPacks(circuitPacksMap)
593                 .setConnectionMap(connectionMapMap).build();
594         InstanceIdentifier<OrgOpenroadmDevice> deviceIID = InstanceIdentifier.create(OrgOpenroadmDevice.class);
595         when(deviceTransactionManager.getDataFromDevice("node", LogicalDatastoreType.OPERATIONAL, deviceIID,
596                 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT)).thenReturn(Optional.of(deviceObject));
597
598         // test createMappingData for xpdr node with 2 network + 1 client + unidirectional & bidirectional ports
599         assertTrue("returns true when create mapping ", portMappingVersion121.createMappingData("node"));
600
601         // assert all portmappings have been created for the xpdr node
602         ReadTransaction rr = dataBroker.newReadOnlyTransaction();
603         InstanceIdentifier<Network> mappingIID = InstanceIdentifier.create(Network.class);
604         Network network = new NetworkBuilder().build();
605         try {
606             Optional<Network> optionalNetwork = rr.read(LogicalDatastoreType.CONFIGURATION, mappingIID).get();
607             if (optionalNetwork.isPresent()) {
608                 network = optionalNetwork.get();
609             }
610
611         } catch (ExecutionException | InterruptedException e) {
612             LOG.error("Failed to read mapping.", e);
613             fail();
614         }
615         List<String> testMappings = new ArrayList<>(List.of("XPDR1-CLIENT1", "XPDR1-NETWORK5", "XPDR1-NETWORK4",
616             "XPDR1-NETWORK3", "XPDR1-NETWORK2", "XPDR1-NETWORK1"));
617         List<String> mappings = new ArrayList<>();
618         List<Nodes> nodes = new ArrayList<>(network.nonnullNodes().values());
619         List<Mapping> mappingValues = new ArrayList<>(nodes.get(0).nonnullMapping().values());
620         for (int i = 0; i < testMappings.size(); i++) {
621             mappings.add(mappingValues.get(i).getLogicalConnectionPoint());
622         }
623         Collections.sort(testMappings);
624         Collections.sort(mappings);
625         assertEquals("test mapping are equals to mapping", testMappings, mappings);
626     }
627
628     @NonNull
629     private KeyedInstanceIdentifier<Ports, PortsKey> getChild(String c4, String p5) {
630         return InstanceIdentifier.create(OrgOpenroadmDevice.class).child(CircuitPacks.class, new CircuitPacksKey(c4))
631                 .child(Ports.class, new PortsKey(p5));
632     }
633
634     private ConnectionMap getConnectionMap(List<Destination> destinationList) {
635         Map<DestinationKey, Destination> destinationMap = new HashMap<>();
636         for (Destination destination : destinationList) {
637             destinationMap.put(destination.key(), destination);
638         }
639         return new ConnectionMapBuilder().setConnectionMapNumber(Uint32.valueOf(1))
640                 .setSource(new SourceBuilder().setCircuitPackName("c1").setPortName("p1").build())
641                 .setDestination(destinationMap).build();
642     }
643
644     private Info getInfo() {
645         return new InfoBuilder().setNodeNumber(Uint32.valueOf(1)).setClli("clli").setNodeType(NodeTypes.Xpdr)
646                 .setModel("model").setVendor("vendor").setIpAddress(new IpAddress(new Ipv4Address("10.1.1.1")))
647                 .setMaxDegrees(Uint16.valueOf(2)).setMaxSrgs(Uint16.valueOf(2)).setNodeId("node").build();
648     }
649
650     private Ports getPorts(String p2, Port.PortQual roadmExternal, String c3, String p3, Direction rx) {
651         return new PortsBuilder().setPortName(p2).setPortQual(roadmExternal)
652                 .setPartnerPort(new PartnerPortBuilder().setCircuitPackName(c3).setPortName(p3).build())
653                 .setPortDirection(rx).build();
654     }
655
656     private ConnectionPorts getConnectionPorts(String c1, String p1) {
657         return new ConnectionPortsBuilder().setIndex(Uint32.valueOf(ran.nextInt(Integer.MAX_VALUE)))
658                 .setCircuitPackName(c1).setPortName(p1).build();
659     }
660
661     private CircuitPacks getCircuitPacks(List<Ports> portsList, String c1, String pc1) {
662         Map<PortsKey, Ports> portsMap = new HashMap<>();
663         for (Ports ports : portsList) {
664             portsMap.put(ports.key(), ports);
665         }
666         return new CircuitPacksBuilder().setCircuitPackName(c1)
667                 .setParentCircuitPack(new ParentCircuitPackBuilder().setCircuitPackName(pc1).build()).setPorts(portsMap)
668                 .build();
669     }
670
671     private Ports getPortsWithInterfaces(List<Interfaces> interfacesList, String p1) {
672         return new PortsBuilder().setPortName(p1).setPortQual(Port.PortQual.RoadmExternal)
673                 .setPortDirection(Direction.Bidirectional).setInterfaces(interfacesList).build();
674     }
675
676     private Info getInfo2() {
677         return new InfoBuilder().setNodeNumber(Uint32.valueOf(1)).setClli("clli").setNodeType(NodeTypes.Rdm)
678                 .setModel("model").setVendor("vendor").setIpAddress(new IpAddress(new Ipv4Address("10.1.1.1")))
679                 .setMaxDegrees(Uint16.valueOf(3)).setMaxSrgs(Uint16.valueOf(3)).build();
680     }
681
682     private Interfaces getInterfaces(String i1) {
683         return new InterfacesBuilder().setInterfaceName(i1).build();
684     }
685
686 }