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/02/22 18:46:06 UTC
[incubator-plc4x] branch master updated: added proper assertions
for Plc4XADSProtocol Test. + Bugfix of String decoding
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
The following commit(s) were added to refs/heads/master by this push:
new 9320032 added proper assertions for Plc4XADSProtocol Test. + Bugfix of String decoding
9320032 is described below
commit 9320032defc868263b3048b0880f1104297a7b3f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Feb 22 19:46:02 2018 +0100
added proper assertions for Plc4XADSProtocol Test.
+ Bugfix of String decoding
---
.../java/ads/netty/util/LittleEndianDecoder.java | 4 +-
.../plc4x/java/ads/netty/Plc4XADSProtocolTest.java | 64 +++++++++++++++++++---
2 files changed, 59 insertions(+), 9 deletions(-)
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/util/LittleEndianDecoder.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/util/LittleEndianDecoder.java
index 8211f95..e37f2f2 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/util/LittleEndianDecoder.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/util/LittleEndianDecoder.java
@@ -42,8 +42,8 @@ public class LittleEndianDecoder {
byte byteOne = adsData[i];
if (datatype == String.class) {
StringBuilder builder = new StringBuilder();
- while (byteOne != (byte) 0x0 && i < length) {
- builder.append((char) byteOne);
+ while (adsData[i] != (byte) 0x0 && i < length) {
+ builder.append((char) adsData[i]);
i++;
}
i++; // skip terminating character
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/netty/Plc4XADSProtocolTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/netty/Plc4XADSProtocolTest.java
index 16eb05c..cee94f7 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/netty/Plc4XADSProtocolTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/netty/Plc4XADSProtocolTest.java
@@ -20,6 +20,7 @@ package org.apache.plc4x.java.ads.netty;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.plc4x.java.ads.api.commands.ADSReadResponse;
+import org.apache.plc4x.java.ads.api.commands.ADSWriteRequest;
import org.apache.plc4x.java.ads.api.commands.ADSWriteResponse;
import org.apache.plc4x.java.ads.api.commands.types.Data;
import org.apache.plc4x.java.ads.api.commands.types.Result;
@@ -30,6 +31,8 @@ import org.apache.plc4x.java.ads.api.generic.types.AMSPort;
import org.apache.plc4x.java.ads.api.generic.types.Invoke;
import org.apache.plc4x.java.ads.model.ADSAddress;
import org.apache.plc4x.java.api.messages.*;
+import org.apache.plc4x.java.api.messages.items.ReadResponseItem;
+import org.apache.plc4x.java.api.messages.items.ResponseItem;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -47,14 +50,15 @@ import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
@RunWith(Parameterized.class)
public class Plc4XADSProtocolTest {
private static final Logger LOGGER = LoggerFactory.getLogger(ADSProtocolTest.class);
+ public static final Calendar calenderInstance = Calendar.getInstance();
+
private Plc4XADSProtocol SUT;
@Parameterized.Parameter
@@ -91,17 +95,18 @@ public class Plc4XADSProtocolTest {
String.class)
.map(clazz -> {
if (clazz == Boolean.class) {
- return ImmutablePair.of(Boolean.TRUE, new byte[]{0x0});
+ return ImmutablePair.of(Boolean.TRUE, new byte[]{0x01});
} else if (clazz == Byte.class) {
- return ImmutablePair.of(Byte.valueOf("0"), new byte[]{0x0});
+ return ImmutablePair.of(Byte.valueOf("1"), new byte[]{0x1});
} else if (clazz == Short.class) {
- return ImmutablePair.of(Short.valueOf("0"), new byte[]{0x0, 0x0});
+ return ImmutablePair.of(Short.valueOf("1"), new byte[]{0x1, 0x0});
} else if (clazz == Calendar.class) {
- return ImmutablePair.of(Calendar.getInstance(), new byte[]{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0});
+ return ImmutablePair.of(calenderInstance, new byte[]{0x0, 0x0, 0x0, 0x0, 0x4, 0x3, 0x2, 0x1});
} else if (clazz == Float.class) {
+ // TODO: put a float representation on the right that is something other than 0
return ImmutablePair.of(Float.valueOf("0"), new byte[]{0x0, 0x0, 0x0, 0x0});
} else if (clazz == Integer.class) {
- return ImmutablePair.of(Integer.valueOf("0"), new byte[]{0x0, 0x0, 0x0, 0x0});
+ return ImmutablePair.of(Integer.valueOf("1"), new byte[]{0x1, 0x0, 0x0, 0x0});
} else if (clazz == String.class) {
return ImmutablePair.of(String.valueOf("Hello World!"), new byte[]{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00});
} else {
@@ -144,7 +149,28 @@ public class Plc4XADSProtocolTest {
ArrayList<Object> out = new ArrayList<>();
SUT.encode(null, plcRequestContainer, out);
assertThat(out, hasSize(1));
+ assertThat(out.get(0), instanceOf(AMSTCPPacket.class));
+ AMSTCPPacket amstcpPacket = (AMSTCPPacket) out.get(0);
LOGGER.info("{}\nHexDump:\n{}", amstcpPacket, amstcpPacket.dump());
+ if (amstcpPacket instanceof ADSWriteRequest) {
+ ADSWriteRequest adsWriteRequest = (ADSWriteRequest) amstcpPacket;
+ byte[] value = adsWriteRequest.getData().getBytes();
+ if (payloadClazzName.equals(Boolean.class.getSimpleName())) {
+ assertThat(value, equalTo(new byte[]{0x1}));
+ } else if (payloadClazzName.equals(Byte.class.getSimpleName())) {
+ assertThat(value, equalTo(new byte[]{0x1}));
+ } else if (payloadClazzName.equals(Short.class.getSimpleName())) {
+ assertThat(value, equalTo(new byte[]{0x1, 0x0}));
+ } else if (payloadClazzName.equals(Calendar.class.getSimpleName())) {
+ assertThat(value, equalTo(new byte[]{0x0}));
+ } else if (payloadClazzName.equals(Float.class.getSimpleName())) {
+ assertThat(value, equalTo(new byte[]{0x0, 0x0, 0x0, 0x0}));
+ } else if (payloadClazzName.equals(Integer.class.getSimpleName())) {
+ assertThat(value, equalTo(new byte[]{0x1, 0x0, 0x0, 0x0}));
+ } else if (payloadClazzName.equals(String.class.getSimpleName())) {
+ assertThat(value, equalTo(new byte[]{0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21, 0x00}));
+ }
+ }
}
@Test
@@ -158,6 +184,30 @@ public class Plc4XADSProtocolTest {
SUT.decode(null, amstcpPacket, out);
assertThat(out, hasSize(1));
assertThat(out.get(0), instanceOf(PlcRequestContainer.class));
+ PlcRequestContainer<?, ?> plcRequestContainer = (PlcRequestContainer) out.get(0);
+ LOGGER.info("PlcRequestContainer {}", plcRequestContainer);
+ PlcResponse plcResponse = plcRequestContainer.getResponseFuture().get();
+ ResponseItem responseItem = (ResponseItem) plcResponse.getResponseItem().get();
+ LOGGER.info("ResponseItem {}", responseItem);
+ if (amstcpPacket instanceof ADSReadResponse) {
+ ReadResponseItem readResponseItem = (ReadResponseItem) responseItem;
+ Object value = readResponseItem.getValues().get(0);
+ if (payloadClazzName.equals(Boolean.class.getSimpleName())) {
+ assertThat(value, equalTo(Boolean.TRUE));
+ } else if (payloadClazzName.equals(Byte.class.getSimpleName())) {
+ assertThat(value, equalTo(Byte.valueOf("1")));
+ } else if (payloadClazzName.equals(Short.class.getSimpleName())) {
+ assertThat(value, equalTo(Short.valueOf("1")));
+ } else if (payloadClazzName.equals(Calendar.class.getSimpleName())) {
+ assertThat(value, equalTo(calenderInstance));
+ } else if (payloadClazzName.equals(Float.class.getSimpleName())) {
+ assertThat(value, equalTo(Float.valueOf("0")));
+ } else if (payloadClazzName.equals(Integer.class.getSimpleName())) {
+ assertThat(value, equalTo(Integer.valueOf("1")));
+ } else if (payloadClazzName.equals(String.class.getSimpleName())) {
+ assertThat(value, equalTo(String.valueOf("Hello World!")));
+ }
+ }
}
private void syncInvoiceId() throws Exception {
--
To stop receiving notification emails like this one, please contact
sruehl@apache.org.