Migrate renderer module to JUnit5
[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 = this.rendererServiceOperations.serviceImplementation(input).get();
106         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
107     }
108
109     @Test
110     void serviceImplementationTerminationPointAsResourceTtp2() throws InterruptedException, ExecutionException {
111         ServiceImplementationRequestInput input = ServiceDataUtils
112             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.TTP_TOKEN);
113         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
114             .setSuccess(true);
115         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
116         doReturn(RpcResultBuilder.failed().buildFuture()).when(this.olmService).servicePowerSetup(any());
117         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
118         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
119     }
120
121     @Test
122     void serviceImplementationTerminationPointAsResourcePp() throws InterruptedException, ExecutionException {
123         ServiceImplementationRequestInput input = ServiceDataUtils
124             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.PP_TOKEN);
125         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
126             .setSuccess(true);
127         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
128         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
129         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
130     }
131
132     @Test
133     void serviceImplementationTerminationPointAsResourceNetwork() throws InterruptedException, ExecutionException {
134         ServiceImplementationRequestInput input = ServiceDataUtils
135             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
136         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
137             .setSuccess(true);
138         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
139         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
140         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
141     }
142
143     @Test
144     void serviceImplementationTerminationPointAsResourceClient() throws InterruptedException, ExecutionException {
145         ServiceImplementationRequestInput input = ServiceDataUtils
146             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.CLIENT_TOKEN);
147         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
148             .setSuccess(true);
149         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
150         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
151         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
152     }
153
154     @Test
155     void serviceImplementationTerminationPointAsResourceNoMapping() throws InterruptedException, ExecutionException {
156         String[] interfaceTokens = {
157             StringConstants.NETWORK_TOKEN,
158             StringConstants.CLIENT_TOKEN,
159             StringConstants.TTP_TOKEN,
160             StringConstants.PP_TOKEN
161         };
162
163         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("failed")
164             .setSuccess(false);
165         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
166
167         for (String tpToken : interfaceTokens) {
168             ServiceImplementationRequestInput input = ServiceDataUtils
169                 .buildServiceImplementationRequestInputTerminationPointResource(tpToken);
170             ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input)
171                 .get();
172             assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
173         }
174     }
175
176     @Test
177     void serviceImplementationRollbackAllNecessary() throws InterruptedException, ExecutionException {
178         ServiceImplementationRequestInput input = ServiceDataUtils
179             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
180 //        writePortMapping(input, StringConstants.NETWORK_TOKEN);
181         doReturn(RpcResultBuilder.failed().buildFuture()).when(this.olmService).servicePowerSetup(any());
182         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
183         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
184     }
185
186     @Test
187     void serviceImplementationServiceInActive() throws InterruptedException, ExecutionException {
188         ServiceImplementationRequestInput input = ServiceDataUtils
189             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
190         List<Measurements> measurementsList = new ArrayList<Measurements>();
191         measurementsList.add(new MeasurementsBuilder()
192                 .setPmparameterName("FECUncorrectableBlocks")
193                 .setPmparameterValue("1")
194                 .build());
195         GetPmOutput getPmOutput = new GetPmOutputBuilder()
196                 .setNodeId("node1")
197                 .setMeasurements(measurementsList)
198                 .build();
199         doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService).getPm(any());
200         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
201         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
202     }
203
204     @Test
205     void serviceImplementationServiceInActive2() throws InterruptedException, ExecutionException {
206         ServiceImplementationRequestInput input = ServiceDataUtils
207             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
208         List<Measurements> measurementsList = new ArrayList<Measurements>();
209         measurementsList.add(new MeasurementsBuilder()
210                 .setPmparameterName("FECUncorrectableBlocks")
211                 .setPmparameterValue("1")
212                 .build());
213         GetPmOutput getPmOutput = new GetPmOutputBuilder()
214                 .setNodeId("node1")
215                 .setMeasurements(measurementsList)
216                 .build();
217
218         when(this.olmService.getPm(any())).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
219         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
220         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
221     }
222
223     @Test
224     void serviceImplementationServiceInActive3() throws InterruptedException, ExecutionException {
225         List<Measurements> measurementsList = new ArrayList<Measurements>();
226         measurementsList.add(new MeasurementsBuilder()
227                 .setPmparameterName("FECUncorrectableBlocks")
228                 .setPmparameterValue("1")
229                 .build());
230         GetPmOutput getPmOutput = new GetPmOutputBuilder().setNodeId("node1").setMeasurements(measurementsList).build();
231         GetPmOutput getPmOutput2 = new GetPmOutputBuilder().setNodeId("node1").setMeasurements(new ArrayList<>())
232             .build();
233
234         GetPmInput getPmInputZ = createGetPmInput("XPONDER-2-3", StringConstants.NETWORK_TOKEN);
235         GetPmInput getPmInputA = createGetPmInput("XPONDER-1-2", StringConstants.NETWORK_TOKEN);
236
237         when(this.olmService.getPm(eq(getPmInputZ))).thenReturn(RpcResultBuilder.success(getPmOutput2).buildFuture());
238         when(this.olmService.getPm(eq(getPmInputA))).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
239         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
240             .setSuccess(true);
241         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
242         ServiceImplementationRequestInput input = ServiceDataUtils
243             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
244         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
245         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
246     }
247
248     @Test
249     void serviceImplementationServiceActive() throws InterruptedException, ExecutionException {
250         ServiceImplementationRequestInput input = ServiceDataUtils
251             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
252         GetPmOutput getPmOutput1 = null;
253         when(this.olmService.getPm(any())).thenReturn(RpcResultBuilder.success(getPmOutput1).buildFuture());
254         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
255             .setSuccess(true);
256         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
257         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
258         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
259     }
260
261     @Test
262     void serviceImplementationServiceActive2() throws InterruptedException, ExecutionException {
263         ServiceImplementationRequestInput input = ServiceDataUtils
264             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
265         GetPmOutput getPmOutput = new GetPmOutputBuilder().setMeasurements(new ArrayList<>()).build();
266         when(this.olmService.getPm(any())).thenReturn(RpcResultBuilder.success(getPmOutput).buildFuture());
267         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
268             .setSuccess(true);
269         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
270         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
271         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
272     }
273
274     @Test
275     void serviceImplementationServiceInActive4() throws InterruptedException, ExecutionException {
276         List<Measurements> measurementsList = new ArrayList<Measurements>();
277         measurementsList.add(new MeasurementsBuilder()
278                 .setPmparameterName("preFECCorrectedErrors")
279                 .setPmparameterValue("1")
280                 .build());
281         GetPmOutput getPmOutput = new GetPmOutputBuilder()
282                 .setNodeId("node1")
283                 .setMeasurements(measurementsList)
284                 .build();
285
286         doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService).getPm(any());
287         ServicePathOutputBuilder mockOutputBuilder = new ServicePathOutputBuilder().setResult("success")
288             .setSuccess(true);
289         doReturn(mockOutputBuilder.build()).when(this.deviceRenderer).setupServicePath(any(), any());
290         ServiceImplementationRequestInput input = ServiceDataUtils
291             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
292         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
293         assertEquals(ResponseCodes.RESPONSE_OK, result.getConfigurationResponseCommon().getResponseCode());
294     }
295
296     @Test
297     void serviceImplementationServiceInActive5() throws InterruptedException, ExecutionException {
298         ServiceImplementationRequestInput input = ServiceDataUtils
299             .buildServiceImplementationRequestInputTerminationPointResource(StringConstants.NETWORK_TOKEN);
300         List<Measurements> measurementsList = new ArrayList<Measurements>();
301         measurementsList.add(new MeasurementsBuilder()
302                 .setPmparameterName("preFECCorrectedErrors")
303                 .setPmparameterValue("112000000000d")
304                 .build());
305         GetPmOutput getPmOutput = new GetPmOutputBuilder()
306                 .setNodeId("node1")
307                 .setMeasurements(measurementsList)
308                 .build();
309
310         doReturn(RpcResultBuilder.success(getPmOutput).buildFuture()).when(this.olmService).getPm(any());
311         ServiceImplementationRequestOutput result = this.rendererServiceOperations.serviceImplementation(input).get();
312         assertEquals(ResponseCodes.RESPONSE_FAILED, result.getConfigurationResponseCommon().getResponseCode());
313     }
314
315     private GetPmInput createGetPmInput(String nodeId, String tp) {
316         return new GetPmInputBuilder()
317                 .setNodeId(nodeId)
318                 .setGranularity(PmGranularity._15min)
319                 .setResourceIdentifier(new ResourceIdentifierBuilder().setResourceName(tp + "-OTU").build())
320                 .setResourceType(ResourceTypeEnum.Interface)
321                 .build();
322     }
323 }