2 * Copyright © 2018 Orange Systems, Inc. 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.transportpce.renderer;
10 import java.math.BigDecimal;
11 import java.util.ArrayList;
12 import java.util.Arrays;
13 import java.util.Collection;
14 import java.util.HashMap;
15 import java.util.List;
17 import java.util.concurrent.ExecutionException;
18 import org.junit.Assert;
19 import org.junit.Before;
20 import org.junit.Ignore;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.junit.runners.Parameterized;
24 import org.opendaylight.transportpce.common.StringConstants;
25 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
26 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
27 import org.opendaylight.transportpce.common.fixedflex.FixedFlexImpl;
28 import org.opendaylight.transportpce.common.fixedflex.FixedGridConstant;
29 import org.opendaylight.transportpce.common.fixedflex.GridConstant;
30 import org.opendaylight.transportpce.renderer.stub.MountPointServiceStub;
31 import org.opendaylight.transportpce.renderer.stub.MountPointStub;
32 import org.opendaylight.transportpce.renderer.utils.ServiceDeleteDataUtils;
33 import org.opendaylight.transportpce.renderer.utils.WaveLengthServiceUtils;
34 import org.opendaylight.transportpce.test.AbstractTest;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyGHz;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev200529.FrequencyTHz;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.Node1;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.Node1Builder;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.TerminationPoint1;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.TerminationPoint1Builder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.DegreeAttributesBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.SrgAttributesBuilder;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.termination.point.CpAttributesBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.termination.point.CtpAttributesBuilder;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.termination.point.PpAttributesBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.termination.point.RxTtpAttributesBuilder;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.termination.point.TxTtpAttributesBuilder;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.termination.point.XpdrClientAttributesBuilder;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.termination.point.XpdrNetworkAttributesBuilder;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.termination.point.XpdrPortAttributesBuilder;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmTpType;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMaps;
54 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMapsBuilder;
55 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.available.freq.map.AvailFreqMapsKey;
56 import org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev200529.xpdr.port.connection.attributes.WavelengthBuilder;
57 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.PathDescription;
58 import org.opendaylight.yangtools.yang.common.Uint16;
61 @RunWith(Parameterized.class)
62 public class NetworkModelWaveLengthServiceFreeTest extends AbstractTest {
63 private static final long WAVE_LENGTH = 20L;
64 private NetworkModelWavelengthService networkModelWavelengthService;
65 private DeviceTransactionManager deviceTransactionManager;
66 private TerminationPoint1 terminationPoint1;
67 private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
68 .TerminationPoint1 terminationPoint2;
69 private PathDescription pathDescription;
71 private org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 node2;
72 private final AvailFreqMapsKey freqMapKey = new AvailFreqMapsKey(GridConstant.C_BAND);
74 public NetworkModelWaveLengthServiceFreeTest(PathDescription pathDescription, TerminationPoint1 terminationPoint1,
76 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1 terminationPoint2,
77 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 node2) {
79 this.pathDescription = pathDescription;
80 this.terminationPoint1 = terminationPoint1;
81 this.terminationPoint2 = terminationPoint2;
87 @Parameterized.Parameters
88 public static Collection createParameters() {
89 List<Object[]> parameters = new ArrayList<>();
91 PathDescription pathDescription =
92 ServiceDeleteDataUtils.createTransactionPathDescription(StringConstants.TTP_TOKEN);
94 FixedFlexImpl fixedFlex = new FixedFlexImpl();
95 fixedFlex = fixedFlex.getFixedFlexWaveMapping(WAVE_LENGTH);
97 byte[] byteArray = new byte[FixedGridConstant.NB_CHANNELS * FixedGridConstant.EFFECTIVE_BITS];
98 Arrays.fill(byteArray, (byte) GridConstant.USED_SLOT_VALUE);
99 for (int i = 152;i <= 159;i++) {
100 byteArray[i] = (byte) GridConstant.AVAILABLE_SLOT_VALUE;
102 Map<AvailFreqMapsKey, AvailFreqMaps> waveMap = new HashMap<>();
103 AvailFreqMaps availFreqMaps = new AvailFreqMapsBuilder().setMapName(GridConstant.C_BAND)
104 .setFreqMapGranularity(new FrequencyGHz(BigDecimal.valueOf(FixedGridConstant.GRANULARITY)))
105 .setStartEdgeFreq(new FrequencyTHz(BigDecimal.valueOf(FixedGridConstant.START_EDGE_FREQUENCY)))
106 .setEffectiveBits(Uint16.valueOf(FixedGridConstant.EFFECTIVE_BITS))
107 .setFreqMap(byteArray)
109 waveMap.put(availFreqMaps.key(), availFreqMaps);
110 FrequencyGHz frequencyGHz = new FrequencyGHz(BigDecimal.valueOf(fixedFlex.getWavelength()));
111 FrequencyTHz frequencyTHz = new FrequencyTHz(BigDecimal.valueOf(fixedFlex.getCenterFrequency()));
112 TerminationPoint1Builder terminationPoint1Builder = new TerminationPoint1Builder()
113 .setCtpAttributes((new CtpAttributesBuilder())
114 .setAvailFreqMaps(waveMap)
116 .setCpAttributes((new CpAttributesBuilder())
117 .setAvailFreqMaps(waveMap)
119 .setTxTtpAttributes((new TxTtpAttributesBuilder())
120 .setAvailFreqMaps(waveMap)
122 .setRxTtpAttributes((new RxTtpAttributesBuilder())
123 .setAvailFreqMaps(waveMap)
125 .setPpAttributes((new PpAttributesBuilder())
126 .setAvailFreqMaps(waveMap)
128 .setXpdrClientAttributes((new XpdrClientAttributesBuilder())
129 .setWavelength((new WavelengthBuilder())
130 .setFrequency(frequencyTHz)
131 .setWidth(frequencyGHz)
134 .setXpdrNetworkAttributes((new XpdrNetworkAttributesBuilder())
135 .setWavelength((new WavelengthBuilder())
136 .setFrequency(frequencyTHz)
137 .setWidth(frequencyGHz)
140 .setXpdrPortAttributes((new XpdrPortAttributesBuilder())
141 .setWavelength((new WavelengthBuilder())
142 .setFrequency(frequencyTHz)
143 .setWidth(frequencyGHz)
147 Node1Builder node1Builder = new Node1Builder()
148 .setDegreeAttributes((new DegreeAttributesBuilder()).setAvailFreqMaps(Map.of()).build())
149 .setSrgAttributes((new SrgAttributesBuilder()).setAvailFreqMaps(Map.of()).build());
151 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder
152 terminationPoint2Builder =
153 new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1Builder();
155 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder node2Builder =
156 new org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1Builder();
158 for (OpenroadmNodeType nodeType : Arrays.asList(OpenroadmNodeType.XPONDER, OpenroadmNodeType.DEGREE,
159 OpenroadmNodeType.SRG)) {
160 node2Builder.setNodeType(nodeType);
161 terminationPoint2Builder.setTpType(OpenroadmTpType.DEGREETXTTP);
162 parameters.add(new Object[] { pathDescription, terminationPoint1Builder.build(), node1Builder.build(),
163 terminationPoint2Builder.build(), node2Builder.build() });
166 for (OpenroadmTpType tpType : OpenroadmTpType.values()) {
167 node2Builder.setNodeType(OpenroadmNodeType.DEGREE);
168 node1Builder.setDegreeAttributes(null);
169 terminationPoint2Builder.setTpType(tpType);
170 parameters.add(new Object[] { pathDescription, terminationPoint1Builder.build(), node1Builder.build(),
171 terminationPoint2Builder.build(), node2Builder.build() });
174 node2Builder.setNodeType(OpenroadmNodeType.SRG);
175 node1Builder.setDegreeAttributes((new DegreeAttributesBuilder()).setAvailFreqMaps(Map.of()).build())
176 .setSrgAttributes(null);
177 terminationPoint2Builder.setTpType(OpenroadmTpType.DEGREETXTTP);
178 parameters.add(new Object[] { pathDescription, terminationPoint1Builder.build(), node1Builder.build(),
179 terminationPoint2Builder.build(), node2Builder.build() });
184 public void setMountPoint() {
185 MountPointServiceStub mountPointService = new MountPointServiceStub(new MountPointStub(this.getDataBroker()));
186 this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000);
187 networkModelWavelengthService = new NetworkModelWavelengthServiceImpl(this.getDataBroker());
191 public void freeWavelengthsTest() throws ExecutionException, InterruptedException {
192 WaveLengthServiceUtils.putTerminationPoint1ToDatastore("node1" + StringConstants.TTP_TOKEN,
193 StringConstants.TTP_TOKEN, this.terminationPoint1, this.deviceTransactionManager);
194 WaveLengthServiceUtils.putTerminationPoint2ToDatastore("node1" + StringConstants.TTP_TOKEN,
195 StringConstants.TTP_TOKEN, this.terminationPoint2, this.deviceTransactionManager);
196 WaveLengthServiceUtils.putNode1ToDatastore("node1" + StringConstants.TTP_TOKEN, this.node1,
197 this.deviceTransactionManager);
198 WaveLengthServiceUtils.putNode2ToDatastore("node1" + StringConstants.TTP_TOKEN, this.node2,
199 this.deviceTransactionManager);
200 this.networkModelWavelengthService.freeWavelengths(this.pathDescription);
201 Node1 updatedNode1 = WaveLengthServiceUtils.getNode1FromDatastore("node1" + StringConstants.TTP_TOKEN,
202 this.deviceTransactionManager);
203 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1 updatedNode2 =
204 WaveLengthServiceUtils.getNode2FromDatastore("node1" + StringConstants.TTP_TOKEN,
205 this.deviceTransactionManager);
206 TerminationPoint1 updatedTerminationPoint1 =
207 WaveLengthServiceUtils.getTerminationPoint1FromDatastore("node1" + StringConstants.TTP_TOKEN,
208 StringConstants.TTP_TOKEN, this.deviceTransactionManager);
209 org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529
210 .TerminationPoint1 updatedTerminationPoint2 = WaveLengthServiceUtils
211 .getTerminationPoint2FromDatastore("node1" + StringConstants.TTP_TOKEN, StringConstants.TTP_TOKEN,
212 this.deviceTransactionManager);
213 switch (updatedTerminationPoint2.getTpType()) {
217 Assert.assertNull(updatedTerminationPoint1.getCtpAttributes());
218 Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getAvailFreqMaps().isEmpty());
219 Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty());
220 Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty());
221 Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty());
222 Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength());
223 Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength());
224 Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength());
229 Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getAvailFreqMaps().isEmpty());
230 Assert.assertNull(updatedTerminationPoint1.getCpAttributes());
231 Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty());
232 Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty());
233 Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty());
234 Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength());
235 Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength());
236 Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength());
240 Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getAvailFreqMaps().isEmpty());
241 Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getAvailFreqMaps().isEmpty());
242 Assert.assertNull(updatedTerminationPoint1.getTxTtpAttributes());
243 Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty());
244 Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty());
245 Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength());
246 Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength());
247 Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength());
250 Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getAvailFreqMaps().isEmpty());
251 Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getAvailFreqMaps().isEmpty());
252 Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty());
253 Assert.assertNull(updatedTerminationPoint1.getRxTtpAttributes());
254 Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty());
255 Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength());
256 Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength());
257 Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength());
262 Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getAvailFreqMaps().isEmpty());
263 Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getAvailFreqMaps().isEmpty());
264 Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty());
265 Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty());
266 Assert.assertNull(updatedTerminationPoint1.getPpAttributes());
267 Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength());
268 Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength());
269 Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength());
272 Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getAvailFreqMaps().isEmpty());
273 Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getAvailFreqMaps().isEmpty());
274 Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty());
275 Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty());
276 Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty());
277 Assert.assertNull(updatedTerminationPoint1.getXpdrClientAttributes());
278 Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength());
279 Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength());
282 Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getAvailFreqMaps().isEmpty());
283 Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getAvailFreqMaps().isEmpty());
284 Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty());
285 Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty());
286 Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty());
287 Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength());
288 Assert.assertNull(updatedTerminationPoint1.getXpdrNetworkAttributes());
289 Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength());
292 Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getAvailFreqMaps().isEmpty());
293 Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getAvailFreqMaps().isEmpty());
294 Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty());
295 Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty());
296 Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty());
297 Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength());
298 Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength());
299 Assert.assertNull(updatedTerminationPoint1.getXpdrPortAttributes());
302 Assert.assertFalse(updatedTerminationPoint1.getCtpAttributes().getAvailFreqMaps().isEmpty());
303 Assert.assertFalse(updatedTerminationPoint1.getCpAttributes().getAvailFreqMaps().isEmpty());
304 Assert.assertFalse(updatedTerminationPoint1.getTxTtpAttributes().getUsedWavelengths().isEmpty());
305 Assert.assertFalse(updatedTerminationPoint1.getRxTtpAttributes().getUsedWavelengths().isEmpty());
306 Assert.assertFalse(updatedTerminationPoint1.getPpAttributes().getUsedWavelength().isEmpty());
307 Assert.assertNotNull(updatedTerminationPoint1.getXpdrClientAttributes().getWavelength());
308 Assert.assertNotNull(updatedTerminationPoint1.getXpdrNetworkAttributes().getWavelength());
309 Assert.assertNotNull(updatedTerminationPoint1.getXpdrPortAttributes().getWavelength());
312 AvailFreqMaps availFreqMaps4Srg = updatedNode1.getSrgAttributes().nonnullAvailFreqMaps().get(freqMapKey);
313 AvailFreqMaps availFreqMaps4Degree = updatedNode1.getDegreeAttributes().nonnullAvailFreqMaps().get(freqMapKey);
314 int effectiveBits = availFreqMaps4Srg.getEffectiveBits().intValue();
315 byte[] array = new byte[effectiveBits];
316 Arrays.fill(array, (byte) 1);
317 switch (updatedNode2.getNodeType()) {
319 Assert.assertNotNull("FreqMap should not be null", availFreqMaps4Degree.getFreqMap());
320 Assert.assertTrue("Index 20 should be available",
321 Arrays.equals(Arrays.copyOfRange(availFreqMaps4Degree.getFreqMap(), 152, 160), array));
322 Assert.assertNull(availFreqMaps4Srg);
325 Assert.assertNotNull("FreqMap should not be null", availFreqMaps4Srg.getFreqMap());
326 Assert.assertTrue("Index 20 should be available",
327 Arrays.equals(Arrays.copyOfRange(availFreqMaps4Srg.getFreqMap(), 152, 160), array));
328 Assert.assertNull(availFreqMaps4Degree);
331 Assert.assertNull(availFreqMaps4Degree);
332 Assert.assertNull(availFreqMaps4Srg);