Migrate users of deprecated yang.common methods
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / test / java / org / opendaylight / mdsal / binding / dom / adapter / BindingDOMRpcIntegrationTest.java
index 760540ce7d324d385e17b592f3b43fed5e43b2c4..379b662796d9d481dce91bfe423cc1c39a32bb72 100644 (file)
@@ -19,52 +19,45 @@ import com.google.common.collect.Multimap;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.MoreExecutors;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 import org.junit.Before;
 import org.junit.Test;
-import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
 import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.mdsal.binding.api.RpcService;
 import org.opendaylight.mdsal.binding.dom.adapter.test.util.BindingBrokerTestFactory;
 import org.opendaylight.mdsal.binding.dom.adapter.test.util.BindingTestContext;
-import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
+import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
 import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMRpcProviderService;
-import org.opendaylight.mdsal.dom.api.DOMRpcResult;
 import org.opendaylight.mdsal.dom.api.DOMRpcService;
 import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.knock.knock.rev180723.KnockKnock;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.knock.knock.rev180723.KnockKnockInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.knock.knock.rev180723.KnockKnockInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.knock.knock.rev180723.KnockKnockOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.knock.knock.rev180723.KnockKnockOutputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.md.sal.knock.knock.rev180723.OpendaylightKnockKnockRpcService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.Top;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.binding.rev140701.two.level.list.TopLevelListKey;
-import org.opendaylight.yangtools.concepts.ObjectRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.util.concurrent.FluentFutures;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 
 public class BindingDOMRpcIntegrationTest {
     private static final InstanceIdentifier<TopLevelList> BA_NODE_ID = InstanceIdentifier.create(Top.class)
             .child(TopLevelList.class, new TopLevelListKey("a"));
 
     private static final QName KNOCK_KNOCK_QNAME = QName.create(KnockKnockOutput.QNAME, "knock-knock");
-    private static final SchemaPath KNOCK_KNOCK_PATH = SchemaPath.create(true, KNOCK_KNOCK_QNAME);
 
     private RpcProviderService baRpcProviderService;
-    private RpcConsumerRegistry baRpcConsumerService;
+    private RpcService baRpcService;
     private DOMRpcProviderService biRpcProviderService;
     private BindingTestContext testContext;
     private DOMRpcService biRpcService;
-    private final OpendaylightKnockKnockRpcServiceImpl knockRpcImpl = new OpendaylightKnockKnockRpcServiceImpl();
+    private final KnockKnockImpl knockRpcImpl = new KnockKnockImpl();
 
     @Before
     public void setup() throws Exception {
@@ -73,77 +66,82 @@ public class BindingDOMRpcIntegrationTest {
         testContext = testFactory.getTestContext();
 
         testContext.setSchemaModuleInfos(ImmutableSet.of(
-                BindingReflections.getModuleInfo(OpendaylightKnockKnockRpcService.class),
-                BindingReflections.getModuleInfo(Top.class)));
+            BindingRuntimeHelpers.getYangModuleInfo(KnockKnock.class),
+            BindingRuntimeHelpers.getYangModuleInfo(Top.class)));
         testContext.start();
         baRpcProviderService = testContext.getBindingRpcProviderRegistry();
-        baRpcConsumerService = testContext.getBindingRpcConsumerRegistry();
+        baRpcService = testContext.getBindingRpcService();
         biRpcProviderService = testContext.getDomRpcRegistry();
         biRpcService = testContext.getDomRpcInvoker();
     }
 
     @Test
