X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=restconf%2Frestconf-nb-bierman02%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2Ftest%2FInvokeRpcMethodTest.java;h=a244ed067536d44d5aec63c3efae98ae73474a8a;hb=982e75ece2483e413befe3edd8fd90022a644f72;hp=a1c497636b08443c499611d8d1af1142e33e1964;hpb=297030dc32e29a3ac0c76aa3d6279e7e047532b3;p=netconf.git diff --git a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java index a1c497636b..a244ed0675 100644 --- a/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java +++ b/restconf/restconf-nb-bierman02/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java @@ -5,7 +5,6 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.sal.restconf.impl.test; import static org.junit.Assert.assertEquals; @@ -13,15 +12,16 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFailedFluentFuture; +import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture; import com.google.common.base.Optional; -import com.google.common.util.concurrent.CheckedFuture; -import com.google.common.util.concurrent.Futures; import java.io.FileNotFoundException; import java.net.URI; import java.net.URISyntaxException; @@ -32,14 +32,13 @@ import java.util.Set; import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriInfo; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementationNotAvailableException; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; +import org.opendaylight.controller.md.sal.rest.common.TestRestconfUtils; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.netconf.sal.restconf.impl.BrokerFacade; import org.opendaylight.netconf.sal.restconf.impl.ControllerContext; import org.opendaylight.netconf.sal.restconf.impl.RestconfImpl; @@ -57,8 +56,8 @@ import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; -import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeAttrBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; @@ -71,32 +70,32 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; public class InvokeRpcMethodTest { - private RestconfImpl restconfImpl = null; - private static ControllerContext controllerContext = null; private static UriInfo uriInfo; + private static SchemaContext schemaContext; + + private final RestconfImpl restconfImpl; + private final ControllerContext controllerContext; + private final BrokerFacade brokerFacade = mock(BrokerFacade.class); + public InvokeRpcMethodTest() { + controllerContext = TestRestconfUtils.newControllerContext(schemaContext); + restconfImpl = RestconfImpl.newInstance(brokerFacade, controllerContext); + } @BeforeClass public static void init() throws FileNotFoundException, ReactorException { - final SchemaContext schemaContext = TestUtils.loadSchemaContext("/full-versions/yangs", "/invoke-rpc"); + schemaContext = TestUtils.loadSchemaContext("/full-versions/yangs", "/invoke-rpc"); final Set allModules = schemaContext.getModules(); assertNotNull(allModules); final Module module = TestUtils.resolveModule("invoke-rpc-module", allModules); assertNotNull(module); - controllerContext = spy(ControllerContext.getInstance()); - controllerContext.setSchemas(schemaContext); + uriInfo = mock(UriInfo.class); final MultivaluedMap map = new MultivaluedHashMap<>(); map.put("prettyPrint", Collections.singletonList("true")); when(uriInfo.getQueryParameters(any(Boolean.class))).thenReturn(map); } - @Before - public void initMethod() { - this.restconfImpl = RestconfImpl.getInstance(); - this.restconfImpl.setControllerContext(controllerContext); - } - /** * Test method invokeRpc in RestconfImpl class tests if composite node as input parameter of method invokeRpc * (second argument) is wrapped to parent composite node which has QName equals to QName of rpc (resolved from @@ -105,30 +104,24 @@ public class InvokeRpcMethodTest { @Test @Ignore public void invokeRpcMethodTest() { - final ControllerContext contContext = controllerContext; try { - contContext.findModuleNameByNamespace(new URI("invoke:rpc:module")); + controllerContext.findModuleNameByNamespace(new URI("invoke:rpc:module")); } catch (final URISyntaxException e) { assertTrue("Uri wasn't created sucessfuly", false); } - final BrokerFacade mockedBrokerFacade = mock(BrokerFacade.class); - - final RestconfImpl restconf = RestconfImpl.getInstance(); - restconf.setBroker(mockedBrokerFacade); - restconf.setControllerContext(contContext); - final NormalizedNodeContext payload = prepareDomPayload(); - final NormalizedNodeContext rpcResponse = restconf.invokeRpc("invoke-rpc-module:rpc-test", payload, uriInfo); + final NormalizedNodeContext rpcResponse = + restconfImpl.invokeRpc("invoke-rpc-module:rpc-test", payload, uriInfo); assertTrue(rpcResponse != null); assertTrue(rpcResponse.getData() == null); } - private static NormalizedNodeContext prepareDomPayload() { + private NormalizedNodeContext prepareDomPayload() { final SchemaContext schema = controllerContext.getGlobalSchema(); - final Module rpcModule = schema.findModuleByName("invoke-rpc-module", null); + final Module rpcModule = schema.findModules("invoke-rpc-module").iterator().next(); assertNotNull(rpcModule); final QName rpcQName = QName.create(rpcModule.getQNameModule(), "rpc-test"); final QName rpcInputQName = QName.create(rpcModule.getQNameModule(),"input"); @@ -142,13 +135,13 @@ public class InvokeRpcMethodTest { } assertNotNull(rpcInputSchemaNode); - final DataContainerNodeAttrBuilder container = + final DataContainerNodeBuilder container = Builders.containerBuilder(rpcInputSchemaNode); final QName contQName = QName.create(rpcModule.getQNameModule(), "cont"); final DataSchemaNode contSchemaNode = rpcInputSchemaNode.getDataChildByName(contQName); assertTrue(contSchemaNode instanceof ContainerSchemaNode); - final DataContainerNodeAttrBuilder contNode = + final DataContainerNodeBuilder contNode = Builders.containerBuilder((ContainerSchemaNode) contSchemaNode); final QName lfQName = QName.create(rpcModule.getQNameModule(), "lf"); @@ -165,24 +158,18 @@ public class InvokeRpcMethodTest { @Test public void testInvokeRpcWithNoPayloadRpc_FailNoErrors() { - final DOMRpcException exception = new DOMRpcImplementationNotAvailableException("testExeption"); - final CheckedFuture future = Futures.immediateFailedCheckedFuture(exception); - - final BrokerFacade brokerFacade = mock(BrokerFacade.class); - final QName qname = QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast"); final SchemaPath type = SchemaPath.create(true, qname); - when(brokerFacade.invokeRpc(eq(type), any(NormalizedNode.class))).thenReturn(future); - - this.restconfImpl.setBroker(brokerFacade); + doReturn(immediateFailedFluentFuture(new DOMRpcImplementationNotAvailableException("testExeption"))) + .when(brokerFacade).invokeRpc(eq(type), isNull()); try { this.restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); fail("Expected an exception to be thrown."); } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.APPLICATION, ErrorTag.OPERATION_NOT_SUPPORTED, - Optional.absent(), Optional.absent()); + Optional.absent(), Optional.absent()); } } @@ -216,23 +203,17 @@ public class InvokeRpcMethodTest { RpcResultBuilder.newWarning(RpcError.ErrorType.RPC, "in-use", "bar", "app-tag", null, null)); - final DOMRpcResult resutl = new DefaultDOMRpcResult(rpcErrors); - final CheckedFuture future = Futures.immediateCheckedFuture(resutl); - + final DOMRpcResult result = new DefaultDOMRpcResult(rpcErrors); final SchemaPath path = SchemaPath.create(true, QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast")); - - final BrokerFacade brokerFacade = mock(BrokerFacade.class); - when(brokerFacade.invokeRpc(eq(path), any(NormalizedNode.class))).thenReturn(future); - - this.restconfImpl.setBroker(brokerFacade); + doReturn(immediateFluentFuture(result)).when(brokerFacade).invokeRpc(eq(path), isNull()); try { this.restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); fail("Expected an exception to be thrown."); } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.TRANSPORT, ErrorTag.OPERATION_FAILED, Optional.of("foo"), - Optional.absent()); + Optional.absent()); verifyRestconfDocumentedException(e, 1, ErrorType.RPC, ErrorTag.IN_USE, Optional.of("bar"), Optional.of("app-tag")); } @@ -242,15 +223,11 @@ public class InvokeRpcMethodTest { public void testInvokeRpcWithNoPayload_Success() { final NormalizedNode resultObj = null; final DOMRpcResult expResult = new DefaultDOMRpcResult(resultObj); - final CheckedFuture future = Futures.immediateCheckedFuture(expResult); final QName qname = QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast"); final SchemaPath path = SchemaPath.create(true, qname); - final BrokerFacade brokerFacade = mock(BrokerFacade.class); - when(brokerFacade.invokeRpc(eq(path), any(NormalizedNode.class))).thenReturn(future); - - this.restconfImpl.setBroker(brokerFacade); + doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(eq(path), isNull()); final NormalizedNodeContext output = this.restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); assertNotNull(output); @@ -266,7 +243,7 @@ public class InvokeRpcMethodTest { fail("Expected an exception"); } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE, - Optional.absent(), Optional.absent()); + Optional.absent(), Optional.absent()); } } @@ -277,7 +254,7 @@ public class InvokeRpcMethodTest { fail("Expected an exception"); } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.RPC, ErrorTag.UNKNOWN_ELEMENT, - Optional.absent(), Optional.absent()); + Optional.absent(), Optional.absent()); } } @@ -285,12 +262,10 @@ public class InvokeRpcMethodTest { @Ignore public void testInvokeRpcMethodWithInput() { final DOMRpcResult expResult = mock(DOMRpcResult.class); - final CheckedFuture future = Futures.immediateCheckedFuture(expResult); final SchemaPath path = SchemaPath.create(true, QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)make-toast")); - final SchemaContext schemaContext = controllerContext.getGlobalSchema(); - final Module rpcModule = schemaContext.findModuleByName("toaster", null); + final Module rpcModule = schemaContext.findModules("toaster").iterator().next(); assertNotNull(rpcModule); final QName rpcQName = QName.create(rpcModule.getQNameModule(), "make-toast"); final QName rpcInputQName = QName.create(rpcModule.getQNameModule(),"input"); @@ -309,16 +284,14 @@ public class InvokeRpcMethodTest { assertNotNull(rpcDef); assertNotNull(rpcInputSchemaNode); - final DataContainerNodeAttrBuilder containerBuilder = + final DataContainerNodeBuilder containerBuilder = Builders.containerBuilder(rpcInputSchemaNode); final NormalizedNodeContext payload = new NormalizedNodeContext(new InstanceIdentifierContext<>(null, rpcInputSchemaNode, null, schemaContext), containerBuilder.build()); - final BrokerFacade brokerFacade = mock(BrokerFacade.class); - when(brokerFacade.invokeRpc(eq(path), any(NormalizedNode.class))).thenReturn(future); - this.restconfImpl.setBroker(brokerFacade); + doReturn(immediateFluentFuture(expResult)).when(brokerFacade).invokeRpc(eq(path), any(NormalizedNode.class)); final NormalizedNodeContext output = this.restconfImpl.invokeRpc("toaster:make-toast", payload, uriInfo); assertNotNull(output); @@ -334,14 +307,14 @@ public class InvokeRpcMethodTest { fail("Expected an exception."); } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE, - Optional.absent(), Optional.absent()); + Optional.absent(), Optional.absent()); } } @Test public void testInvokeRpcWithNoPayloadWithOutput_Success() { final SchemaContext schema = controllerContext.getGlobalSchema(); - final Module rpcModule = schema.findModuleByName("toaster", null); + final Module rpcModule = schema.findModules("toaster").iterator().next(); assertNotNull(rpcModule); final QName rpcQName = QName.create(rpcModule.getQNameModule(), "testOutput"); final QName rpcOutputQName = QName.create(rpcModule.getQNameModule(),"output"); @@ -358,24 +331,20 @@ public class InvokeRpcMethodTest { } assertNotNull(rpcDef); assertNotNull(rpcOutputSchemaNode); - final DataContainerNodeAttrBuilder containerBuilder = + final DataContainerNodeBuilder containerBuilder = Builders.containerBuilder(rpcOutputSchemaNode); final DataSchemaNode leafSchema = rpcOutputSchemaNode .getDataChildByName(QName.create(rpcModule.getQNameModule(), "textOut")); assertTrue(leafSchema instanceof LeafSchemaNode); - final NormalizedNodeAttrBuilder> leafBuilder = + final NormalizedNodeBuilder> leafBuilder = Builders.leafBuilder((LeafSchemaNode) leafSchema); leafBuilder.withValue("brm"); containerBuilder.withChild(leafBuilder.build()); final ContainerNode container = containerBuilder.build(); final DOMRpcResult result = new DefaultDOMRpcResult(container); - final CheckedFuture future = Futures.immediateCheckedFuture(result); - - final BrokerFacade brokerFacade = mock(BrokerFacade.class); - when(brokerFacade.invokeRpc(eq(rpcDef.getPath()), any(NormalizedNode.class))).thenReturn(future); - this.restconfImpl.setBroker(brokerFacade); + doReturn(immediateFluentFuture(result)).when(brokerFacade).invokeRpc(eq(rpcDef.getPath()), isNull()); final NormalizedNodeContext output = this.restconfImpl.invokeRpc("toaster:testOutput", "", uriInfo); assertNotNull(output);