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