Codify operationsGET
[netconf.git] / restconf / restconf-nb / src / test / java / org / opendaylight / restconf / nb / rfc8040 / rests / services / impl / RestconfInvokeOperationsServiceImplTest.java
index 67e50dfcd77e30811660d265d881ec0669b344c6..8206b39bfd13be406fc01cb91a019dfd04ba4a20 100644 (file)
@@ -19,6 +19,7 @@ import static org.mockito.Mockito.verify;
 
 import com.google.common.util.concurrent.Futures;
 import java.io.ByteArrayInputStream;
+import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Optional;
@@ -27,7 +28,6 @@ import javax.ws.rs.container.AsyncResponse;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -36,6 +36,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
+import org.opendaylight.mdsal.dom.api.DOMNotificationService;
 import org.opendaylight.mdsal.dom.api.DOMRpcImplementationNotAvailableException;
 import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
@@ -44,7 +45,7 @@ import org.opendaylight.netconf.dom.api.NetconfDataTreeService;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.nb.rfc8040.databind.DatabindContext;
 import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
-import org.opendaylight.restconf.nb.rfc8040.streams.listeners.ListenersBroker;
+import org.opendaylight.restconf.server.spi.OperationInput;
 import org.opendaylight.yangtools.yang.common.ErrorTag;
 import org.opendaylight.yangtools.yang.common.ErrorType;
 import org.opendaylight.yangtools.yang.common.QName;
