X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=renderer%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Frenderer%2Fprovisiondevice%2FRendererServiceOperationsImplDeleteTest.java;h=fbedc423b9ecb663bb57514281026c06db6ad0f1;hb=b1b3bafd549bb501937cea5c976d5344608b6ed3;hp=b6f886fd56220fe5b05b0434f41ad122efdb1d13;hpb=61a429b5b722d038a03c56645b0b56907203c540;p=transportpce.git diff --git a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java index b6f886fd5..fbedc423b 100644 --- a/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java +++ b/renderer/src/test/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImplDeleteTest.java @@ -8,17 +8,30 @@ package org.opendaylight.transportpce.renderer.provisiondevice; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import com.google.common.util.concurrent.ListenableFuture; -import java.util.Collections; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.MountPoint; import org.opendaylight.mdsal.binding.api.MountPointService; import org.opendaylight.mdsal.binding.api.NotificationPublishService; +import org.opendaylight.mdsal.binding.api.RpcService; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.ResponseCodes; import org.opendaylight.transportpce.common.StringConstants; @@ -26,7 +39,7 @@ import org.opendaylight.transportpce.common.crossconnect.CrossConnect; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; import org.opendaylight.transportpce.common.mapping.PortMapping; -import org.opendaylight.transportpce.renderer.stub.OlmServiceStub; +import org.opendaylight.transportpce.renderer.provisiondevice.notification.NotificationSender; import org.opendaylight.transportpce.renderer.utils.NotificationPublishServiceMock; import org.opendaylight.transportpce.renderer.utils.ServiceDeleteDataUtils; import org.opendaylight.transportpce.renderer.utils.TransactionUtils; @@ -34,20 +47,21 @@ import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.transportpce.test.stub.MountPointServiceStub; import org.opendaylight.transportpce.test.stub.MountPointStub; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004.ServicePathOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndown; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownOutputBuilder; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.TransportpceOlmService; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev181130.NodeIdType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ConnectionType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.ServiceAEnd; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.ServiceAEndBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.endpoint.TxDirectionBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.port.PortBuilder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat; -import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.list.Services; -import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.list.ServicesBuilder; -import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.handler.header.ServiceHandlerHeaderBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.ConnectionType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEnd; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.ServiceAEndBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.endpoint.TxDirectionKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.service.port.PortBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev191129.ServiceFormat; +import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services; +import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder; +import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.ServicePathList; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsBuilder; @@ -55,47 +69,56 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint8; +@ExtendWith(MockitoExtension.class) public class RendererServiceOperationsImplDeleteTest extends AbstractTest { private DeviceTransactionManager deviceTransactionManager; + @Mock + private DeviceRendererService deviceRenderer; + @Mock + private OtnDeviceRendererService otnDeviceRendererService; + private DataBroker dataBroker; + @Mock + private PortMapping portMapping; + @Mock + private RpcService rpcService; + @Mock + private CrossConnect crossConnect; + @Mock + private ServicePowerTurndown servicePowerTurndown; private RendererServiceOperationsImpl rendererServiceOperations; - private final DeviceRendererService deviceRenderer = Mockito.mock(DeviceRendererService.class); - private final OtnDeviceRendererService otnDeviceRendererService = Mockito.mock(OtnDeviceRendererService.class); - private final PortMapping portMapping = Mockito.mock(PortMapping.class); - private final CrossConnect crossConnect = Mockito.mock(CrossConnect.class); - private TransportpceOlmService olmService; private void setMountPoint(MountPoint mountPoint) { MountPointService mountPointService = new MountPointServiceStub(mountPoint); this.deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000); } - @Before - public void setUp() { - setMountPoint(new MountPointStub(getDataBroker())); - this.olmService = new OlmServiceStub(); - this.olmService = Mockito.spy(this.olmService); + @BeforeEach + void setUp() { + dataBroker = getNewDataBroker(); + setMountPoint(new MountPointStub(dataBroker)); NotificationPublishService notificationPublishService = new NotificationPublishServiceMock(); this.rendererServiceOperations = new RendererServiceOperationsImpl(deviceRenderer, - otnDeviceRendererService, olmService, getDataBroker(), notificationPublishService, portMapping); + otnDeviceRendererService, dataBroker, new NotificationSender(notificationPublishService), portMapping, + rpcService); } @Test - public void serviceDeleteOperationPp() throws ExecutionException, InterruptedException, TimeoutException { + void serviceDeleteOperationPp() throws ExecutionException, InterruptedException, TimeoutException { writePathDescription(); ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder(); serviceDeleteInputBuilder.setServiceName("service 1"); serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder()) .setRequestId("request1").build()); - Mockito.doReturn(Collections.emptyList()).when(this.crossConnect).deleteCrossConnect(Mockito.anyString(), - Mockito.anyString(), Mockito.eq(false)); ServiceAEnd serviceAEnd = new ServiceAEndBuilder() .setServiceFormat(ServiceFormat.Ethernet) .setServiceRate(Uint32.valueOf("100")) - .setTxDirection(new TxDirectionBuilder().setPort(new PortBuilder().setPortName("port-name").build()) - .build()) + .setTxDirection(Map.of(new TxDirectionKey(Uint8.ZERO), + new TxDirectionBuilder().setIndex(Uint8.ZERO).setPort(new PortBuilder().setPortName("port-name") + .build()).build())) .setNodeId(new NodeIdType("optical-node1")) .build(); Services service = new ServicesBuilder() @@ -103,18 +126,21 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest { .setConnectionType(ConnectionType.Service) .setServiceAEnd(serviceAEnd) .build(); - Mockito.when(portMapping.getMapping(Mockito.anyString(), Mockito.anyString())) - .thenReturn(null); - Mockito.when(deviceRenderer.deleteServicePath(Mockito.any())) + when(portMapping.getMapping(anyString(), anyString())).thenReturn(null); + when(deviceRenderer.deleteServicePath(any())) .thenReturn(new ServicePathOutputBuilder().setSuccess(true).build()); - ServiceDeleteOutput serviceDeleteOutput - = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build(), service).get(); - Assert.assertEquals(ResponseCodes.RESPONSE_OK, - serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode()); + when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown); + doReturn(RpcResultBuilder + .success(new ServicePowerTurndownOutputBuilder().setResult(ResponseCodes.SUCCESS_RESULT).build()) + .buildFuture()) + .when(servicePowerTurndown).invoke(any()); + ServiceDeleteOutput serviceDeleteOutput = this.rendererServiceOperations + .serviceDelete(serviceDeleteInputBuilder.build(), service).get(); + assertEquals(ResponseCodes.RESPONSE_OK, serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode()); } @Test - public void serviceDeleteOperationNoDescription() throws InterruptedException, ExecutionException { + void serviceDeleteOperationWithoutPathDescription() throws InterruptedException, ExecutionException { ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder(); serviceDeleteInputBuilder.setServiceName("service 1"); Services service = new ServicesBuilder() @@ -122,116 +148,114 @@ public class RendererServiceOperationsImplDeleteTest extends AbstractTest { .setServiceAEnd(new ServiceAEndBuilder() .setServiceFormat(ServiceFormat.Ethernet) .setServiceRate(Uint32.valueOf(100)) - .setTxDirection(new TxDirectionBuilder().setPort(new PortBuilder().setPortName("port-name").build()) - .build()) + .setTxDirection(Map.of( + new TxDirectionKey(Uint8.ZERO), + new TxDirectionBuilder().setIndex(Uint8.ZERO).setPort(new PortBuilder() + .setPortName("port-name").build()).build())) .setNodeId(new NodeIdType("optical-node1")) .build()) .build(); - Mockito.when(portMapping.getMapping(Mockito.anyString(), Mockito.anyString())) - .thenReturn(null); - Mockito.doReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()) - .setResult("Failed").build()).buildFuture()).when(this.olmService).servicePowerTurndown(Mockito.any()); ServiceDeleteOutput serviceDeleteOutput = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build(), service).get(); - Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, + assertEquals( + ResponseCodes.RESPONSE_FAILED, serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode()); - Mockito.verify(this.crossConnect, Mockito.times(0)) - .deleteCrossConnect(Mockito.any(), Mockito.any(), Mockito.eq(false)); + verify(this.crossConnect, times(0)).deleteCrossConnect(any(), any(), eq(false)); } @Test - public void serviceDeleteOperationTearDownFailedAtoZ() throws ExecutionException, InterruptedException { - Mockito.doReturn(Collections.emptyList()).when(this.crossConnect).deleteCrossConnect(Mockito.anyString(), - Mockito.anyString(), Mockito.eq(false)); - Mockito.doReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()) - .setResult("Failed").build()).buildFuture()).when(this.olmService).servicePowerTurndown(Mockito.any()); - + void serviceDeleteOperationTearDownFailedAtoZ() throws ExecutionException, InterruptedException { writePathDescription(); - ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder(); - serviceDeleteInputBuilder.setServiceName("service 1"); - serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder()) - .setRequestId("request1").build()); - ServiceAEnd serviceAEnd = new ServiceAEndBuilder() - .setServiceFormat(ServiceFormat.Ethernet) - .setServiceRate(Uint32.valueOf("100")) - .setTxDirection(new TxDirectionBuilder().setPort(new PortBuilder().setPortName("port-name").build()) - .build()) - .setNodeId(new NodeIdType("optical-node1")) - .build(); Services service = new ServicesBuilder() .setServiceName("service 1") .setConnectionType(ConnectionType.Service) - .setServiceAEnd(serviceAEnd) + .setServiceAEnd(new ServiceAEndBuilder() + .setServiceFormat(ServiceFormat.Ethernet) + .setServiceRate(Uint32.valueOf("100")) + .setTxDirection(Map.of( + new TxDirectionKey(Uint8.ZERO), + new TxDirectionBuilder() + .setIndex(Uint8.ZERO) + .setPort(new PortBuilder().setPortName("port-name").build()) + .build())) + .setNodeId(new NodeIdType("optical-node1")) + .build()) .build(); - Mockito.when(portMapping.getMapping(Mockito.anyString(), Mockito.anyString())) + when(portMapping.getMapping(anyString(), anyString())) .thenReturn(null); - ListenableFuture serviceDeleteOutput - = this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build(), service); + when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown); + doReturn(RpcResultBuilder + .success(new ServicePowerTurndownOutputBuilder().setResult(ResponseCodes.FAILED_RESULT).build()) + .buildFuture()) + .when(servicePowerTurndown).invoke(any()); + + ListenableFuture serviceDeleteOutput = this.rendererServiceOperations + .serviceDelete( + new ServiceDeleteInputBuilder() + .setServiceName("service 1") + .setServiceHandlerHeader((new ServiceHandlerHeaderBuilder()).setRequestId("request1").build()) + .build(), + service); ServiceDeleteOutput output = serviceDeleteOutput.get(); - Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, + assertEquals(ResponseCodes.RESPONSE_FAILED, output.getConfigurationResponseCommon().getResponseCode()); - Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node1"), Mockito.any(), - Mockito.eq(false)); - Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node2"), Mockito.any(), - Mockito.eq(false)); + verify(this.crossConnect, times(0)).deleteCrossConnect(eq("node1"), any(), eq(false)); + verify(this.crossConnect, times(0)).deleteCrossConnect(eq("node2"), any(), eq(false)); } @Test - public void serviceDeleteOperationTearDownFailedZtoA() throws ExecutionException, InterruptedException { - Mockito.doReturn(Collections.emptyList()).when(this.crossConnect).deleteCrossConnect(Mockito.anyString(), - Mockito.anyString(), Mockito.eq(false)); - Mockito.when(this.olmService.servicePowerTurndown(Mockito.any())) - .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()) - .setResult("Success").build()).buildFuture()) - .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()) - .setResult("Failed").build()).buildFuture()); - + void serviceDeleteOperationTearDownFailedZtoA() throws ExecutionException, InterruptedException { writePathDescription(); - ServiceDeleteInputBuilder serviceDeleteInputBuilder = new ServiceDeleteInputBuilder(); - serviceDeleteInputBuilder.setServiceName("service 1"); - serviceDeleteInputBuilder.setServiceHandlerHeader((new ServiceHandlerHeaderBuilder()) - .setRequestId("request1").build()); - ServiceAEnd serviceAEnd = new ServiceAEndBuilder() - .setServiceFormat(ServiceFormat.Ethernet) - .setServiceRate(Uint32.valueOf("100")) - .setTxDirection(new TxDirectionBuilder().setPort(new PortBuilder().setPortName("port-name").build()) - .build()) - .setNodeId(new NodeIdType("optical-node1")) - .build(); - Services service = new ServicesBuilder() - .setServiceName("service 1") - .setConnectionType(ConnectionType.Service) - .setServiceAEnd(serviceAEnd) - .build(); - Mockito.when(portMapping.getMapping(Mockito.anyString(), Mockito.anyString())) + when(rpcService.getRpc(ServicePowerTurndown.class)).thenReturn(servicePowerTurndown); + when(servicePowerTurndown.invoke(any())) + .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()).setResult("Success").build()) + .buildFuture()) + .thenReturn(RpcResultBuilder.success((new ServicePowerTurndownOutputBuilder()).setResult("Failed").build()) + .buildFuture()); + when(portMapping.getMapping(anyString(), anyString())) .thenReturn(null); - ServiceDeleteOutput serviceDeleteOutput = - this.rendererServiceOperations.serviceDelete(serviceDeleteInputBuilder.build(), service).get(); - Assert.assertEquals(ResponseCodes.RESPONSE_FAILED, + ServiceDeleteOutput serviceDeleteOutput = this.rendererServiceOperations.serviceDelete( + new ServiceDeleteInputBuilder() + .setServiceName("service 1") + .setServiceHandlerHeader((new ServiceHandlerHeaderBuilder()).setRequestId("request1").build()) + .build(), + new ServicesBuilder() + .setServiceName("service 1") + .setConnectionType(ConnectionType.Service) + .setServiceAEnd(new ServiceAEndBuilder() + .setServiceFormat(ServiceFormat.Ethernet) + .setServiceRate(Uint32.valueOf("100")) + .setTxDirection(Map.of( + new TxDirectionKey(Uint8.ZERO), + new TxDirectionBuilder() + .setIndex(Uint8.ZERO) + .setPort(new PortBuilder().setPortName("port-name").build()) + .build())) + .setNodeId(new NodeIdType("optical-node1")) + .build()) + .build()) + .get(); + assertEquals(ResponseCodes.RESPONSE_FAILED, serviceDeleteOutput.getConfigurationResponseCommon().getResponseCode()); - Mockito.verify(this.olmService, Mockito.times(2)).servicePowerTurndown(Mockito.any()); - Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node1"), Mockito.any(), - Mockito.eq(false)); - Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.eq("node2"), Mockito.any(), - Mockito.eq(false)); + verify(servicePowerTurndown, times(2)).invoke(any()); + verify(this.crossConnect, times(0)).deleteCrossConnect(eq("node1"), any(),eq(false)); + verify(this.crossConnect, times(0)).deleteCrossConnect(eq("node2"), any(),eq(false)); } private void writePathDescription() throws ExecutionException, InterruptedException { - ServicePathsBuilder servicePathsBuilder = new ServicePathsBuilder(); - servicePathsBuilder.setPathDescription(ServiceDeleteDataUtils - .createTransactionPathDescription(StringConstants.PP_TOKEN)); - servicePathsBuilder.setServiceAEnd(ServiceDeleteDataUtils.getServiceAEndBuild().build()) - .setServiceZEnd(ServiceDeleteDataUtils.getServiceZEndBuild().build()); - servicePathsBuilder.withKey(new ServicePathsKey("service 1")); - servicePathsBuilder.setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1") - .build()); - InstanceIdentifier servicePathsInstanceIdentifier = InstanceIdentifier.create( - ServicePathList.class).child(ServicePaths.class, new ServicePathsKey("service 1")); TransactionUtils.writeTransaction( - this.deviceTransactionManager, - "node1" + StringConstants.PP_TOKEN, - LogicalDatastoreType.OPERATIONAL, - servicePathsInstanceIdentifier, - servicePathsBuilder.build()); + this.deviceTransactionManager, + "node1" + StringConstants.PP_TOKEN, + LogicalDatastoreType.OPERATIONAL, + InstanceIdentifier.create(ServicePathList.class) + .child(ServicePaths.class, new ServicePathsKey("service 1")), + new ServicePathsBuilder() + .setPathDescription(ServiceDeleteDataUtils + .createTransactionPathDescription(StringConstants.PP_TOKEN)) + .setServiceAEnd(ServiceDeleteDataUtils.getServiceAEndBuild().build()) + .setServiceZEnd(ServiceDeleteDataUtils.getServiceZEndBuild().build()) + .withKey(new ServicePathsKey("service 1")) + .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId("Request 1").build()) + .build()); } -} +} \ No newline at end of file