Upgrade openroadm service models to 10.1
[transportpce.git] / renderer / src / test / java / org / opendaylight / transportpce / renderer / provisiondevice / RendererServiceOperationsImplDeleteTest.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
9 package org.opendaylight.transportpce.renderer.provisiondevice;
10
11 import com.google.common.util.concurrent.ListenableFuture;
12 import java.util.Collections;
13 import java.util.Map;
14 import java.util.concurrent.ExecutionException;
15 import java.util.concurrent.TimeoutException;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.mockito.Mockito;
20 import org.opendaylight.mdsal.binding.api.MountPoint;
21 import org.opendaylight.mdsal.binding.api.MountPointService;
22 import org.opendaylight.mdsal.binding.api.NotificationPublishService;
23 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
24 import org.opendaylight.transportpce.common.ResponseCodes;
25 import org.opendaylight.transportpce.common.StringConstants;
26 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
27 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
28 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
29 import org.opendaylight.transportpce.common.mapping.PortMapping;
30 import org.opendaylight.transportpce.renderer.stub.OlmServiceStub;
31 import org.opendaylight.transportpce.renderer.utils.NotificationPublishServiceMock;
32 import org.opendaylight.transportpce.renderer.utils.ServiceDeleteDataUtils;
33 import org.opendaylight.transportpce.renderer.utils.TransactionUtils;
34 import org.opendaylight.transportpce.test.AbstractTest;
35 import org.opendaylight.transportpce.test.stub.MountPointServiceStub;
36 import org.opendaylight.transportpce.test.stub.MountPointStub;
37 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder;
38 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutputBuilder;
39 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService;
40 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEnd;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.ServiceAEndBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionBuilder;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.TxDirectionKey;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.port.PortBuilder;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
52 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder;
53 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList;
54 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
55 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsBuilder;
56 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsKey;
57 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
58 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
59 import org.opendaylight.yangtools.yang.common.Uint32;
60 import org.opendaylight.yangtools.yang.common.Uint8;
61
62 public class RendererServiceOperationsImplDeleteTest extends AbstractTest {
63
64     private DeviceTransactionManager deviceTransactionManager;
65     private RendererServiceOperationsImpl rendererServiceOperations;
66     private final DeviceRendererService deviceRenderer = Mockito.mock(DeviceRendererService.class);
67     private final OtnDeviceRendererService otnDeviceRendererService = Mockito.mock(OtnDeviceRendererService.class);
68     private final PortMapping portMapping = Mockito.mock(PortMapping.class);
69     private final CrossConnect crossConnect = Mockito.mock(CrossConnect.class);
70     private TransportpceOlmService olmService;
71
72     private void setMountPoint(MountPoint mountPoint) {
73         MountPointService mountPointService = new MountPointServiceStub(mountPoint);
74         this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000);
75     }
76
77     @Before
78     public void setUp() {
79         setMountPoint(new MountPointStub(getDataBroker()));
80         this.olmService = new OlmServiceStub();
81         this.olmService = Mockito.spy(this.olmService);
82         NotificationPublishService notificationPublishService = new NotificationPublishServiceMock();
83         this.rendererServiceOperations =  new RendererServiceOperationsImpl(deviceRenderer,
84             otnDeviceRendererService, olmService, getDataBroker(), notificationPublishService, portMapping);
85     }
86
87
88     @Test
89     public void serviceDeleteOperationPp() throws ExecutionException, InterruptedException, TimeoutException {
90         writePathDescription();
91         ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder();
92         serviceDeleteInputBuilder.setServiceName("service 1");
93         serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder())
94             .setRequestId("request1").build());
95         Mockito.doReturn(Collections.emptyList()).when(this.crossConnect).deleteCrossConnect(Mockito.anyString(),
96             Mockito.anyString(), Mockito.eq(false));
97         ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
98             .setServiceFormat(ServiceFormat.Ethernet)
99             .setServiceRate(Uint32.valueOf("100"))
100             .setTxDirection(Map.of(new TxDirectionKey(Uint8.ZERO),
101                     new TxDirectionBuilder().setIndex(Uint8.ZERO).setPort(new PortBuilder().setPortName("port-name")
102                         .build()).build()))
103             .setNodeId(new NodeIdType("optical-node1"))
104             .build();
105         Services service = new ServicesBuilder()
106             .setServiceName("service 1")
107             .setConnectionType(ConnectionType.Service)
108             .setServiceAEnd(serviceAEnd)
109             .build();
110         Mockito.when(portMapping.getMapping(Mockito.anyString(), Mockito.anyString()))
111             .thenReturn(null);
112         Mockito.when(deviceRenderer.deleteServicePath(Mockito.any()))
113             .thenReturn(new ServicePathOutputBuilder().setSuccess(true).build());
114         ServiceDeleteOutput serviceDeleteOutput
115                 = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build(), service).get();
116         Assert.assertEquals(ResponseCodes.RESPONSE_OK,
117             serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode());
118     }
119
120     @Test
121     public void serviceDeleteOperationNoDescription() throws InterruptedException, ExecutionException {
122         ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder();
123         serviceDeleteInputBuilder.setServiceName("service 1");
124         Services service = new ServicesBuilder()
125             .setServiceName("service 1")
126             .setServiceAEnd(new ServiceAEndBuilder()
127                 .setServiceFormat(ServiceFormat.Ethernet)
128                 .setServiceRate(Uint32.valueOf(100))
129                 .setTxDirection(Map.of(new TxDirectionKey(Uint8.ZERO),
130                     new TxDirectionBuilder().setIndex(Uint8.ZERO).setPort(new PortBuilder().setPortName("port-name")
131                         .build()).build()))
132                 .setNodeId(new NodeIdType("optical-node1"))
133                 .build())
134             .build();
135         Mockito.when(portMapping.getMapping(Mockito.anyString(), Mockito.anyString()))
136             .thenReturn(null);
137         Mockito.doReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder())
138             .setResult("Failed").build()).buildFuture()).when(this.olmService).servicePowerTurndown(Mockito.any());
139         ServiceDeleteOutput serviceDeleteOutput
140                 = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build(), service).get();
141         Assert.assertEquals(ResponseCodes.RESPONSE_FAILED,
142             serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode());
143         Mockito.verify(this.crossConnect, Mockito.times(0))
144                 .deleteCrossConnect(Mockito.any(), Mockito.any(), Mockito.eq(false));
145     }
146
147     @Test
148     public void serviceDeleteOperationTearDownFailedAtoZ() throws ExecutionException, InterruptedException {
149         Mockito.doReturn(Collections.emptyList()).when(this.crossConnect).deleteCrossConnect(Mockito.anyString(),
150             Mockito.anyString(), Mockito.eq(false));
151         Mockito.doReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder())
152             .setResult("Failed").build()).buildFuture()).when(this.olmService).servicePowerTurndown(Mockito.any());
153
154         writePathDescription();
155         ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder();
156         serviceDeleteInputBuilder.setServiceName("service 1");
157         serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder())
158                 .setRequestId("request1").build());
159         ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
160             .setServiceFormat(ServiceFormat.Ethernet)
161             .setServiceRate(Uint32.valueOf("100"))
162             .setTxDirection(Map.of(new TxDirectionKey(Uint8.ZERO),
163                 new TxDirectionBuilder().setIndex(Uint8.ZERO).setPort(new PortBuilder().setPortName("port-name")
164                     .build()).build()))
165             .setNodeId(new NodeIdType("optical-node1"))
166             .build();
167         Services service = new ServicesBuilder()
168             .setServiceName("service 1")
169             .setConnectionType(ConnectionType.Service)
170             .setServiceAEnd(serviceAEnd)
171             .build();
172         Mockito.when(portMapping.getMapping(Mockito.anyString(), Mockito.anyString()))
173             .thenReturn(null);
174         ListenableFuture<ServiceDeleteOutput> serviceDeleteOutput
175                 = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build(), service);
176         ServiceDeleteOutput output = serviceDeleteOutput.get();
177         Assert.assertEquals(ResponseCodes.RESPONSE_FAILED,
178                 output.getConfigurationResponseCommon().getResponseCode());
179         Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node1"), Mockito.any(),
180             Mockito.eq(false));
181         Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node2"), Mockito.any(),
182             Mockito.eq(false));
183     }
184
185     @Test
186     public void serviceDeleteOperationTearDownFailedZtoA() throws ExecutionException, InterruptedException {
187         Mockito.doReturn(Collections.emptyList()).when(this.crossConnect).deleteCrossConnect(Mockito.anyString(),
188             Mockito.anyString(), Mockito.eq(false));
189         Mockito.when(this.olmService.servicePowerTurndown(Mockito.any()))
190             .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder())
191                 .setResult("Success").build()).buildFuture())
192             .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder())
193                 .setResult("Failed").build()).buildFuture());
194
195         writePathDescription();
196         ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder();
197         serviceDeleteInputBuilder.setServiceName("service 1");
198         serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder())
199             .setRequestId("request1").build());
200         ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
201             .setServiceFormat(ServiceFormat.Ethernet)
202             .setServiceRate(Uint32.valueOf("100"))
203             .setTxDirection(Map.of(new TxDirectionKey(Uint8.ZERO),
204                 new TxDirectionBuilder().setIndex(Uint8.ZERO).setPort(new PortBuilder().setPortName("port-name")
205                     .build()).build()))
206             .setNodeId(new NodeIdType("optical-node1"))
207             .build();
208         Services service = new ServicesBuilder()
209             .setServiceName("service 1")
210             .setConnectionType(ConnectionType.Service)
211             .setServiceAEnd(serviceAEnd)
212             .build();
213         Mockito.when(portMapping.getMapping(Mockito.anyString(), Mockito.anyString()))
214             .thenReturn(null);
215         ServiceDeleteOutput serviceDeleteOutput =
216                 this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build(), service).get();
217         Assert.assertEquals(ResponseCodes.RESPONSE_FAILED,
218             serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode());
219         Mockito.verify(this.olmService, Mockito.times(2)).servicePowerTurndown(Mockito.any());
220         Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node1"), Mockito.any(),
221             Mockito.eq(false));
222         Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node2"), Mockito.any(),
223             Mockito.eq(false));
224     }
225
226     private void writePathDescription() throws ExecutionException, InterruptedException {
227         ServicePathsBuilder servicePathsBuilder = new ServicePathsBuilder();
228         servicePathsBuilder.setPathDescription(ServiceDeleteDataUtils
229             .createTransactionPathDescription(StringConstants.PP_TOKEN));
230         servicePathsBuilder.setServiceAEnd(ServiceDeleteDataUtils.getServiceAEndBuild().build())
231             .setServiceZEnd(ServiceDeleteDataUtils.getServiceZEndBuild().build());
232         servicePathsBuilder.withKey(new ServicePathsKey("service 1"));
233         servicePathsBuilder.setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1")
234             .build());
235         InstanceIdentifier<ServicePaths> servicePathsInstanceIdentifier = InstanceIdentifier.create(
236             ServicePathList.class).child(ServicePaths.class, new ServicePathsKey("service 1"));
237         TransactionUtils.writeTransaction(
238             this.deviceTransactionManager,
239             "node1" + StringConstants.PP_TOKEN,
240             LogicalDatastoreType.OPERATIONAL,
241             servicePathsInstanceIdentifier,
242             servicePathsBuilder.build());
243     }
244 }