Migrate common module to JUnit5
[transportpce.git] / common / src / test / java / org / opendaylight / transportpce / common / catalog / CatalogUtilsTest.java
1 /*
2  * Copyright © 2022 Orange, 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.catalog;
10
11
12 import static org.junit.jupiter.api.Assertions.assertEquals;
13 import static org.junit.jupiter.api.Assertions.fail;
14
15 import java.io.FileReader;
16 import java.io.IOException;
17 import java.io.Reader;
18 import java.nio.charset.StandardCharsets;
19 import java.util.HashMap;
20 import java.util.Map;
21 import java.util.concurrent.ExecutionException;
22 import org.eclipse.jdt.annotation.NonNull;
23 import org.junit.jupiter.api.BeforeAll;
24 import org.junit.jupiter.api.Test;
25 import org.opendaylight.mdsal.binding.api.WriteTransaction;
26 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
27 import org.opendaylight.transportpce.common.StringConstants;
28 import org.opendaylight.transportpce.common.network.NetworkTransactionImpl;
29 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
30 import org.opendaylight.transportpce.test.AbstractTest;
31 import org.opendaylight.transportpce.test.converter.DataObjectConverter;
32 import org.opendaylight.transportpce.test.converter.JSONDataObjectConverter;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.OperationalModeCatalog;
34 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
35 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
36 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
39
40 public class CatalogUtilsTest extends AbstractTest {
41     private static final Logger LOG = LoggerFactory.getLogger(CatalogUtilsTest.class);
42     private static final String CATALOG_FILE = "src/test/resources/apidocCatalog10_1OptSpecV5_1.json";
43
44     private static OperationalModeCatalog omCatalog;
45     private static Map<String, Double> outputImpairments = new HashMap<>();
46
47     @BeforeAll
48     static void setUp() throws InterruptedException,
49         ExecutionException {
50         DataObjectConverter dataObjectConverter = JSONDataObjectConverter
51             .createWithDataStoreUtil(getDataStoreContextUtil());
52         try (Reader reader = new FileReader(CATALOG_FILE, StandardCharsets.UTF_8)) {
53             NormalizedNode normalizedNode = dataObjectConverter
54                 .transformIntoNormalizedNode(reader).get();
55             omCatalog = (OperationalModeCatalog) getDataStoreContextUtil()
56                 .getBindingDOMCodecServices().fromNormalizedNode(YangInstanceIdentifier
57                     .of(OperationalModeCatalog.QNAME), normalizedNode)
58                 .getValue();
59             @NonNull
60             WriteTransaction newWriteOnlyTransaction = getDataBroker().newWriteOnlyTransaction();
61             newWriteOnlyTransaction
62                 .put(LogicalDatastoreType.CONFIGURATION,
63                     InstanceIdentifier.create(OperationalModeCatalog.class),
64                     omCatalog);
65             newWriteOnlyTransaction.commit().get();
66         } catch (IOException e) {
67             LOG.error("Cannot load OpenROADM part of Operational Mode Catalog ", e);
68             fail("Cannot load openROADM operational modes ");
69         }
70     }
71
72     @Test
73     void catalogPrimitivesTest() {
74         NetworkTransactionService netTransServ = new NetworkTransactionImpl(getDataBroker());
75         CatalogUtils catalogUtils = new CatalogUtils(netTransServ);
76         assertEquals(
77             CatalogConstant.MWWRCORE,
78             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.ADD,
79                 StringConstants.SERVICE_TYPE_100GE_T),
80             "Checking retrieval of Operational Mode from Node Type ADD");
81         assertEquals(
82             CatalogConstant.MWWRCORE,
83             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.DROP,
84                 StringConstants.SERVICE_TYPE_100GE_T),
85             "Checking retrieval of Operational Mode from Node Type DROP");
86         assertEquals(
87             CatalogConstant.MWMWCORE,
88             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.EXPRESS,
89                 StringConstants.SERVICE_TYPE_100GE_T),
90             "Checking retrieval of Operational Mode from Node Type EXPRESS");
91         assertEquals(
92             CatalogConstant.MWISTANDARD,
93             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.AMP,
94                 StringConstants.SERVICE_TYPE_100GE_T),
95             "Checking retrieval of Operational Mode from Node Type AMP");
96         assertEquals(
97             CatalogConstant.ORW100GSC,
98             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.TSP,
99                 StringConstants.SERVICE_TYPE_100GE_T),
100             "Checking retrieval of Operational Mode from Node Type and service Type 100GE");
101         assertEquals(
102             CatalogConstant.ORW100GSC,
103             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.TSP,
104                 StringConstants.SERVICE_TYPE_OTU4),
105             "Checking retrieval of Operational Mode from Node Type and service Type OTU4");
106         assertEquals(
107             CatalogConstant.ORW200GOFEC316GBD,
108             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.TSP,
109                 StringConstants.SERVICE_TYPE_OTUC2),
110             "Checking retrieval of Operational Mode from Node Type and service Type OTUC2");
111         assertEquals(
112             CatalogConstant.ORW300GOFEC631GBD,
113             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.TSP,
114                 StringConstants.SERVICE_TYPE_OTUC3),
115             "Checking retrieval of Operational Mode from Node Type and service Type OTUC3");
116         assertEquals(
117             CatalogConstant.ORW400GOFEC631GBD,
118             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.TSP,
119                 StringConstants.SERVICE_TYPE_400GE),
120             "Checking retrieval of Operational Mode from Node Type and service Type 400GE");
121         assertEquals(
122             CatalogConstant.ORW400GOFEC631GBD,
123             catalogUtils.getPceOperationalModeFromServiceType(CatalogConstant.CatalogNodeType.TSP,
124                 StringConstants.SERVICE_TYPE_OTUC4),
125             "Checking retrieval of Operational Mode from Node Type and service Type OTUC4");
126         assertEquals(
127             50.0,
128             catalogUtils.getPceTxTspChannelSpacing(CatalogConstant.ORW100GSC),
129             0.005,
130             "Checking retrieval of channel spacing from Operational Mode 100G SC FEC");
131         assertEquals(
132             50.0,
133             catalogUtils.getPceTxTspChannelSpacing(CatalogConstant.ORW100GOFEC316GBD),
134             0.005,
135             "Checking retrieval of channel spacing from Operational Mode 100G OFEC 31.6");
136         assertEquals(
137             50.0,
138             catalogUtils.getPceTxTspChannelSpacing(CatalogConstant.ORW200GOFEC316GBD),
139             0.005,
140             "Checking retrieval of channel spacing from Operational Mode 200G OFEC 31.6");
141         assertEquals(
142             87.5,
143             catalogUtils.getPceTxTspChannelSpacing(CatalogConstant.ORW200GOFEC631GBD),
144             0.005,
145             "Checking retrieval of channel spacing from Operational Mode 200G OFEC 63.1");
146         assertEquals(
147             87.5,
148             catalogUtils.getPceTxTspChannelSpacing(CatalogConstant.ORW300GOFEC631GBD),
149             0.005,
150             "Checking retrieval of channel spacing from Operational Mode 300G OFEC 63.1 GBd");
151         assertEquals(
152             87.5,
153             catalogUtils.getPceTxTspChannelSpacing(CatalogConstant.ORW400GOFEC631GBD),
154             0.005,
155             "Checking retrieval of channel spacing from Operational Mode 400G OFEC 63.1 Gbd");
156         assertEquals(
157             1345.6,
158             catalogUtils.getPceTxTspParameters(CatalogConstant.ORW100GSC, CatalogConstant.MWWRCORE) * 1000000.0,
159             0.5,
160             "Checking 100GSCFEC ONSR Lin");
161         assertEquals(
162             450.7,
163             catalogUtils.getPceTxTspParameters(CatalogConstant.ORW100GOFEC316GBD, CatalogConstant.MWWRCORE) * 1000000.0,
164             0.5,
165             "Checking 100G OFEC 31.6 Gbauds ONSR Lin");
166         assertEquals(
167             450.7,
168             catalogUtils.getPceTxTspParameters(CatalogConstant.ORW200GOFEC316GBD, CatalogConstant.MWWRCORE) * 1000000.0,
169             0.5,
170             "Checking 200G OFEC 31.6 Gbauds ONSR Lin");
171         assertEquals(
172             450.7,
173             catalogUtils.getPceTxTspParameters(CatalogConstant.ORW200GOFEC631GBD, CatalogConstant.MWWRCORE) * 1000000.0,
174             0.5,
175             "Checking 200G OFEC 63.1 Gbauds ONSR Lin");
176         assertEquals(
177             450.7,
178             catalogUtils.getPceTxTspParameters(CatalogConstant.ORW300GOFEC631GBD, CatalogConstant.MWWRCORE) * 1000000.0,
179             0.5,
180             "Checking 300G OFEC 63.1 Gbauds ONSR Lin");
181         assertEquals(
182             450.7,
183             catalogUtils.getPceTxTspParameters(CatalogConstant.ORW400GOFEC631GBD, CatalogConstant.MWWRCORE) * 1000000.0,
184             0.5,
185             "Checking 400G OFEC 63.1 Gbauds ONSR Lin");
186         assertEquals(
187             0.0, catalogUtils.getPceTxTspParameters("SPE-non-existing-mode", CatalogConstant.MWWRCORE) * 1000000.0,
188             0.0,
189             "Checking ONSR Lin = 0 for non valid OM");
190         assertEquals(
191             -9996.9,
192             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW100GSC, 18001.0, 0.0, 0.0, 20.0),
193             0.5,
194             "Checking 100GSCFEC RX margin OOR due to CD");
195         assertEquals(
196             -9996.9,
197             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW100GSC, 0.0, 30.1, 0.0, 20.0),
198             0.5,
199             "Checking 100GSCFEC RX margin OOR due to PMD");
200         assertEquals(
201             0.0,
202             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW100GSC, 0.0, 0.0, 6.0, 20.0),
203             0.5,
204             "Checking 100GSCFEC RX margin OOR due to PDL");
205         assertEquals(
206             0.0,
207             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW100GSC, 17999.0, 29.9, 6.0, 20.0),
208             0.05,
209             "Checking 100GSCFEC RX margin in Range at max tolerated penalty");
210         assertEquals(
211             -9996.9,
212             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW400GOFEC631GBD, 12001.0, 0.0, 0.0, 27.0),
213             0.5,
214             "Checking 400G OFEC 63.1 Gbauds RX margin OOR due to CD");
215         assertEquals(
216             -9996.9,
217             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW400GOFEC631GBD, 0.0, 20.1, 0.0, 27.0),
218             0.5,
219             "Checking 400G OFEC 63.1 Gbauds RX margin OOR due to PMD");
220         assertEquals(
221             0.0,
222             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW400GOFEC631GBD, 0.0, 0.0, 6.0, 27.0),
223             0.5,
224             "Checking 400G OFEC 63.1 Gbauds RX margin OOR due to PDL");
225         assertEquals(
226             0.5,
227             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW400GOFEC631GBD, 11999.0, 19.9, 5.0, 28.0),
228             0.05,
229             "Checking 400G OFEC 63.1 Gbauds RX margin in Range at max tolerated penalty");
230         assertEquals(
231             0.5,
232             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW400GOFEC631GBD, 3999.0, 9.9, 2.0, 25.5),
233             0.05,
234             "Checking 400G OFEC 63.1 Gbauds RX margin in Range at intermediate tolerated penalty");
235         assertEquals(
236             0.5,
237             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW400GOFEC631GBD, 3999.0, 9.9, 1.0, 25.0),
238             0.05,
239             "Checking 400G OFEC 63.1 Gbauds RX margin in Range at min tolerated penalty");
240         assertEquals(
241             0.5,
242             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW300GOFEC631GBD, 17999.0, 24.9, 5.0, 25.0),
243             0.05,
244             "Checking 300G OFEC 63.1 Gbauds RX margin in Range at max tolerated penalty");
245         assertEquals(
246             0.5,
247             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW300GOFEC631GBD, 3999.0, 9.9, 1.0, 22.0),
248             0.05,
249             "Checking 300G OFEC 63.1 Gbauds RX margin in Range at min tolerated penalty");
250         assertEquals(
251             0.5,
252             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW200GOFEC631GBD, 23999.0, 24.9, 5.0, 21.0),
253             0.05,
254             "Checking 200G OFEC 63.1 Gbauds RX margin in Range at max tolerated penalty");
255         assertEquals(
256             0.5,
257             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW200GOFEC631GBD, 3999.0, 9.9, 1.0, 18.0),
258             0.05,
259             "Checking 200G OFEC 63.1 Gbauds RX margin in Range at min tolerated penalty");
260         assertEquals(
261             0.5,
262             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW200GOFEC316GBD, 23999.0, 29.9, 5.0, 24.5),
263             0.05,
264             "Checking 200G OFEC 31.6 Gbauds RX margin in Range at max tolerated penalty");
265         assertEquals(
266             0.5,
267             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW200GOFEC316GBD, 3999.0, 9.9, 1.0, 21.5),
268             0.05,
269             "Checking 200G OFEC 31.6 Gbauds RX margin in Range at min tolerated penalty");
270         assertEquals(
271             0.5,
272             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW100GOFEC316GBD, 47999.0, 29.9, 5.0, 16.0),
273             0.05,
274             "Checking 100G OFEC 31.6 Gbauds RX margin in Range at max tolerated penalty");
275         assertEquals(
276             0.5,
277             catalogUtils.getPceRxTspParameters(CatalogConstant.ORW100GOFEC316GBD, 3999.0, 9.9, 1.0, 13.0),
278             0.05,
279             "Checking 100G OFEC 31.6 Gbauds RX margin in Range at min tolerated penalty");
280         assertEquals(
281             -9999.9,
282             catalogUtils.getPceRxTspParameters("SPE-non-existing-mode", 0.0, 0.0, 0.0, 30.0),
283             0.05,
284             "Checking Margin negative for non valid OM");
285         outputImpairments.put("CD", 1025.0);
286         outputImpairments.put("DGD2", 18.0);
287         outputImpairments.put("PDL2", 4.4);
288         outputImpairments.put("ONSRLIN", 0.0016307685044580757);
289         // check how to add Delta on an object<String, Double>
290         assertEquals(
291             outputImpairments,
292             catalogUtils.getPceRoadmAmpParameters(CatalogConstant.CatalogNodeType.EXPRESS, CatalogConstant.MWMWCORE,
293                 -15.0, 1000.0, 9.0, 4.0, 0.001000, 50.0),
294             "Checking ROADM Express path contribution to impairments ");
295         outputImpairments.put("ONSRLIN", 0.0014729700859390747);
296         assertEquals(
297             outputImpairments,
298             catalogUtils.getPceRoadmAmpParameters(CatalogConstant.CatalogNodeType.EXPRESS, CatalogConstant.MWMWCORE,
299                 -15.0, 1000.0, 9.0, 4.0, 0.001000, 87.5),
300             "Checking ROADM Express path contribution to impairments with 87.5 GHz spacing");
301         outputImpairments.put("ONSRLIN", 0.0015011872336272727);
302         assertEquals(
303             outputImpairments,
304             catalogUtils.getPceRoadmAmpParameters(CatalogConstant.CatalogNodeType.ADD, CatalogConstant.MWWRCORE,
305                 -15.0, 1000.0, 9.0, 4.2, 0.001, 50.0),
306             "Checking ROADM Add path contribution to impairments");
307         outputImpairments.put("ONSRLIN", 0.0016307685044580757);
308         assertEquals(
309             outputImpairments,
310             catalogUtils.getPceRoadmAmpParameters(CatalogConstant.CatalogNodeType.DROP, CatalogConstant.MWWRCORE,
311                 -15.0, 1000.0, 9.0, 4.2, 0.001, 50.0),
312             "Checking ROADM Drop path contribution to impairments");
313         outputImpairments.put("ONSRLIN", 0.0015010372326658581);
314         assertEquals(
315             outputImpairments,
316             catalogUtils.getPceRoadmAmpParameters(CatalogConstant.CatalogNodeType.AMP, CatalogConstant.MWISTANDARD,
317                 -15.0, 1025.0, 9.0, 4.36, 0.001, 50.0),
318             "Checking Amp path contribution to impairments");
319         assertEquals(
320             true,
321             catalogUtils.getPceRoadmAmpParameters(CatalogConstant.CatalogNodeType.AMP, "ThisIsNotAValidMode",
322                 -15.0,1000.0, 0.0, 0.0, 0.001, 50.0).isEmpty(),
323             "Checking empty map returned in case wrong Operational mode provided ");
324         outputImpairments.put("ONSRLIN", 1.0);
325         assertEquals(
326             true,
327             catalogUtils.getPceRoadmAmpParameters(CatalogConstant.CatalogNodeType.AMP, "OR-InvalidMode",
328                 -15.0, 1025.0, 18.0, 6.25, 0.001, 50.0).isEmpty(),
329             "Checking empty map returned in case wrong Operational mode provided");
330         assertEquals(
331             0.000114266642501745,
332             catalogUtils.calculateNLonsrContribution(2, 70, 87.5),
333             0.000000005,
334             "Checking Non Linear contribution calculation");
335     }
336 }