From: Tom Pantelis Date: Mon, 26 Feb 2018 19:19:01 +0000 (-0500) Subject: NETCONF-514: Use exists instead of read for PUT X-Git-Tag: release/fluorine~145 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=232008a47d7ed50f062f5e11a416e5cf6f92e128;p=netconf.git NETCONF-514: Use exists instead of read for PUT The PUT operation needs to check if the path already exists in order to return the proper response code according to the RFC however calling exists instead of read is more efficient on the back end. Change-Id: Ibd7e99324c6a151aae91083e0c90bdf877161dee Signed-off-by: Tom Pantelis --- diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtil.java index 241245f67d..94945a33e1 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/DeleteDataTransactionUtil.java @@ -9,6 +9,7 @@ package org.opendaylight.restconf.nb.rfc8040.rests.utils; import com.google.common.util.concurrent.CheckedFuture; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; @@ -37,7 +38,7 @@ public final class DeleteDataTransactionUtil { final CheckedFuture future = submitData( transactionNode.getTransactionChain(), transactionNode.getTransactionChain().newReadWriteTransaction(), transactionNode.getInstanceIdentifier().getInstanceIdentifier()); - final ResponseFactory response = new ResponseFactory(); + final ResponseFactory response = new ResponseFactory(Status.OK); FutureCallbackTx.addCallback(future, RestconfDataServiceConstant.DeleteData.DELETE_TX_TYPE, response); return response.build(); } diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java index bee24e9bd8..fe0f3904c2 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PatchDataTransactionUtil.java @@ -13,6 +13,7 @@ import com.google.common.collect.Lists; import com.google.common.util.concurrent.CheckedFuture; import java.util.ArrayList; import java.util.List; +import javax.ws.rs.core.Response.Status; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; @@ -131,7 +132,7 @@ public final class PatchDataTransactionUtil { // if no errors then submit transaction, otherwise cancel if (noError) { - final ResponseFactory response = new ResponseFactory(); + final ResponseFactory response = new ResponseFactory(Status.OK); final CheckedFuture future = tx.submit(); try { @@ -309,4 +310,4 @@ public final class PatchDataTransactionUtil { "Data already exists", ErrorType.PROTOCOL, ErrorTag.DATA_EXISTS, path); } } -} \ No newline at end of file +} diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java index 1e412973d8..9c7014ff47 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PostDataTransactionUtil.java @@ -11,6 +11,7 @@ import com.google.common.base.Optional; import com.google.common.util.concurrent.CheckedFuture; import java.net.URI; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriInfo; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; @@ -73,7 +74,7 @@ public final class PostDataTransactionUtil { payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData(), transactionNode, schemaContextRef.get(), insert, point); final URI location = PostDataTransactionUtil.resolveLocation(uriInfo, transactionNode, schemaContextRef); - final ResponseFactory dataFactory = new ResponseFactory(null, location); + final ResponseFactory dataFactory = new ResponseFactory(Status.CREATED).location(location); FutureCallbackTx.addCallback(future, RestconfDataServiceConstant.PostData.POST_TX_TYPE, dataFactory); return dataFactory.build(); } @@ -112,7 +113,7 @@ public final class PostDataTransactionUtil { PutDataTransactionUtil.readList(path.getParent(), schemaContext, domTransactionChain, schemaNode); final OrderedMapNode readList = (OrderedMapNode) readData; - if ((readList == null) || readList.getValue().isEmpty()) { + if (readList == null || readList.getValue().isEmpty()) { makePost(path, data, schemaContext, domTransactionChain, newReadWriteTransaction); return newReadWriteTransaction.submit(); } else { @@ -129,7 +130,7 @@ public final class PostDataTransactionUtil { .readList(path.getParent(), schemaContext, domTransactionChain, schemaNode); final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData; - if ((readLeafList == null) || readLeafList.getValue().isEmpty()) { + if (readLeafList == null || readLeafList.getValue().isEmpty()) { makePost(path, data, schemaContext, domTransactionChain, newReadWriteTransaction); return newReadWriteTransaction.submit(); } else { @@ -150,7 +151,7 @@ public final class PostDataTransactionUtil { PutDataTransactionUtil.readList(path.getParent(), schemaContext, domTransactionChain, schemaNode); final OrderedMapNode readList = (OrderedMapNode) readData; - if ((readList == null) || readList.getValue().isEmpty()) { + if (readList == null || readList.getValue().isEmpty()) { makePost(path, data, schemaContext, domTransactionChain, newReadWriteTransaction); return newReadWriteTransaction.submit(); } else { @@ -164,7 +165,7 @@ public final class PostDataTransactionUtil { schemaNode); final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData; - if ((readLeafList == null) || readLeafList.getValue().isEmpty()) { + if (readLeafList == null || readLeafList.getValue().isEmpty()) { makePost(path, data, schemaContext, domTransactionChain, newReadWriteTransaction); return newReadWriteTransaction.submit(); } else { @@ -179,7 +180,7 @@ public final class PostDataTransactionUtil { PutDataTransactionUtil.readList(path.getParent(), schemaContext, domTransactionChain, schemaNode); final OrderedMapNode readList = (OrderedMapNode) readData; - if ((readList == null) || readList.getValue().isEmpty()) { + if (readList == null || readList.getValue().isEmpty()) { makePost(path, data, schemaContext, domTransactionChain, newReadWriteTransaction); return newReadWriteTransaction.submit(); } else { @@ -193,7 +194,7 @@ public final class PostDataTransactionUtil { schemaNode); final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData; - if ((readLeafList == null) || readLeafList.getValue().isEmpty()) { + if (readLeafList == null || readLeafList.getValue().isEmpty()) { makePost(path, data, schemaContext, domTransactionChain, newReadWriteTransaction); return newReadWriteTransaction.submit(); } else { diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java index 1d6d96083b..a9cff57b02 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtil.java @@ -13,7 +13,9 @@ import com.google.common.util.concurrent.CheckedFuture; import java.util.List; import java.util.Map; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; @@ -66,9 +68,9 @@ public final class PutDataTransactionUtil { * input data */ public static void validInputData(final SchemaNode schemaNode, final NormalizedNodeContext payload) { - if ((schemaNode != null) && (payload.getData() == null)) { + if (schemaNode != null && payload.getData() == null) { throw new RestconfDocumentedException("Input is required.", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE); - } else if ((schemaNode == null) && (payload.getData() != null)) { + } else if (schemaNode == null && payload.getData() != null) { throw new RestconfDocumentedException("No input expected.", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE); } } @@ -113,7 +115,7 @@ public final class PutDataTransactionUtil { final NormalizedNode data = payload.getData(); if (schemaNode instanceof ListSchemaNode) { final List keyDefinitions = ((ListSchemaNode) schemaNode).getKeyDefinition(); - if ((lastPathArgument instanceof NodeIdentifierWithPredicates) && (data instanceof MapEntryNode)) { + if (lastPathArgument instanceof NodeIdentifierWithPredicates && data instanceof MapEntryNode) { final Map uriKeyValues = ((NodeIdentifierWithPredicates) lastPathArgument) .getKeyValues(); isEqualUriAndPayloadKeyValues(uriKeyValues, (MapEntryNode) data, keyDefinitions); @@ -159,11 +161,18 @@ public final class PutDataTransactionUtil { final TransactionVarsWrapper transactionNode, final String insert, final String point) { final YangInstanceIdentifier path = payload.getInstanceIdentifierContext().getInstanceIdentifier(); final SchemaContext schemaContext = schemaCtxRef.get(); - final ResponseFactory responseFactory = new ResponseFactory( - ReadDataTransactionUtil.readData(RestconfDataServiceConstant.ReadData.CONFIG, transactionNode, - schemaContext)); + + final DOMDataReadWriteTransaction readWriteTransaction = + transactionNode.getTransactionChain().newReadWriteTransaction(); + + final CheckedFuture existsFuture = + readWriteTransaction.exists(LogicalDatastoreType.CONFIGURATION, path); + final FutureDataFactory existsResponse = new FutureDataFactory<>(); + FutureCallbackTx.addCallback(existsFuture, RestconfDataServiceConstant.PutData.PUT_TX_TYPE, existsResponse); + + final ResponseFactory responseFactory = new ResponseFactory(existsResponse.result ? Status.OK : Status.CREATED); final CheckedFuture submitData = submitData(path, schemaContext, - transactionNode.getTransactionChain(), payload.getData(), insert, point); + transactionNode.getTransactionChain(), readWriteTransaction, payload.getData(), insert, point); FutureCallbackTx.addCallback(submitData, RestconfDataServiceConstant.PutData.PUT_TX_TYPE, responseFactory); return responseFactory.build(); } @@ -187,10 +196,10 @@ public final class PutDataTransactionUtil { */ private static CheckedFuture submitData(final YangInstanceIdentifier path, final SchemaContext schemaContext, final DOMTransactionChain domTransactionChain, + final DOMDataReadWriteTransaction readWriteTransaction, final NormalizedNode data, final String insert, final String point) { - final DOMDataReadWriteTransaction newReadWriteTransaction = domTransactionChain.newReadWriteTransaction(); if (insert == null) { - return makePut(path, schemaContext, newReadWriteTransaction, data); + return makePut(path, schemaContext, readWriteTransaction, data); } else { final DataSchemaNode schemaNode = checkListAndOrderedType(schemaContext, path); switch (insert) { @@ -199,57 +208,57 @@ public final class PutDataTransactionUtil { final NormalizedNode readData = readList(path, schemaContext, domTransactionChain, schemaNode); final OrderedMapNode readList = (OrderedMapNode) readData; - if ((readList == null) || readList.getValue().isEmpty()) { - return makePut(path, schemaContext, newReadWriteTransaction, data); + if (readList == null || readList.getValue().isEmpty()) { + return makePut(path, schemaContext, readWriteTransaction, data); } else { - newReadWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION, path.getParent()); - simplePut(LogicalDatastoreType.CONFIGURATION, path, newReadWriteTransaction, + readWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION, path.getParent()); + simplePut(LogicalDatastoreType.CONFIGURATION, path, readWriteTransaction, schemaContext, data); - listPut(LogicalDatastoreType.CONFIGURATION, path.getParent(), newReadWriteTransaction, + listPut(LogicalDatastoreType.CONFIGURATION, path.getParent(), readWriteTransaction, schemaContext, readList); - return newReadWriteTransaction.submit(); + return readWriteTransaction.submit(); } } else { final NormalizedNode readData = readList(path, schemaContext, domTransactionChain, schemaNode); final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData; - if ((readLeafList == null) || readLeafList.getValue().isEmpty()) { - return makePut(path, schemaContext, newReadWriteTransaction, data); + if (readLeafList == null || readLeafList.getValue().isEmpty()) { + return makePut(path, schemaContext, readWriteTransaction, data); } else { - newReadWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION, path.getParent()); - simplePut(LogicalDatastoreType.CONFIGURATION, path, newReadWriteTransaction, + readWriteTransaction.delete(LogicalDatastoreType.CONFIGURATION, path.getParent()); + simplePut(LogicalDatastoreType.CONFIGURATION, path, readWriteTransaction, schemaContext, data); - listPut(LogicalDatastoreType.CONFIGURATION, path.getParent(), newReadWriteTransaction, + listPut(LogicalDatastoreType.CONFIGURATION, path.getParent(), readWriteTransaction, schemaContext, readLeafList); - return newReadWriteTransaction.submit(); + return readWriteTransaction.submit(); } } case "last": - return makePut(path, schemaContext, newReadWriteTransaction, data); + return makePut(path, schemaContext, readWriteTransaction, data); case "before": if (schemaNode instanceof ListSchemaNode) { final NormalizedNode readData = readList(path, schemaContext, domTransactionChain, schemaNode); final OrderedMapNode readList = (OrderedMapNode) readData; - if ((readList == null) || readList.getValue().isEmpty()) { - return makePut(path, schemaContext, newReadWriteTransaction, data); + if (readList == null || readList.getValue().isEmpty()) { + return makePut(path, schemaContext, readWriteTransaction, data); } else { - insertWithPointListPut(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, path, + insertWithPointListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION, path, data, schemaContext, point, readList, true); - return newReadWriteTransaction.submit(); + return readWriteTransaction.submit(); } } else { final NormalizedNode readData = readList(path, schemaContext, domTransactionChain, schemaNode); final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData; - if ((readLeafList == null) || readLeafList.getValue().isEmpty()) { - return makePut(path, schemaContext, newReadWriteTransaction, data); + if (readLeafList == null || readLeafList.getValue().isEmpty()) { + return makePut(path, schemaContext, readWriteTransaction, data); } else { - insertWithPointLeafListPut(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, + insertWithPointLeafListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION, path, data, schemaContext, point, readLeafList, true); - return newReadWriteTransaction.submit(); + return readWriteTransaction.submit(); } } case "after": @@ -257,24 +266,24 @@ public final class PutDataTransactionUtil { final NormalizedNode readData = readList(path, schemaContext, domTransactionChain, schemaNode); final OrderedMapNode readList = (OrderedMapNode) readData; - if ((readList == null) || readList.getValue().isEmpty()) { - return makePut(path, schemaContext, newReadWriteTransaction, data); + if (readList == null || readList.getValue().isEmpty()) { + return makePut(path, schemaContext, readWriteTransaction, data); } else { - insertWithPointListPut(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, + insertWithPointListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION, path, data, schemaContext, point, readList, false); - return newReadWriteTransaction.submit(); + return readWriteTransaction.submit(); } } else { final NormalizedNode readData = readList(path, schemaContext, domTransactionChain, schemaNode); final OrderedLeafSetNode readLeafList = (OrderedLeafSetNode) readData; - if ((readLeafList == null) || readLeafList.getValue().isEmpty()) { - return makePut(path, schemaContext, newReadWriteTransaction, data); + if (readLeafList == null || readLeafList.getValue().isEmpty()) { + return makePut(path, schemaContext, readWriteTransaction, data); } else { - insertWithPointLeafListPut(newReadWriteTransaction, LogicalDatastoreType.CONFIGURATION, + insertWithPointLeafListPut(readWriteTransaction, LogicalDatastoreType.CONFIGURATION, path, data, schemaContext, point, readLeafList, true); - return newReadWriteTransaction.submit(); + return readWriteTransaction.submit(); } } default: diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ResponseFactory.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ResponseFactory.java index 3447664d24..1ecf44237e 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ResponseFactory.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/ResponseFactory.java @@ -12,25 +12,18 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; import org.apache.commons.lang3.builder.Builder; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; final class ResponseFactory extends FutureDataFactory implements Builder { private ResponseBuilder responseBuilder; - ResponseFactory(final NormalizedNode readData) { - final Status status = prepareStatus(readData); + ResponseFactory(final Status status) { this.responseBuilder = Response.status(status); } - ResponseFactory(final NormalizedNode readData, final URI location) { - final Status status = prepareStatus(readData); - this.responseBuilder = Response.status(status); - this.responseBuilder.location(location); - } - - ResponseFactory() { - this.responseBuilder = Response.status(Status.OK); + ResponseFactory location(final URI location) { + responseBuilder.location(location); + return this; } @Override @@ -40,8 +33,4 @@ final class ResponseFactory extends FutureDataFactory implements Builder readData) { - return readData != null ? Status.OK : Status.CREATED; - } } diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java index ad05a23320..085a8a3697 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImplTest.java @@ -322,9 +322,9 @@ public class RestconfDataServiceImplTest { new InstanceIdentifierContext<>(this.iidBase, this.schemaNode, null, this.contextRef.get()); final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, this.buildBaseCont); - doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseCont))).when(this.read) - .read(LogicalDatastoreType.CONFIGURATION, this.iidBase); - doNothing().when(this.write).put(LogicalDatastoreType.CONFIGURATION, this.iidBase, payload.getData()); + doReturn(Futures.immediateCheckedFuture(Boolean.TRUE)).when(this.readWrite) + .exists(LogicalDatastoreType.CONFIGURATION, this.iidBase); + doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, this.iidBase, payload.getData()); doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit(); final Response response = this.dataService.putData(null, payload, this.uriInfo); assertNotNull(response); @@ -341,9 +341,9 @@ public class RestconfDataServiceImplTest { new InstanceIdentifierContext<>(this.iidBase, this.schemaNode, mountPoint, this.contextRef.get()); final NormalizedNodeContext payload = new NormalizedNodeContext(iidContext, this.buildBaseCont); - doReturn(Futures.immediateCheckedFuture(Optional.of(this.buildBaseCont))).when(this.read) - .read(LogicalDatastoreType.CONFIGURATION, this.iidBase); - doNothing().when(this.write).put(LogicalDatastoreType.CONFIGURATION, this.iidBase, payload.getData()); + doReturn(Futures.immediateCheckedFuture(Boolean.TRUE)).when(this.readWrite) + .exists(LogicalDatastoreType.CONFIGURATION, this.iidBase); + doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, this.iidBase, payload.getData()); doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit(); final Response response = this.dataService.putData(null, payload, this.uriInfo); assertNotNull(response); diff --git a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java index 9c9bdbe860..68caab5e33 100644 --- a/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java +++ b/restconf/restconf-nb-rfc8040/src/test/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/PutDataTransactionUtilTest.java @@ -12,7 +12,6 @@ import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.verify; -import com.google.common.base.Optional; import com.google.common.util.concurrent.Futures; import org.junit.Before; import org.junit.Test; @@ -208,16 +207,16 @@ public class PutDataTransactionUtilTest { doReturn(this.readWrite).when(this.transactionChain).newReadWriteTransaction(); doReturn(this.read).when(this.transactionChain).newReadOnlyTransaction(); doReturn(this.write).when(this.transactionChain).newWriteOnlyTransaction(); - doReturn(Futures.immediateCheckedFuture(Optional.absent())) - .when(this.read).read(LogicalDatastoreType.CONFIGURATION, this.iid2); - doNothing().when(this.write).put(LogicalDatastoreType.CONFIGURATION, + doReturn(Futures.immediateCheckedFuture(Boolean.FALSE)) + .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2); + doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData()); doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit(); PutDataTransactionUtil.putData(payload, this.refSchemaCtx, new TransactionVarsWrapper(payload.getInstanceIdentifierContext(), null, this.transactionChain), null, null); - verify(this.read).read(LogicalDatastoreType.CONFIGURATION, + verify(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, payload.getInstanceIdentifierContext().getInstanceIdentifier()); verify(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData()); @@ -232,16 +231,16 @@ public class PutDataTransactionUtilTest { doReturn(this.readWrite).when(this.transactionChain).newReadWriteTransaction(); doReturn(this.read).when(this.transactionChain).newReadOnlyTransaction(); doReturn(this.write).when(this.transactionChain).newWriteOnlyTransaction(); - doReturn(Futures.immediateCheckedFuture(Optional.absent())) - .when(this.read).read(LogicalDatastoreType.CONFIGURATION, this.iid); - doNothing().when(this.write).put(LogicalDatastoreType.CONFIGURATION, + doReturn(Futures.immediateCheckedFuture(Boolean.FALSE)) + .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid); + doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData()); doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit(); PutDataTransactionUtil.putData(payload, this.refSchemaCtx, new TransactionVarsWrapper(payload.getInstanceIdentifierContext(), null, this.transactionChain), null, null); - verify(this.read).read(LogicalDatastoreType.CONFIGURATION, + verify(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, payload.getInstanceIdentifierContext().getInstanceIdentifier()); verify(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData()); @@ -256,15 +255,15 @@ public class PutDataTransactionUtilTest { doReturn(this.readWrite).when(this.transactionChain).newReadWriteTransaction(); doReturn(this.read).when(this.transactionChain).newReadOnlyTransaction(); doReturn(this.write).when(this.transactionChain).newWriteOnlyTransaction(); - doReturn(Futures.immediateCheckedFuture(Optional.absent())) - .when(this.read).read(LogicalDatastoreType.CONFIGURATION, this.iid2); - doNothing().when(this.write).put(LogicalDatastoreType.CONFIGURATION, + doReturn(Futures.immediateCheckedFuture(Boolean.FALSE)) + .when(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2); + doNothing().when(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, payload.getInstanceIdentifierContext().getInstanceIdentifier(), payload.getData()); doReturn(Futures.immediateCheckedFuture(null)).when(this.readWrite).submit(); PutDataTransactionUtil.putData(payload, this.refSchemaCtx, new TransactionVarsWrapper(payload.getInstanceIdentifierContext(), null, this.transactionChain), null, null); - verify(this.read).read(LogicalDatastoreType.CONFIGURATION, this.iid2); + verify(this.readWrite).exists(LogicalDatastoreType.CONFIGURATION, this.iid2); verify(this.readWrite).put(LogicalDatastoreType.CONFIGURATION, this.iid2, payload.getData()); }