63e347868f6cf6dd6ae3fb91136a1007e0772fbc
[transportpce.git] / renderer / src / test / java / org / opendaylight / transportpce / renderer / provisiondevice / RendererServiceOperationsImplTest.java
1 /*
2  * Copyright © 2018 Orange Systems, 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 package org.opendaylight.transportpce.renderer.provisiondevice;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.mockito.ArgumentMatchers.any;
12 import static org.mockito.ArgumentMatchers.anyBoolean;
13 import static org.mockito.ArgumentMatchers.anyString;
14 import static org.mockito.ArgumentMatchers.eq;
15 import static org.mockito.Mockito.doNothing;
16 import static org.mockito.Mockito.doReturn;
17 import static org.mockito.Mockito.mock;
18 import static org.mockito.Mockito.spy;
19 import static org.mockito.Mockito.when;
20
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.concurrent.ExecutionException;
24 import org.junit.jupiter.api.BeforeEach;
25 import org.junit.jupiter.api.Test;
26 import org.opendaylight.mdsal.binding.api.MountPoint;
27 import org.opendaylight.mdsal.binding.api.MountPointService;
28 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
29 import org.opendaylight.transportpce.common.ResponseCodes;
30 import org.opendaylight.transportpce.common.StringConstants;
31 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
32 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
33 import org.opendaylight.transportpce.common.mapping.MappingUtils;
34 import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
35 import org.opendaylight.transportpce.common.mapping.PortMapping;
36 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
37 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
38 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
39 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121;
40 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221;
41 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl710;
42 import org.opendaylight.transportpce.renderer.stub.OlmServiceStub;
43 import org.opendaylight.transportpce.renderer.utils.NotificationPublishServiceMock;
44 import org.opendaylight.transportpce.renderer.utils.ServiceDataUtils;
45 import org.opendaylight.transportpce.test.AbstractTest;
46 import org.opendaylight.transportpce.test.stub.MountPointServiceStub;
47 import org.opendaylight.transportpce.test.stub.MountPointStub;
48 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder;
49 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInput;
50 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmInputBuilder;
51 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutput;
52 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.GetPmOutputBuilder;
53 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
54 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.Measurements;
55 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.get.pm.output.MeasurementsBuilder;
56 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
57 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestOutput;
58 import org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev161014.ResourceTypeEnum;
59 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.PmGranularity;
60 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.olm.get.pm.input.ResourceIdentifierBuilder;
61 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
62
63 public class RendererServiceOperationsImplTest extends AbstractTest {
64
65     private MountPointService mountPointService;
66     private DeviceTransactionManager deviceTransactionManager;
67     private final DeviceRendererService deviceRenderer = mock(DeviceRendererService.class);
68     private final OtnDeviceRendererService otnDeviceRendererService = mock(OtnDeviceRendererService.class);
69     private final PortMapping portMapping = mock(PortMapping.class);
70     private RendererServiceOperationsImpl rendererServiceOperations;
71     private OpenRoadmInterfaces openRoadmInterfaces;
72     private TransportpceOlmService olmService;
73     private MappingUtils mappingUtils;
74     private OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121;
75     private OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221;
76     private OpenRoadmInterfacesImpl710 openRoadmInterfacesImpl710;
77
78     private void setMountPoint(MountPoint mountPoint) {
79         this.mountPointService = new MountPointServiceStub(mountPoint);
80         this.deviceTransactionManager = new DeviceTransactionManagerImpl(this.mountPointService, 3000);
81         this.mappingUtils = new MappingUtilsImpl(getDataBroker());
82         this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils,
83             openRoadmInterfacesImpl121, openRoadmInterfacesImpl221, openRoadmInterfacesImpl710);
84         this.openRoadmInterfaces = spy(this.openRoadmInterfaces);
85     }
86
87     @BeforeEach
88     void setUp() throws OpenRoadmInterfaceException {
89         setMountPoint(new MountPointStub(getDataBroker()));
90         this.olmService = new OlmServiceStub();
91         doNothing().when(this.openRoadmInterfaces).postEquipmentState(anyString(), anyString(), anyBoolean());
92         NotificationPublishService notificationPublishService = new NotificationPublishServiceMock();
93         this.olmService = spy(this.olmService);
94         this.rendererServiceOperations =  new RendererServiceOperationsImpl(deviceRenderer, otnDeviceRendererService,
95                 this.olmService, getDataBroker(), notificationPublishService, portMapping);
96     }
97
98     @Test
99     void serviceImplementationTerminationPointAsResourceTtp() throws InterruptedException, ExecutionException {
100         ServiceImplementationRequestInput input = ServiceDataUtils
101             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.TTP_TOKEN);
102         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
103             .setSuccess(true);
104         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
105         ServiceImplementationRequestOutput result =
106                 this.rendererServiceOperations.serviceImplementation(input, false).get();
107         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
108     }
109
110     @Test
111     void serviceImplementationTerminationPointAsResourceTtp2() throws InterruptedException, ExecutionException {
112         ServiceImplementationRequestInput input = ServiceDataUtils
113             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.TTP_TOKEN);
114         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
115             .setSuccess(true);
116         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
117         doReturn(RpcResultBuilder.failed().buildFuture()).when(this.olmService).servicePowerSetup(any());
118         ServiceImplementationRequestOutput result =
119                 this.rendererServiceOperations.serviceImplementation(input, false).get();
120         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
121     }
122
123     @Test
124     void serviceImplementationTerminationPointAsResourcePp() throws InterruptedException, ExecutionException {
125         ServiceImplementationRequestInput input = ServiceDataUtils
126             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.PP_TOKEN);
127         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
128             .setSuccess(true);
129         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
130         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
131                 false).get();
132         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
133     }
134
135     @Test
136     void serviceImplementationTerminationPointAsResourceNetwork() throws InterruptedException, ExecutionException {
137         ServiceImplementationRequestInput input = ServiceDataUtils
138             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
139         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
140             .setSuccess(true);
141         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
142         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
143                 false).get();
144         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
145     }
146
147     @Test
148     void serviceImplementationTerminationPointAsResourceClient() throws InterruptedException, ExecutionException {
149         ServiceImplementationRequestInput input = ServiceDataUtils
150             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.CLIENT_TOKEN);
151         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
152             .setSuccess(true);
153         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
154         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
155                 false).get();
156         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
157     }
158
159     @Test
160     void serviceImplementationTerminationPointAsResourceNoMapping() throws InterruptedException, ExecutionException {
161         String[] interfaceTokens = {
162             StringConstants.NETWORK_TOKEN,
163             StringConstants.CLIENT_TOKEN,
164             StringConstants.TTP_TOKEN,
165             StringConstants.PP_TOKEN
166         };
167
168         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("failed")
169             .setSuccess(false);
170         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
171
172         for (String tpToken : interfaceTokens) {
173             ServiceImplementationRequestInput input = ServiceDataUtils
174                 .buildServiceImplementationRequestInputTerminationPointResource(tpToken);
175             ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
176                             false)
177                 .get();
178             assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
179         }
180     }
181
182     @Test
183     void serviceImplementationRollbackAllNecessary() throws InterruptedException, ExecutionException {
184         ServiceImplementationRequestInput input = ServiceDataUtils
185             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
186 //        writePortMapping(input, StringConstants.NETWORK_TOKEN);
187         doReturn(RpcResultBuilder.failed().buildFuture()).when(this.olmService).servicePowerSetup(any());
188         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
189                 false).get();
190         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
191     }
192
193     @Test
194     void serviceImplementationServiceInActive() throws InterruptedException, ExecutionException {
195         ServiceImplementationRequestInput input = ServiceDataUtils
196             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
197         List<Measurements> measurementsList = new ArrayList<Measurements>();
198         measurementsList.add(new MeasurementsBuilder()
199                 .setPmparameterName("FECUncorrectableBlocks")
200                 .setPmparameterValue("1")
201                 .build());
202         GetPmOutput getPmOutput = new GetPmOutputBuilder()
203                 .setNodeId("node1")
204                 .setMeasurements(measurementsList)
205                 .build();
206         doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService).getPm(any());
207         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
208                 false).get();
209         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
210     }
211
212     @Test
213     void serviceImplementationServiceInActive2() throws InterruptedException, ExecutionException {
214         ServiceImplementationRequestInput input = ServiceDataUtils
215             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
216         List<Measurements> measurementsList = new ArrayList<Measurements>();
217         measurementsList.add(new MeasurementsBuilder()
218                 .setPmparameterName("FECUncorrectableBlocks")
219                 .setPmparameterValue("1")
220                 .build());
221         GetPmOutput getPmOutput = new GetPmOutputBuilder()
222                 .setNodeId("node1")
223                 .setMeasurements(measurementsList)
224                 .build();
225
226         when(this.olmService.getPm(any())).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
227         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
228                 false).get();
229         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
230     }
231
232     @Test
233     void serviceImplementationServiceInActive3() throws InterruptedException, ExecutionException {
234         List<Measurements> measurementsList = new ArrayList<Measurements>();
235         measurementsList.add(new MeasurementsBuilder()
236                 .setPmparameterName("FECUncorrectableBlocks")
237                 .setPmparameterValue("1")
238                 .build());
239         GetPmOutput getPmOutput = new GetPmOutputBuilder().setNodeId("node1").setMeasurements(measurementsList).build();
240         GetPmOutput getPmOutput2 = new GetPmOutputBuilder().setNodeId("node1").setMeasurements(new ArrayList<>())
241             .build();
242
243         GetPmInput getPmInputZ = createGetPmInput("XPONDER-2-3", StringConstants.NETWORK_TOKEN);
244         GetPmInput getPmInputA = createGetPmInput("XPONDER-1-2", StringConstants.NETWORK_TOKEN);
245
246         when(this.olmService.getPm(eq(getPmInputZ))).thenReturn(RpcResultBuilder.success(getPmOutput2).buildFuture());
247         when(this.olmService.getPm(eq(getPmInputA))).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
248         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
249             .setSuccess(true);
250         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
251         ServiceImplementationRequestInput input = ServiceDataUtils
252             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
253         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
254                 false).get();
255         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
256     }
257
258     @Test
259     void serviceImplementationServiceActive() throws InterruptedException, ExecutionException {
260         ServiceImplementationRequestInput input = ServiceDataUtils
261             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
262         GetPmOutput getPmOutput1 = null;
263         when(this.olmService.getPm(any())).thenReturn(RpcResultBuilder.success(getPmOutput1).buildFuture());
264         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
265             .setSuccess(true);
266         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
267         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
268                 false).get();
269         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
270     }
271
272     @Test
273     void serviceImplementationServiceActive2() throws InterruptedException, ExecutionException {
274         ServiceImplementationRequestInput input = ServiceDataUtils
275             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
276         GetPmOutput getPmOutput = new GetPmOutputBuilder().setMeasurements(new ArrayList<>()).build();
277         when(this.olmService.getPm(any())).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
278         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
279             .setSuccess(true);
280         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
281         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
282                 false).get();
283         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
284     }
285
286     @Test
287     void serviceImplementationServiceInActive4() throws InterruptedException, ExecutionException {
288         List<Measurements> measurementsList = new ArrayList<Measurements>();
289         measurementsList.add(new MeasurementsBuilder()
290                 .setPmparameterName("preFECCorrectedErrors")
291                 .setPmparameterValue("1")
292                 .build());
293         GetPmOutput getPmOutput = new GetPmOutputBuilder()
294                 .setNodeId("node1")
295                 .setMeasurements(measurementsList)
296                 .build();
297
298         doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService).getPm(any());
299         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
300             .setSuccess(true);
301         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
302         ServiceImplementationRequestInput input = ServiceDataUtils
303             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
304         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
305                 false).get();
306         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
307     }
308
309     @Test
310     void serviceImplementationServiceInActive5() throws InterruptedException, ExecutionException {
311         ServiceImplementationRequestInput input = ServiceDataUtils
312             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
313         List<Measurements> measurementsList = new ArrayList<Measurements>();
314         measurementsList.add(new MeasurementsBuilder()
315                 .setPmparameterName("preFECCorrectedErrors")
316                 .setPmparameterValue("112000000000d")
317                 .build());
318         GetPmOutput getPmOutput = new GetPmOutputBuilder()
319                 .setNodeId("node1")
320                 .setMeasurements(measurementsList)
321                 .build();
322
323         doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService).getPm(any());
324         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input,
325                 false).get();
326         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
327     }
328
329     private GetPmInput createGetPmInput(String nodeId, String tp) {
330         return new GetPmInputBuilder()
331                 .setNodeId(nodeId)
332                 .setGranularity(PmGranularity._15min)
333                 .setResourceIdentifier(new ResourceIdentifierBuilder().setResourceName(tp + "-OTU").build())
334                 .setResourceType(ResourceTypeEnum.Interface)
335                 .build();
336     }
337 }