Do not reference individual builders
[netconf.git] / netconf / mdsal-netconf-connector / src / test / java / org / opendaylight / netconf / mdsal / connector / ops / RuntimeRpcTest.java
index d27385ea5658c8b4da05d974fdc030ac90fa061a..a3019a0fa3b02f40f53c3dbb2eeb327f4e59c668 100644 (file)
@@ -7,8 +7,9 @@
  */
 package org.opendaylight.netconf.mdsal.connector.ops;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doNothing;
@@ -19,9 +20,8 @@ import com.google.common.base.Preconditions;
 import com.google.common.io.ByteSource;
 import com.google.common.util.concurrent.FluentFuture;
 import java.io.IOException;
-import java.net.URI;
 import java.util.Collection;
-import java.util.Collections;
+import java.util.List;
 import javax.xml.parsers.ParserConfigurationException;
 import org.custommonkey.xmlunit.DetailedDiff;
 import org.custommonkey.xmlunit.Diff;
@@ -42,9 +42,6 @@ import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
 import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
 import org.opendaylight.netconf.api.DocumentedException;
-import org.opendaylight.netconf.api.DocumentedException.ErrorSeverity;
-import org.opendaylight.netconf.api.DocumentedException.ErrorTag;
-import org.opendaylight.netconf.api.DocumentedException.ErrorType;
 import org.opendaylight.netconf.api.xml.XmlUtil;
 import org.opendaylight.netconf.mapping.api.HandlingPriority;
 import org.opendaylight.netconf.mapping.api.NetconfOperationChainedExecution;
@@ -52,18 +49,20 @@ import org.opendaylight.netconf.mdsal.connector.CurrentSchemaContext;
 import org.opendaylight.netconf.util.test.XmlFileLoader;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.concepts.NoOpListenerRegistration;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
