PROTON-2452 Pass along node properties and receiver options to create

When creating a dynamic receiver with dynamic node properties or with
receiver options only, ensure the values are passed along to the full
fledged API that is being called to do the work.
diff --git a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientConnection.java b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientConnection.java
index 4eacbb2..184f7bf 100644
--- a/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientConnection.java
+++ b/protonj2-client/src/main/java/org/apache/qpid/protonj2/client/impl/ClientConnection.java
@@ -326,12 +326,12 @@
 
     @Override
     public Receiver openDynamicReceiver(Map<String, Object> dynamicNodeProperties) throws ClientException {
-        return openDynamicReceiver(null, null);
+        return openDynamicReceiver(dynamicNodeProperties, null);
     }
 
     @Override
     public Receiver openDynamicReceiver(ReceiverOptions receiverOptions) throws ClientException {
-        return openDynamicReceiver(null, null);
+        return openDynamicReceiver(null, receiverOptions);
     }
 
     @Override
diff --git a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ConnectionTest.java b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ConnectionTest.java
index 3c57622..e13863d 100644
--- a/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ConnectionTest.java
+++ b/protonj2-client/src/test/java/org/apache/qpid/protonj2/client/impl/ConnectionTest.java
@@ -38,6 +38,7 @@
 import org.apache.qpid.protonj2.client.ErrorCondition;
 import org.apache.qpid.protonj2.client.Message;
 import org.apache.qpid.protonj2.client.Receiver;
+import org.apache.qpid.protonj2.client.ReceiverOptions;
 import org.apache.qpid.protonj2.client.Sender;
 import org.apache.qpid.protonj2.client.Session;
 import org.apache.qpid.protonj2.client.Tracker;
@@ -1034,6 +1035,85 @@
     }
 
     @Test
+    public void testCreateDynamicReceiverWithNodeProperties() throws Exception {
+        Map<String, Object> dynamicNodeProperties = new HashMap<>();
+        dynamicNodeProperties.put("test", "vale");
+
+        try (ProtonTestServer peer = new ProtonTestServer(testServerOptions())) {
+            peer.expectSASLAnonymousConnect();
+            peer.expectOpen().respond();
+            peer.expectBegin().respond();
+            peer.expectAttach().withRole(Role.RECEIVER.getValue())
+                               .withSource()
+                               .withDynamic(true)
+                               .withAddress(nullValue())
+                               .withDynamicNodeProperties(dynamicNodeProperties)
+                               .also()
+                               .respond();
+            peer.expectFlow();
+            peer.expectDetach().respond();
+            peer.expectClose().respond();
+            peer.start();
+
+            URI remoteURI = peer.getServerURI();
+
+            LOG.info("Connect test started, peer listening on: {}", remoteURI);
+
+            Client container = Client.create();
+            Connection connection = container.connect(remoteURI.getHost(), remoteURI.getPort(), connectionOptions());
+            connection.openFuture().get(10, TimeUnit.SECONDS);
+
+            Receiver receiver = connection.openDynamicReceiver(dynamicNodeProperties);
+            receiver.openFuture().get(10, TimeUnit.SECONDS);
+
+            assertNotNull(receiver.address(), "Remote should have assigned the address for the dynamic receiver");
+
+            receiver.closeAsync().get(10, TimeUnit.SECONDS);
+
+            connection.closeAsync().get(10, TimeUnit.SECONDS);
+
+            peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+        }
+    }
+
+    @Test
+    public void testCreateDynamicReceiverWithReceiverOptions() throws Exception {
+        try (ProtonTestServer peer = new ProtonTestServer(testServerOptions())) {
+            peer.expectSASLAnonymousConnect();
+            peer.expectOpen().respond();
+            peer.expectBegin().respond();
+            peer.expectAttach().withRole(Role.RECEIVER.getValue())
+                               .withDesiredCapabilities("queue")
+                               .respond();
+            peer.expectFlow();
+            peer.expectDetach().respond();
+            peer.expectClose().respond();
+            peer.start();
+
+            URI remoteURI = peer.getServerURI();
+
+            LOG.info("Connect test started, peer listening on: {}", remoteURI);
+
+            Client container = Client.create();
+            Connection connection = container.connect(remoteURI.getHost(), remoteURI.getPort(), connectionOptions());
+            connection.openFuture().get(10, TimeUnit.SECONDS);
+
+            ReceiverOptions options = new ReceiverOptions();
+            options.desiredCapabilities("queue");
+            Receiver receiver = connection.openDynamicReceiver(options);
+            receiver.openFuture().get(10, TimeUnit.SECONDS);
+
+            assertNotNull(receiver.address(), "Remote should have assigned the address for the dynamic receiver");
+
+            receiver.closeAsync().get(10, TimeUnit.SECONDS);
+
+            connection.closeAsync().get(10, TimeUnit.SECONDS);
+
+            peer.waitForScriptToComplete(5, TimeUnit.SECONDS);
+        }
+    }
+
+    @Test
     public void testConnectionSenderOpenHeldUntilConnectionOpenedAndRelaySupportConfirmed() throws Exception {
         try (ProtonTestServer peer = new ProtonTestServer(testServerOptions())) {
             peer.expectSASLAnonymousConnect();