X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frestconf%2Fimpl%2Ftest%2FInvokeRpcMethodTest.java;h=5b3da47c62e6d9e2fde6f8683f5ea16f9c9807e2;hb=fdb31721b3b17060158556f3e36be5800be18a07;hp=559a6b9e8e4a8a88aed3f4c4c3b9a34d5ea377ae;hpb=f2373d2aa2287e7845f18dd61d12f883e5d2d04f;p=controller.git diff --git a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java index 559a6b9e8e..5b3da47c62 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java +++ b/opendaylight/md-sal/sal-rest-connector/src/test/java/org/opendaylight/controller/sal/restconf/impl/test/InvokeRpcMethodTest.java @@ -20,6 +20,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import com.google.common.base.Optional; +import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import java.io.FileNotFoundException; @@ -35,30 +36,43 @@ 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.DOMMountPoint; +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.sal.core.api.RpcProvisionRegistry; import org.opendaylight.controller.sal.restconf.impl.BrokerFacade; import org.opendaylight.controller.sal.restconf.impl.ControllerContext; import org.opendaylight.controller.sal.restconf.impl.InstanceIdentifierContext; +import org.opendaylight.controller.sal.restconf.impl.NormalizedNodeContext; import org.opendaylight.controller.sal.restconf.impl.RestconfDocumentedException; import org.opendaylight.controller.sal.restconf.impl.RestconfError; import org.opendaylight.controller.sal.restconf.impl.RestconfError.ErrorTag; import org.opendaylight.controller.sal.restconf.impl.RestconfError.ErrorType; import org.opendaylight.controller.sal.restconf.impl.RestconfImpl; -import org.opendaylight.controller.sal.restconf.impl.StructuredData; 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.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import org.opendaylight.yangtools.yang.data.api.ModifyAction; -import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode; -import org.opendaylight.yangtools.yang.data.api.MutableSimpleNode; -import org.opendaylight.yangtools.yang.data.impl.NodeFactory; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; +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.model.api.ContainerSchemaNode; +import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.SchemaPath; +import org.opendaylight.yangtools.yang.model.util.SchemaNodeUtils; public class InvokeRpcMethodTest { @@ -66,18 +80,19 @@ public class InvokeRpcMethodTest { private static ControllerContext controllerContext = null; private static UriInfo uriInfo; + @BeforeClass public static void init() throws FileNotFoundException { - Set allModules = new HashSet(TestUtils.loadModulesFrom("/full-versions/yangs")); + final Set allModules = new HashSet(TestUtils.loadModulesFrom("/full-versions/yangs")); allModules.addAll(TestUtils.loadModulesFrom("/invoke-rpc")); assertNotNull(allModules); - Module module = TestUtils.resolveModule("invoke-rpc-module", allModules); + final Module module = TestUtils.resolveModule("invoke-rpc-module", allModules); assertNotNull(module); - SchemaContext schemaContext = TestUtils.loadSchemaContext(allModules); + final SchemaContext schemaContext = TestUtils.loadSchemaContext(allModules); controllerContext = spy(ControllerContext.getInstance()); controllerContext.setSchemas(schemaContext); uriInfo = mock(UriInfo.class); - MultivaluedMap map = new MultivaluedHashMap<>(); + final MultivaluedMap map = new MultivaluedHashMap<>(); map.put("prettyPrint", Collections.singletonList("true")); when(uriInfo.getQueryParameters(any(Boolean.class))).thenReturn(map); } @@ -94,58 +109,80 @@ public class InvokeRpcMethodTest { * string - first argument). */ @Test + @Ignore public void invokeRpcMethodTest() { - ControllerContext contContext = controllerContext; + final ControllerContext contContext = controllerContext; try { contContext.findModuleNameByNamespace(new URI("invoke:rpc:module")); - } catch (URISyntaxException e) { + } catch (final URISyntaxException e) { assertTrue("Uri wasn't created sucessfuly", false); } - BrokerFacade mockedBrokerFacade = mock(BrokerFacade.class); + final BrokerFacade mockedBrokerFacade = mock(BrokerFacade.class); - RestconfImpl restconf = RestconfImpl.getInstance(); + final RestconfImpl restconf = RestconfImpl.getInstance(); restconf.setBroker(mockedBrokerFacade); restconf.setControllerContext(contContext); - CompositeNode payload = preparePayload(); - - when(mockedBrokerFacade.invokeRpc(any(QName.class), any(CompositeNode.class))).thenReturn( - Futures.> immediateFuture(RpcResultBuilder.success().build())); + final NormalizedNodeContext payload = prepareDomPayload(); - StructuredData structData = restconf.invokeRpc("invoke-rpc-module:rpc-test", payload, uriInfo); - assertTrue(structData == null); + final NormalizedNodeContext rpcResponse = restconf.invokeRpc("invoke-rpc-module:rpc-test", payload, uriInfo); + assertTrue(rpcResponse != null); + assertTrue(rpcResponse.getData() == null); } - private CompositeNode preparePayload() { - MutableCompositeNode cont = NodeFactory.createMutableCompositeNode( - TestUtils.buildQName("cont", "nmspc", "2013-12-04"), null, null, ModifyAction.CREATE, null); - MutableSimpleNode lf = NodeFactory.createMutableSimpleNode( - TestUtils.buildQName("lf", "nmspc", "2013-12-04"), cont, "any value", ModifyAction.CREATE, null); - cont.getValue().add(lf); - cont.init(); + private NormalizedNodeContext prepareDomPayload() { + final SchemaContext schema = controllerContext.getGlobalSchema(); + final Module rpcModule = schema.findModuleByName("invoke-rpc-module", null); + assertNotNull(rpcModule); + final QName rpcQName = QName.create(rpcModule.getQNameModule(), "rpc-test"); + final QName rpcInputQName = QName.create(rpcModule.getQNameModule(),"input"); + final Set setRpcs = rpcModule.getRpcs(); + ContainerSchemaNode rpcInputSchemaNode = null; + for (final RpcDefinition rpc : setRpcs) { + if (rpcQName.isEqualWithoutRevision(rpc.getQName())) { + rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName); + break; + } + } + assertNotNull(rpcInputSchemaNode); + + final DataContainerNodeAttrBuilder 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 = Builders.containerBuilder((ContainerSchemaNode) contSchemaNode); - return cont; + final QName lfQName = QName.create(rpcModule.getQNameModule(), "lf"); + final DataSchemaNode lfSchemaNode = ((ContainerSchemaNode) contSchemaNode).getDataChildByName(lfQName); + assertTrue(lfSchemaNode instanceof LeafSchemaNode); + final LeafNode lfNode = (Builders.leafBuilder((LeafSchemaNode) lfSchemaNode).withValue("any value")).build(); + contNode.withChild(lfNode); + container.withChild(contNode.build()); + + return new NormalizedNodeContext(new InstanceIdentifierContext(null, rpcInputSchemaNode, null, schema), container.build()); } @Test public void testInvokeRpcWithNoPayloadRpc_FailNoErrors() { - RpcResult rpcResult = RpcResultBuilder.failed().build(); + final DOMRpcException exception = new DOMRpcImplementationNotAvailableException("testExeption"); + final CheckedFuture future = Futures.immediateFailedCheckedFuture(exception); - BrokerFacade brokerFacade = mock(BrokerFacade.class); - when( - brokerFacade.invokeRpc( - eq(QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast")), - any(CompositeNode.class))).thenReturn( - Futures.> immediateFuture(rpcResult)); + 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); restconfImpl.setBroker(brokerFacade); try { restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); fail("Expected an exception to be thrown."); - } catch (RestconfDocumentedException e) { + } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.APPLICATION, ErrorTag.OPERATION_FAILED, Optional. absent(), Optional. absent()); } @@ -157,7 +194,7 @@ public class InvokeRpcMethodTest { RestconfError actual = null; try { actual = e.getErrors().get(index); - } catch (ArrayIndexOutOfBoundsException ex) { + } catch (final ArrayIndexOutOfBoundsException ex) { fail("RestconfError not found at index " + index); } @@ -176,27 +213,26 @@ public class InvokeRpcMethodTest { @Test public void testInvokeRpcWithNoPayloadRpc_FailWithRpcError() { - List rpcErrors = Arrays.asList( + final List rpcErrors = Arrays.asList( RpcResultBuilder.newError( RpcError.ErrorType.TRANSPORT, "bogusTag", "foo" ), RpcResultBuilder.newWarning( RpcError.ErrorType.RPC, "in-use", "bar", "app-tag", null, null ) ); - RpcResult rpcResult = RpcResultBuilder.failed() - .withRpcErrors(rpcErrors).build(); + final DOMRpcResult resutl = new DefaultDOMRpcResult(rpcErrors); + final CheckedFuture future = Futures.immediateCheckedFuture(resutl); - BrokerFacade brokerFacade = mock(BrokerFacade.class); - when( - brokerFacade.invokeRpc( - eq(QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast")), - any(CompositeNode.class))).thenReturn( - Futures.> immediateFuture(rpcResult)); + 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); restconfImpl.setBroker(brokerFacade); try { restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); fail("Expected an exception to be thrown."); - } catch (RestconfDocumentedException e) { + } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.TRANSPORT, ErrorTag.OPERATION_FAILED, Optional.of("foo"), Optional. absent()); verifyRestconfDocumentedException(e, 1, ErrorType.RPC, ErrorTag.IN_USE, Optional.of("bar"), @@ -206,19 +242,21 @@ public class InvokeRpcMethodTest { @Test public void testInvokeRpcWithNoPayload_Success() { - RpcResult rpcResult = RpcResultBuilder.success().build(); + final NormalizedNode resultObj = null; + final DOMRpcResult expResult = new DefaultDOMRpcResult(resultObj); + final CheckedFuture future = Futures.immediateCheckedFuture(expResult); - BrokerFacade brokerFacade = mock(BrokerFacade.class); - when( - brokerFacade.invokeRpc( - eq(QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)cancel-toast")), - any(CompositeNode.class))).thenReturn( - Futures.> immediateFuture(rpcResult)); + 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); restconfImpl.setBroker(brokerFacade); - StructuredData output = restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); - assertEquals(null, output); + final NormalizedNodeContext output = restconfImpl.invokeRpc("toaster:cancel-toast", "", uriInfo); + assertNotNull(output); + assertEquals(null, output.getData()); // additional validation in the fact that the restconfImpl does not // throw an exception. } @@ -228,7 +266,7 @@ public class InvokeRpcMethodTest { try { restconfImpl.invokeRpc("toaster:cancel-toast", " a payload ", uriInfo); fail("Expected an exception"); - } catch (RestconfDocumentedException e) { + } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE, Optional. absent(), Optional. absent()); } @@ -239,29 +277,54 @@ public class InvokeRpcMethodTest { try { restconfImpl.invokeRpc("toaster:bad-method", "", uriInfo); fail("Expected an exception"); - } catch (RestconfDocumentedException e) { + } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.RPC, ErrorTag.UNKNOWN_ELEMENT, Optional. absent(), Optional. absent()); } } @Test + @Ignore public void testInvokeRpcMethodWithInput() { - RpcResult rpcResult = RpcResultBuilder.success().build(); + 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); + assertNotNull(rpcModule); + final QName rpcQName = QName.create(rpcModule.getQNameModule(), "make-toast"); + final QName rpcInputQName = QName.create(rpcModule.getQNameModule(),"input"); + + final Set setRpcs = rpcModule.getRpcs(); + RpcDefinition rpcDef = null; + ContainerSchemaNode rpcInputSchemaNode = null; + + for (final RpcDefinition rpc : setRpcs) { + if (rpcQName.isEqualWithoutRevision(rpc.getQName())) { + rpcInputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcInputQName); + rpcDef = rpc; + break; + } + } - CompositeNode payload = mock(CompositeNode.class); + assertNotNull(rpcDef); + assertNotNull(rpcInputSchemaNode); + assertTrue(rpcInputSchemaNode instanceof ContainerSchemaNode); + final DataContainerNodeAttrBuilder containerBuilder = + Builders.containerBuilder(rpcInputSchemaNode); - BrokerFacade brokerFacade = mock(BrokerFacade.class); - when( - brokerFacade.invokeRpc( - eq(QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)make-toast")), - any(CompositeNode.class))).thenReturn( - Futures.> immediateFuture(rpcResult)); + 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); restconfImpl.setBroker(brokerFacade); - StructuredData output = restconfImpl.invokeRpc("toaster:make-toast", payload, uriInfo); - assertEquals(null, output); + final NormalizedNodeContext output = restconfImpl.invokeRpc("toaster:make-toast", payload, uriInfo); + assertNotNull(output); + assertEquals(null, output.getData()); // additional validation in the fact that the restconfImpl does not // throw an exception. } @@ -271,7 +334,7 @@ public class InvokeRpcMethodTest { try { restconfImpl.invokeRpc("toaster/slash", "", uriInfo); fail("Expected an exception."); - } catch (RestconfDocumentedException e) { + } catch (final RestconfDocumentedException e) { verifyRestconfDocumentedException(e, 0, ErrorType.PROTOCOL, ErrorTag.INVALID_VALUE, Optional. absent(), Optional. absent()); } @@ -279,23 +342,50 @@ public class InvokeRpcMethodTest { @Test public void testInvokeRpcWithNoPayloadWithOutput_Success() { - CompositeNode compositeNode = mock(CompositeNode.class); - RpcResult rpcResult = - RpcResultBuilder.success(compositeNode).build(); - - BrokerFacade brokerFacade = mock(BrokerFacade.class); - when( - brokerFacade.invokeRpc( - eq(QName.create("(http://netconfcentral.org/ns/toaster?revision=2009-11-20)testOutput")), - any(CompositeNode.class))).thenReturn( - Futures.> immediateFuture(rpcResult)); + final SchemaContext schema = controllerContext.getGlobalSchema(); + final Module rpcModule = schema.findModuleByName("toaster", null); + assertNotNull(rpcModule); + final QName rpcQName = QName.create(rpcModule.getQNameModule(), "testOutput"); + final QName rpcOutputQName = QName.create(rpcModule.getQNameModule(),"output"); + + final Set setRpcs = rpcModule.getRpcs(); + RpcDefinition rpcDef = null; + ContainerSchemaNode rpcOutputSchemaNode = null; + for (final RpcDefinition rpc : setRpcs) { + if (rpcQName.isEqualWithoutRevision(rpc.getQName())) { + rpcOutputSchemaNode = SchemaNodeUtils.getRpcDataSchema(rpc, rpcOutputQName); + rpcDef = rpc; + break; + } + } + assertNotNull(rpcDef); + assertNotNull(rpcOutputSchemaNode); + assertTrue(rpcOutputSchemaNode instanceof ContainerSchemaNode); + final DataContainerNodeAttrBuilder containerBuilder = + Builders.containerBuilder(rpcOutputSchemaNode); + final DataSchemaNode leafSchema = rpcOutputSchemaNode + .getDataChildByName(QName.create(rpcModule.getQNameModule(), "textOut")); + assertTrue(leafSchema instanceof LeafSchemaNode); + final NormalizedNodeAttrBuilder> 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); restconfImpl.setBroker(brokerFacade); - StructuredData output = restconfImpl.invokeRpc("toaster:testOutput", "", uriInfo); + final NormalizedNodeContext output = restconfImpl.invokeRpc("toaster:testOutput", "", uriInfo); assertNotNull(output); - assertSame(compositeNode, output.getData()); - assertNotNull(output.getSchema()); + assertNotNull(output.getData()); + assertSame(container, output.getData()); + assertNotNull(output.getInstanceIdentifierContext()); + assertNotNull(output.getInstanceIdentifierContext().getSchemaContext()); } /** @@ -307,28 +397,29 @@ public class InvokeRpcMethodTest { * invoked. */ @Test + @Ignore // FIXME find how to use mockito for it public void testMountedRpcCallNoPayload_Success() throws Exception { - RpcResult rpcResult = RpcResultBuilder.success().build(); + final RpcResult rpcResult = RpcResultBuilder.success().build(); - ListenableFuture> mockListener = mock(ListenableFuture.class); + final ListenableFuture> mockListener = mock(ListenableFuture.class); when(mockListener.get()).thenReturn(rpcResult); - QName cancelToastQName = QName.create("namespace", "2014-05-28", "cancelToast"); + final QName cancelToastQName = QName.create("namespace", "2014-05-28", "cancelToast"); - RpcDefinition mockRpc = mock(RpcDefinition.class); + final RpcDefinition mockRpc = mock(RpcDefinition.class); when(mockRpc.getQName()).thenReturn(cancelToastQName); - DOMMountPoint mockMountPoint = mock(DOMMountPoint.class); - RpcProvisionRegistry mockedRpcProvisionRegistry = mock(RpcProvisionRegistry.class); + final DOMMountPoint mockMountPoint = mock(DOMMountPoint.class); + final RpcProvisionRegistry mockedRpcProvisionRegistry = mock(RpcProvisionRegistry.class); when(mockedRpcProvisionRegistry.invokeRpc(eq(cancelToastQName), any(CompositeNode.class))).thenReturn(mockListener); when(mockMountPoint.getService(eq(RpcProvisionRegistry.class))).thenReturn(Optional.of(mockedRpcProvisionRegistry)); when(mockMountPoint.getSchemaContext()).thenReturn(TestUtils.loadSchemaContext("/invoke-rpc")); - InstanceIdentifierContext mockedInstanceId = mock(InstanceIdentifierContext.class); + final InstanceIdentifierContext mockedInstanceId = mock(InstanceIdentifierContext.class); when(mockedInstanceId.getMountPoint()).thenReturn(mockMountPoint); - ControllerContext mockedContext = mock(ControllerContext.class); - String rpcNoop = "invoke-rpc-module:rpc-noop"; + final ControllerContext mockedContext = mock(ControllerContext.class); + final String rpcNoop = "invoke-rpc-module:rpc-noop"; when(mockedContext.urlPathArgDecode(rpcNoop)).thenReturn(rpcNoop); when(mockedContext.getRpcDefinition(rpcNoop)).thenReturn(mockRpc); when( @@ -341,8 +432,8 @@ public class InvokeRpcMethodTest { "opendaylight-inventory:nodes/node/REMOTE_HOST/yang-ext:mount/invoke-rpc-module:rpc-noop", "", uriInfo); fail("RestconfDocumentedException wasn't raised"); - } catch (RestconfDocumentedException e) { - List errors = e.getErrors(); + } catch (final RestconfDocumentedException e) { + final List errors = e.getErrors(); assertNotNull(errors); assertEquals(1, errors.size()); assertEquals(ErrorType.APPLICATION, errors.iterator().next().getErrorType());