You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/09/28 10:32:06 UTC

[incubator-plc4x] 04/05: [General] SingleItemToSingleRequestProtocol added some guards against unknown types and added TODO regarding subscriptions

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit 5507a0580278666ef92fe6acceb9ccbe2e21247b
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Sep 28 12:26:56 2018 +0200

    [General] SingleItemToSingleRequestProtocol added some guards against
    unknown types and added TODO regarding subscriptions
---
 .../SingleItemToSingleRequestProtocol.java         | 11 ++++---
 .../SingleItemToSingleRequestProtocolTest.java     | 36 +++++++++++++++++++---
 2 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/protocol/SingleItemToSingleRequestProtocol.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/protocol/SingleItemToSingleRequestProtocol.java
index 3eaad6f..36fadfe 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/protocol/SingleItemToSingleRequestProtocol.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/protocol/SingleItemToSingleRequestProtocol.java
@@ -26,7 +26,7 @@ import io.netty.util.concurrent.Future;
 import io.netty.util.concurrent.PromiseCombiner;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.commons.lang3.tuple.Triple;
-import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.api.exceptions.PlcProtocolException;
 import org.apache.plc4x.java.api.exceptions.PlcTimeoutException;
 import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
@@ -199,7 +199,8 @@ public class SingleItemToSingleRequestProtocol extends ChannelDuplexHandler {
 
                 plcResponse = new DefaultPlcWriteResponse(internalPlcWriteRequest, values);
             } else {
-                throw new PlcRuntimeException("Unknown type detected " + originalPlcRequestContainer.getRequest());
+                errored(currentTdpu, new PlcProtocolException("Unknown type detected " + originalPlcRequestContainer.getRequest().getClass()), originalResponseFuture);
+                return;
             }
             responsesToBeDelivered.remove(originalPlcRequestContainer);
             containerCorrelationIdMap.remove(originalPlcRequestContainer);
@@ -284,8 +285,7 @@ public class SingleItemToSingleRequestProtocol extends ChannelDuplexHandler {
                         }
                         promiseCombiner.add((Future) subPromise);
                     });
-                }
-                if (internalPlcFieldRequest instanceof InternalPlcWriteRequest) {
+                } else if (internalPlcFieldRequest instanceof InternalPlcWriteRequest) {
                     InternalPlcWriteRequest internalPlcWriteRequest = (InternalPlcWriteRequest) internalPlcFieldRequest;
                     internalPlcWriteRequest.getNamedFieldTriples().forEach(fieldItemTriple -> {
                         ChannelPromise subPromise = new DefaultChannelPromise(promise.channel());
@@ -308,6 +308,9 @@ public class SingleItemToSingleRequestProtocol extends ChannelDuplexHandler {
                         }
                         promiseCombiner.add((Future) subPromise);
                     });
+                    // TODO: add sub/unsub
+                } else {
+                    throw new PlcProtocolException("Unmapped request type " + request.getClass());
                 }
             } else {
                 ChannelPromise subPromise = new DefaultChannelPromise(promise.channel());
diff --git a/plc4j/protocols/driver-bases/base/src/test/java/org/apache/plc4x/java/base/protocol/SingleItemToSingleRequestProtocolTest.java b/plc4j/protocols/driver-bases/base/src/test/java/org/apache/plc4x/java/base/protocol/SingleItemToSingleRequestProtocolTest.java
index a75a86e..c6bec89 100644
--- a/plc4j/protocols/driver-bases/base/src/test/java/org/apache/plc4x/java/base/protocol/SingleItemToSingleRequestProtocolTest.java
+++ b/plc4j/protocols/driver-bases/base/src/test/java/org/apache/plc4x/java/base/protocol/SingleItemToSingleRequestProtocolTest.java
@@ -29,6 +29,7 @@ import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.base.messages.*;
 import org.apache.plc4x.java.base.messages.items.FieldItem;
+import org.apache.plc4x.java.base.model.InternalPlcSubscriptionHandle;
 import org.assertj.core.api.WithAssertions;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
@@ -38,10 +39,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.*;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -375,6 +373,16 @@ class SingleItemToSingleRequestProtocolTest implements WithAssertions {
         }
 
         @Test
+        void subscribe() throws Exception {
+            // TODO: implement once available
+        }
+
+        @Test
+        void unsubcribe() throws Exception {
+            // TODO: implement once available
+        }
+
+        @Test
         void trySendingMessages() throws Exception {
             PendingWriteQueue queue = (PendingWriteQueue) FieldUtils.getField(SUT.getClass(), "queue", true).get(SUT);
             assertThat(queue.size()).isLessThanOrEqualTo(0);
@@ -410,4 +418,24 @@ class SingleItemToSingleRequestProtocolTest implements WithAssertions {
             return new TestDefaultPlcWriteRequest(fields);
         }
     }
+
+    private static class TestDefaultPlcSubscriptionRequest extends DefaultPlcSubscriptionRequest {
+
+        private static TestDefaultPlcSubscriptionRequest build() {
+            // TODO: implement me once available
+            return new TestDefaultPlcSubscriptionRequest();
+        }
+    }
+
+    private static class TestDefaultPlcUnsubscriptionRequest extends DefaultPlcUnsubscriptionRequest {
+
+        private TestDefaultPlcUnsubscriptionRequest(Collection<? extends InternalPlcSubscriptionHandle> internalPlcSubscriptionHandles) {
+            super(internalPlcSubscriptionHandles);
+        }
+
+        private static TestDefaultPlcUnsubscriptionRequest build() {
+            // TODO: implement me once available
+            return new TestDefaultPlcUnsubscriptionRequest(Collections.emptyList());
+        }
+    }
 }
\ No newline at end of file