-    public void testBindingRegistrationWithDOMInvocation()
-            throws InterruptedException, ExecutionException, TimeoutException {
+    public void testBindingRegistrationWithDOMInvocation() throws Exception {
         knockRpcImpl.registerTo(baRpcProviderService, BA_NODE_ID).setKnockKnockResult(knockResult(true, "open"));
 
-        final OpendaylightKnockKnockRpcService baKnockService =
-                baRpcConsumerService.getRpcService(OpendaylightKnockKnockRpcService.class);
+        final var baKnockService = baRpcService.getRpc(KnockKnock.class);
         assertNotSame(knockRpcImpl, baKnockService);
 
-        KnockKnockInput baKnockKnockInput = knockKnock(BA_NODE_ID).setQuestion("who's there?").build();
+        final var baKnockKnockInput = knockKnock(BA_NODE_ID).setQuestion("who's there?").build();
 
-        ContainerNode biKnockKnockInput = toDOMKnockKnockInput(baKnockKnockInput);
-        DOMRpcResult domResult = biRpcService.invokeRpc(KNOCK_KNOCK_PATH, biKnockKnockInput).get(5, TimeUnit.SECONDS);
+        final var biKnockKnockInput = toDOMKnockKnockInput(baKnockKnockInput);
+        final var domResult = Futures.getDone(biRpcService.invokeRpc(KNOCK_KNOCK_QNAME, biKnockKnockInput));
         assertNotNull(domResult);
-        assertNotNull(domResult.getResult());
+        assertNotNull(domResult.value());
         assertTrue("Binding KnockKnock service was not invoked",
                 knockRpcImpl.getReceivedKnocks().containsKey(BA_NODE_ID));
         assertEquals(baKnockKnockInput, knockRpcImpl.getReceivedKnocks().get(BA_NODE_ID).iterator().next());
     }
 
     @Test
-    public void testDOMRegistrationWithBindingInvocation()
-            throws InterruptedException, ExecutionException, TimeoutException {
-        KnockKnockOutput baKnockKnockOutput = new KnockKnockOutputBuilder().setAnswer("open").build();
+    public void testDOMRegistrationWithBindingInvocation() throws Exception {
+        final var baKnockKnockOutput = new KnockKnockOutputBuilder().setAnswer("open").build();
 
         biRpcProviderService.registerRpcImplementation((rpc, input) ->
             FluentFutures.immediateFluentFuture(new DefaultDOMRpcResult(testContext.getCodec()
-                    .getCodecFactory().toNormalizedNodeRpcData(baKnockKnockOutput))),
-            DOMRpcIdentifier.create(KNOCK_KNOCK_PATH, testContext.getCodec().toYangInstanceIdentifier(BA_NODE_ID)));
+                    .currentSerializer().toNormalizedNodeRpcData(baKnockKnockOutput))),
+            DOMRpcIdentifier.create(KNOCK_KNOCK_QNAME, testContext.getCodec().currentSerializer()
+                .toYangInstanceIdentifier(BA_NODE_ID)));
 
-        final OpendaylightKnockKnockRpcService baKnockService =
-                baRpcConsumerService.getRpcService(OpendaylightKnockKnockRpcService.class);
-        Future<RpcResult<KnockKnockOutput>> baResult = baKnockService.knockKnock(knockKnock(BA_NODE_ID)
-            .setQuestion("Who's there?").build());
+        final var baKnockService = baRpcService.getRpc(KnockKnock.class);
+        final var baResult = baKnockService.invoke(knockKnock(BA_NODE_ID).setQuestion("Who's there?").build());
         assertNotNull(baResult);
-        assertEquals(baKnockKnockOutput, baResult.get(5, TimeUnit.SECONDS).getResult());
+        assertEquals(baKnockKnockOutput, Futures.getDone(baResult).getResult());
     }
 
     @Test