+import org.opendaylight.yangtools.yang.common.ErrorSeverity;
+import org.opendaylight.yangtools.yang.common.ErrorTag;
+import org.opendaylight.yangtools.yang.common.ErrorType;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
+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.DataContainerChild;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
-import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider;
@@ -90,8 +89,8 @@ public class RuntimeRpcTest {
 
     private static final DOMRpcService RPC_SERVICE_VOID_INVOKER = new DOMRpcService() {
         @Override
-        public FluentFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
-            return immediateFluentFuture(new DefaultDOMRpcResult(null, Collections.emptyList()));
+        public FluentFuture<DOMRpcResult> invokeRpc(final QName type, final NormalizedNode input) {
+            return immediateFluentFuture(new DefaultDOMRpcResult(null, List.of()));
         }
 
         @Override
@@ -102,7 +101,7 @@ public class RuntimeRpcTest {
 
     private static final DOMRpcService RPC_SERVICE_FAILED_INVOCATION = new DOMRpcService() {
         @Override
-        public FluentFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
+        public FluentFuture<DOMRpcResult> invokeRpc(final QName type, final NormalizedNode input) {
             return immediateFailedFluentFuture(new DOMRpcException("rpc invocation not implemented yet") {
                 private static final long serialVersionUID = 1L;
             });
@@ -116,17 +115,16 @@ public class RuntimeRpcTest {
 
     private final DOMRpcService rpcServiceSuccessfulInvocation = new DOMRpcService() {
         @Override
-        public FluentFuture<DOMRpcResult> invokeRpc(final SchemaPath type, final NormalizedNode<?, ?> input) {
-            final Collection<DataContainerChild<? extends PathArgument, ?>> children =
-                    ((ContainerNode) input).getValue();
-            final Module module = SCHEMA_CONTEXT.findModules(type.getLastComponent().getNamespace()).stream()
+        public FluentFuture<DOMRpcResult> invokeRpc(final QName type, final NormalizedNode input) {
+            final Collection<DataContainerChild> children = ((ContainerNode) input).body();
+            final Module module = SCHEMA_CONTEXT.findModules(type.getNamespace()).stream()
                 .findFirst().orElse(null);
-            final RpcDefinition rpcDefinition = getRpcDefinitionFromModule(
-                module, module.getNamespace(), type.getLastComponent().getLocalName());
-            final ContainerSchemaNode outputSchemaNode = rpcDefinition.getOutput();
-            final ContainerNode node = ImmutableContainerNodeBuilder.create()
-                    .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(outputSchemaNode.getQName()))
-                    .withValue(children).build();
+            final RpcDefinition rpcDefinition = getRpcDefinitionFromModule(module, module.getNamespace(),
+                type.getLocalName());
+            final ContainerNode node = Builders.containerBuilder()
+                    .withNodeIdentifier(new NodeIdentifier(rpcDefinition.getOutput().getQName()))
+                    .withValue(children)
+                    .build();
 
             return immediateFluentFuture(new DefaultDOMRpcResult(node));
         }
@@ -177,7 +175,7 @@ public class RuntimeRpcTest {
             return immediateFluentFuture(yangTextSchemaSource);
         }).when(sourceProvider).getSource(any(SourceIdentifier.class));
 
-        this.currentSchemaContext = new CurrentSchemaContext(schemaService, sourceProvider);
+        currentSchemaContext = CurrentSchemaContext.create(schemaService, sourceProvider);
     }
 
     @After
@@ -227,20 +225,18 @@ public class RuntimeRpcTest {
     @Test
     public void testFailedInvocation() throws Exception {
         final RuntimeRpc rpc = new RuntimeRpc(
-            SESSION_ID_FOR_REPORTING, currentSchemaContext, RPC_SERVICE_FAILED_INVOCATION);
+                SESSION_ID_FOR_REPORTING, currentSchemaContext, RPC_SERVICE_FAILED_INVOCATION);
 
         final Document rpcDocument = XmlFileLoader.xmlFileToDocument("messages/mapping/rpcs/rpc-nonvoid.xml");
         final HandlingPriority priority = rpc.canHandle(rpcDocument);
         Preconditions.checkState(priority != HandlingPriority.CANNOT_HANDLE);
 
-        try {
-            rpc.handle(rpcDocument, NetconfOperationChainedExecution.EXECUTION_TERMINATION_POINT);
-            fail("should have failed with rpc invocation not implemented yet");
-        } catch (final DocumentedException e) {
-            assertTrue(e.getErrorType() == ErrorType.APPLICATION);
-            assertTrue(e.getErrorSeverity() == ErrorSeverity.ERROR);
-            assertTrue(e.getErrorTag() == ErrorTag.OPERATION_FAILED);
-        }
+        final DocumentedException e = assertThrows(DocumentedException.class,
+                () -> rpc.handle(rpcDocument, NetconfOperationChainedExecution.EXECUTION_TERMINATION_POINT));
+
+        assertEquals(e.getErrorSeverity(), ErrorSeverity.ERROR);
+        assertEquals(e.getErrorTag(), ErrorTag.OPERATION_FAILED);
+        assertEquals(e.getErrorType(), ErrorType.APPLICATION);
     }
 
     @Test
@@ -261,14 +257,12 @@ public class RuntimeRpcTest {
         final RuntimeRpc rpc = new RuntimeRpc(SESSION_ID_FOR_REPORTING, currentSchemaContext, RPC_SERVICE_VOID_INVOKER);
         final Document rpcDocument = XmlFileLoader.xmlFileToDocument("messages/mapping/rpcs/rpc-bad-namespace.xml");
 
-        try {
-            rpc.handle(rpcDocument, NetconfOperationChainedExecution.EXECUTION_TERMINATION_POINT);
-            fail("Should have failed, rpc has bad namespace");
-        } catch (final DocumentedException e) {
-            assertTrue(e.getErrorSeverity() == ErrorSeverity.ERROR);
-            assertTrue(e.getErrorTag() == ErrorTag.BAD_ELEMENT);
-            assertTrue(e.getErrorType() == ErrorType.APPLICATION);
-        }
+        final DocumentedException e = assertThrows(DocumentedException.class,
+                () -> rpc.handle(rpcDocument, NetconfOperationChainedExecution.EXECUTION_TERMINATION_POINT));
+
+        assertEquals(e.getErrorSeverity(), ErrorSeverity.ERROR);
+        assertEquals(e.getErrorTag(), ErrorTag.BAD_ELEMENT);
+        assertEquals(e.getErrorType(), ErrorType.APPLICATION);
     }
 
     private static void verifyResponse(final Document response, final Document template) {
@@ -278,7 +272,7 @@ public class RuntimeRpcTest {
         assertTrue(dd.identical());
     }
 
-    private static RpcDefinition getRpcDefinitionFromModule(final Module module, final URI namespaceURI,
+    private static RpcDefinition getRpcDefinitionFromModule(final Module module, final XMLNamespace namespaceURI,
             final String name) {
         for (final RpcDefinition rpcDef : module.getRpcs()) {
             if (rpcDef.getQName().getNamespace().equals(namespaceURI)