From e0e75c0ba8bc5ad014c4a8d200465d7d02a3934c Mon Sep 17 00:00:00 2001 From: Jozef Gloncak Date: Tue, 24 Jun 2014 14:29:50 +0200 Subject: [PATCH] BUG 1211 - deletion non existing target returns 500 It is checked whether data at specified path exists (via method readConfigurationData). If it isn't so then HTTP response returning code is set to 200. Change-Id: I0c0f51c144ffc430ac5bcef118f485f84ae25207 Signed-off-by: Jozef Gloncak --- .../md-sal/sal-rest-connector/pom.xml | 9 +++---- .../sal/restconf/impl/BrokerFacade.java | 26 ++++++++++++------- .../restconf/impl/test/BrokerFacadeTest.java | 13 ++++++---- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/opendaylight/md-sal/sal-rest-connector/pom.xml b/opendaylight/md-sal/sal-rest-connector/pom.xml index 46f4a2366a..b760263967 100644 --- a/opendaylight/md-sal/sal-rest-connector/pom.xml +++ b/opendaylight/md-sal/sal-rest-connector/pom.xml @@ -30,6 +30,10 @@ org.apache.commons commons-lang3 + + org.opendaylight.controller + sal-common-util + org.opendaylight.controller sal-remote @@ -85,11 +89,6 @@ mockito-all test - - org.opendaylight.controller - sal-common-util - test - diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/BrokerFacade.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/BrokerFacade.java index 062d03a49f..3d047dd07f 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/BrokerFacade.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/BrokerFacade.java @@ -7,12 +7,13 @@ */ package org.opendaylight.controller.sal.restconf.impl; +import com.google.common.util.concurrent.Futures; +import java.util.Collections; import java.util.concurrent.Future; - import javax.ws.rs.core.Response.Status; - import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.DataReader; +import org.opendaylight.controller.sal.common.util.Rpcs; import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession; import org.opendaylight.controller.sal.core.api.data.DataBrokerService; import org.opendaylight.controller.sal.core.api.data.DataChangeListener; @@ -23,6 +24,7 @@ import org.opendaylight.controller.sal.restconf.impl.RestconfError.ErrorType; import org.opendaylight.controller.sal.streams.listeners.ListenerAdapter; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; @@ -160,20 +162,24 @@ public class BrokerFacade implements DataReader> commitConfigurationDataDelete( final InstanceIdentifier path ) { this.checkPreconditions(); - - final DataModificationTransaction transaction = dataService.beginTransaction(); - LOG.info( "Delete Configuration via Restconf: {}", path ); - transaction.removeConfigurationData( path ); - return transaction.commit(); + return deleteDataAtTarget(path,dataService.beginTransaction()); } public Future> commitConfigurationDataDeleteBehindMountPoint( final MountInstance mountPoint, final InstanceIdentifier path ) { this.checkPreconditions(); + return deleteDataAtTarget(path,mountPoint.beginTransaction()); + } - final DataModificationTransaction transaction = mountPoint.beginTransaction(); - LOG.info( "Delete Configuration via Restconf: {}", path ); - transaction.removeConfigurationData( path ); + private Future> deleteDataAtTarget(final InstanceIdentifier path, + final DataModificationTransaction transaction) { + LOG.info("Delete Configuration via Restconf: {}", path); + CompositeNode redDataAtPath = transaction.readConfigurationData(path); + if (redDataAtPath == null) { + return Futures.immediateFuture(Rpcs. getRpcResult(true, TransactionStatus.COMMITED, + Collections. emptyList())); + } + transaction.removeConfigurationData(path); return transaction.commit(); } diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java index ddab700440..19ca812f8e 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/BrokerFacadeTest.java @@ -7,19 +7,20 @@ */ package org.opendaylight.controller.sal.restconf.impl.test; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import com.google.common.collect.ImmutableMap; +import com.google.common.util.concurrent.Futures; import java.util.Map; import java.util.concurrent.Future; - import org.junit.Before; import org.junit.Test; import org.mockito.InOrder; @@ -42,9 +43,7 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; - -import com.google.common.collect.ImmutableMap; -import com.google.common.util.concurrent.Futures; +import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode; /** * Unit tests for BrokerFacade. @@ -275,6 +274,8 @@ public class BrokerFacadeTest { Future> expFuture = Futures.immediateFuture( null ); when( dataBroker.beginTransaction() ).thenReturn( mockTransaction ); + when(mockTransaction.readConfigurationData(any(InstanceIdentifier.class))).thenReturn( + ImmutableCompositeNode.builder().toInstance()); mockTransaction.removeConfigurationData( instanceID ); when( mockTransaction.commit() ).thenReturn( expFuture ); @@ -294,6 +295,8 @@ public class BrokerFacadeTest { Future> expFuture = Futures.immediateFuture( null ); when( mockMountInstance.beginTransaction() ).thenReturn( mockTransaction ); + when(mockTransaction.readConfigurationData(any(InstanceIdentifier.class))).thenReturn( + ImmutableCompositeNode.builder().toInstance()); mockTransaction.removeConfigurationData( instanceID ); when( mockTransaction.commit() ).thenReturn( expFuture ); -- 2.36.6