-    public void testBindingRpcShortcut() throws InterruptedException, ExecutionException, TimeoutException {
-        final ListenableFuture<RpcResult<KnockKnockOutput>> baKnockResult = knockResult(true, "open");
+    public void testBindingRpcShortcut() throws Exception {
+        final var baKnockResult = knockResult(true, "open");
         knockRpcImpl.registerTo(baRpcProviderService, BA_NODE_ID).setKnockKnockResult(baKnockResult);
 
-        final OpendaylightKnockKnockRpcService baKnockService =
-                baRpcConsumerService.getRpcService(OpendaylightKnockKnockRpcService.class);
+        final var baKnockService = baRpcService.getRpc(KnockKnock.class);
 
-        KnockKnockInput baKnockKnockInput = knockKnock(BA_NODE_ID).setQuestion("who's there?").build();
-        ListenableFuture<RpcResult<KnockKnockOutput>> future = baKnockService.knockKnock(baKnockKnockInput);
+        final var baKnockKnockInput = knockKnock(BA_NODE_ID).setQuestion("who's there?").build();
 
-        final RpcResult<KnockKnockOutput> rpcResult = future.get(5, TimeUnit.SECONDS);
+        final var rpcResult = Futures.getDone(baKnockService.invoke(baKnockKnockInput));
 
         assertEquals(baKnockResult.get().getResult().getClass(), rpcResult.getResult().getClass());
         assertSame(baKnockResult.get().getResult(), rpcResult.getResult());
         assertSame(baKnockKnockInput, knockRpcImpl.getReceivedKnocks().get(BA_NODE_ID).iterator().next());
     }
 
+    @Test
+    public void testSimpleRpc() throws Exception {
+        baRpcProviderService.registerRpcImplementation((KnockKnock) input -> knockResult(true, "open"));
+
+        final var baKnockService = baRpcService.getRpc(KnockKnock.class);
+        final var rpcResult = Futures.getDone(
+            baKnockService.invoke(knockKnock(BA_NODE_ID).setQuestion("who's there?").build()));
+
+        assertEquals(rpcResult.getResult().getClass(), rpcResult.getResult().getClass());
+        assertSame(rpcResult.getResult(), rpcResult.getResult());
+    }
+
     private static ListenableFuture<RpcResult<KnockKnockOutput>> knockResult(final boolean success,
             final String answer) {
-        KnockKnockOutput output = new KnockKnockOutputBuilder().setAnswer(answer).build();
-        RpcResult<KnockKnockOutput> result = RpcResultBuilder.<KnockKnockOutput>status(success).withResult(output)
-                .build();
-        return Futures.immediateFuture(result);
+        return RpcResultBuilder.<KnockKnockOutput>status(success)
+            .withResult(new KnockKnockOutputBuilder().setAnswer(answer).build())
+            .buildFuture();
     }
 
     private static KnockKnockInputBuilder knockKnock(final InstanceIdentifier<TopLevelList> listId) {
@@ -153,17 +151,17 @@ public class BindingDOMRpcIntegrationTest {
     }
 
     private ContainerNode toDOMKnockKnockInput(final KnockKnockInput from) {
-        return testContext.getCodec().getCodecFactory().toNormalizedNodeRpcData(from);
+        return testContext.getCodec().currentSerializer().toNormalizedNodeRpcData(from);
     }
 
-    private static class OpendaylightKnockKnockRpcServiceImpl implements OpendaylightKnockKnockRpcService {
-        private ListenableFuture<RpcResult<KnockKnockOutput>> knockKnockResult;
+    private static final class KnockKnockImpl implements KnockKnock {
         private final Multimap<InstanceIdentifier<?>, KnockKnockInput> receivedKnocks = HashMultimap.create();
-        private ObjectRegistration<OpendaylightKnockKnockRpcServiceImpl> registration;
+        private ListenableFuture<RpcResult<KnockKnockOutput>> knockKnockResult;
+        private Registration registration;
 
-        OpendaylightKnockKnockRpcServiceImpl setKnockKnockResult(
+        KnockKnockImpl setKnockKnockResult(
                 final ListenableFuture<RpcResult<KnockKnockOutput>> kkOutput) {
-            this.knockKnockResult = kkOutput;
+            knockKnockResult = kkOutput;
             return this;
         }
 
@@ -171,16 +169,14 @@ public class BindingDOMRpcIntegrationTest {
             return receivedKnocks;
         }
 
-        OpendaylightKnockKnockRpcServiceImpl registerTo(final RpcProviderService registry,
-                final InstanceIdentifier<?>... paths) {
-            registration = registry.registerRpcImplementation(OpendaylightKnockKnockRpcService.class, this,
-                    ImmutableSet.copyOf(paths));
+        KnockKnockImpl registerTo(final RpcProviderService registry, final InstanceIdentifier<?>... paths) {
+            registration = registry.registerRpcImplementation(this, ImmutableSet.copyOf(paths));
             assertNotNull(registration);
             return this;
         }
 
         @Override
-        public ListenableFuture<RpcResult<KnockKnockOutput>> knockKnock(final KnockKnockInput input) {
+        public ListenableFuture<RpcResult<KnockKnockOutput>> invoke(final KnockKnockInput input) {
             receivedKnocks.put(input.getKnockerId(), input);
             return knockKnockResult;
         }