@@ -52,11 +53,14 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 @RunWith(MockitoJUnitRunner.StrictStubs.class)
 public class RestconfInvokeOperationsServiceImplTest {
-    private static final QName RPC = QName.create("ns", "2015-02-28", "test-rpc");
+    private static final URI RESTCONF_URI = URI.create("/restconf");
+    private static final QName RPC = QName.create("invoke:rpc:module", "2013-12-03", "rpc-test");
     private static final ContainerNode INPUT = Builders.containerBuilder()
         .withNodeIdentifier(new NodeIdentifier(QName.create(RPC, "input")))
         .withChild(ImmutableNodes.leafNode(QName.create(RPC, "content"), "test"))
@@ -65,8 +69,10 @@ public class RestconfInvokeOperationsServiceImplTest {
         .withNodeIdentifier(new NodeIdentifier(QName.create(RPC, "output")))
         .withChild(ImmutableNodes.leafNode(QName.create(RPC, "content"), "operation result"))
         .build();
-
-    private static DatabindContext CONTEXT;
+    private static final DatabindContext CONTEXT =
+        DatabindContext.ofModel(YangParserTestUtils.parseYangResourceDirectory("/invoke-rpc"));
+    private static final OperationInput OPER_INPUT = new OperationInput(CONTEXT,
+            SchemaInferenceStack.of(CONTEXT.modelContext(), Absolute.of(RPC)).toInference(), INPUT);
 
     @Mock
     private DOMDataBroker dataBroker;
@@ -76,20 +82,16 @@ public class RestconfInvokeOperationsServiceImplTest {
     private DOMMountPoint mountPoint;
     @Mock
     private DOMMountPointService mountPointService;
+    @Mock
+    private DOMNotificationService notificationService;
 
-    private RestconfInvokeOperationsServiceImpl invokeOperationsService;
+    private RestconfOperationsServiceImpl invokeOperationsService;
     private MdsalRestconfServer server;
 
-    @BeforeClass
-    public static void beforeClass() {
-        CONTEXT = DatabindContext.ofModel(YangParserTestUtils.parseYangResourceDirectory("/invoke-rpc"));
-    }
-
     @Before
     public void setup() {
-        server = new MdsalRestconfServer(dataBroker, rpcService, mountPointService);
-        invokeOperationsService = new RestconfInvokeOperationsServiceImpl(() -> CONTEXT, server, mountPointService,
-            SubscribeToStreamUtil.webSockets(new ListenersBroker()));
+        server = new MdsalRestconfServer(() -> CONTEXT, dataBroker, rpcService, mountPointService);
+        invokeOperationsService = new RestconfOperationsServiceImpl(server);
     }
 
     @Test
@@ -100,7 +102,7 @@ public class RestconfInvokeOperationsServiceImplTest {
         prepNNC(result);
         final var ar = mock(AsyncResponse.class);
         final var captor = ArgumentCaptor.forClass(Response.class);
-        invokeOperationsService.invokeRpcXML("invoke-rpc-module:rpc-test", new ByteArrayInputStream("""
+        invokeOperationsService.operationsPostXML("invoke-rpc-module:rpc-test", new ByteArrayInputStream("""
             <input xmlns="invoke:rpc:module"/>
             """.getBytes(StandardCharsets.UTF_8)), mock(UriInfo.class), ar);
         verify(ar).resume(captor.capture());
@@ -119,7 +121,7 @@ public class RestconfInvokeOperationsServiceImplTest {
         prepNNC(result);
         final var ar = mock(AsyncResponse.class);
         final var response = ArgumentCaptor.forClass(Response.class);
-        invokeOperationsService.invokeRpcJSON("invoke-rpc-module:rpc-test", new ByteArrayInputStream("""
+        invokeOperationsService.operationsPostJSON("invoke-rpc-module:rpc-test", new ByteArrayInputStream("""
             {
               "invoke-rpc-module:input" : {
               }
@@ -134,8 +136,10 @@ public class RestconfInvokeOperationsServiceImplTest {
     public void invokeRpcTest() throws Exception {
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult(OUTPUT, List.of()))).when(rpcService)
             .invokeRpc(RPC, INPUT);
-        assertEquals(Optional.of(OUTPUT), Futures.getDone(server.getRestconfStrategy(CONTEXT.modelContext(), null)
-            .invokeRpc(RPC, INPUT)));
+        assertEquals(OUTPUT,
+            Futures.getDone(
+                server.getRestconfStrategy(CONTEXT.modelContext(), null).invokeRpc(RESTCONF_URI, RPC, OPER_INPUT))
+            .output());
     }
 
     @Test
@@ -145,8 +149,9 @@ public class RestconfInvokeOperationsServiceImplTest {
                 "No implementation of RPC " + errorRpc + " available.");
         doReturn(Futures.immediateFailedFuture(exception)).when(rpcService).invokeRpc(errorRpc, INPUT);
         final var ex = assertInstanceOf(RestconfDocumentedException.class,
-            assertThrows(ExecutionException.class, () -> Futures.getDone(
-                server.getRestconfStrategy(CONTEXT.modelContext(), null).invokeRpc(errorRpc, INPUT))).getCause());
+            assertThrows(ExecutionException.class,
+                () -> Futures.getDone(server.getRestconfStrategy(CONTEXT.modelContext(), null)
+                    .invokeRpc(RESTCONF_URI, errorRpc, OPER_INPUT))).getCause());
         final var errorList = ex.getErrors();
         assertEquals(1, errorList.size());
         final var actual = errorList.iterator().next();
@@ -162,8 +167,10 @@ public class RestconfInvokeOperationsServiceImplTest {
         doReturn(Optional.of(dataBroker)).when(mountPoint).getService(DOMDataBroker.class);
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult(OUTPUT, List.of()))).when(rpcService)
             .invokeRpc(RPC, INPUT);
-        assertEquals(Optional.of(OUTPUT), Futures.getDone(
-            server.getRestconfStrategy(CONTEXT.modelContext(), mountPoint).invokeRpc(RPC, INPUT)));
+        assertEquals(OUTPUT,
+            Futures.getDone(
+                server.getRestconfStrategy(CONTEXT.modelContext(), mountPoint).invokeRpc(RESTCONF_URI, RPC, OPER_INPUT))
+            .output());
     }
 
     @Test
@@ -173,7 +180,8 @@ public class RestconfInvokeOperationsServiceImplTest {
         doReturn(Optional.of(dataBroker)).when(mountPoint).getService(DOMDataBroker.class);
         final var strategy = server.getRestconfStrategy(CONTEXT.modelContext(), mountPoint);
         final var ex = assertInstanceOf(RestconfDocumentedException.class,
-            assertThrows(ExecutionException.class, () -> Futures.getDone(strategy.invokeRpc(RPC, INPUT))).getCause());
+            assertThrows(ExecutionException.class,
+                () -> Futures.getDone(strategy.invokeRpc(RESTCONF_URI, RPC, OPER_INPUT))).getCause());
         final var errors = ex.getErrors();
         assertEquals(1, errors.size());
         final var error = errors.get(0);
@@ -186,8 +194,10 @@ public class RestconfInvokeOperationsServiceImplTest {
     public void checkResponseTest() throws Exception {
         doReturn(Futures.immediateFuture(new DefaultDOMRpcResult(OUTPUT, List.of())))
             .when(rpcService).invokeRpc(RPC, INPUT);
-        assertEquals(Optional.of(OUTPUT), Futures.getDone(
-            server.getRestconfStrategy(CONTEXT.modelContext(), null).invokeRpc(RPC, INPUT)));
+        assertEquals(OUTPUT,
+            Futures.getDone(server.getRestconfStrategy(CONTEXT.modelContext(), null)
+                .invokeRpc(RESTCONF_URI, RPC, OPER_INPUT))
+            .output());
     }
 
     private void prepNNC(final ContainerNode result) {