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 <sru...@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 sru...@apache.org.