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