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