You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2024/02/09 16:17:05 UTC
(plc4x) 02/02: fix: Got the testsuite working so far that I can now start investigating the main issue.
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch fix/enum-discriminators
in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 4740679109bf5bd227dd68a4988942cd431f183b
Author: Christofer Dutz <cd...@apache.org>
AuthorDate: Fri Feb 9 17:16:56 2024 +0100
fix: Got the testsuite working so far that I can now start investigating the main issue.
feat: Test tools now output the line and column of an element having a diff
feat: The test now outputs the line number of a test-step, if no name is provided
fix: Increased the buffer of the incoming message XML parser so we can read up to 100KB big messages
---
.../ads/discovery/readwrite/AdsDiscoveryBlock.java | 3 ++-
.../apache/plc4x/java/ads/readwrite/AmsPacket.java | 3 ++-
.../ads/src/test/resources/logback-test.xml | 2 +-
.../java/spi/generation/ReadBufferXmlBased.java | 3 ++-
.../plc4x/test/driver/internal/TestStep.java | 5 +++-
.../handlers/IncomingPlcMessageHandler.java | 7 +++---
.../migration/MessageValidatorAndMigrator.java | 6 ++++-
.../resources/protocols/ads/DriverTestsuite.xml | 28 +++++++++++-----------
8 files changed, 34 insertions(+), 23 deletions(-)
diff --git a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/discovery/readwrite/AdsDiscoveryBlock.java b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/discovery/readwrite/AdsDiscoveryBlock.java
index d0a808cc89..d95a1d0718 100644
--- a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/discovery/readwrite/AdsDiscoveryBlock.java
+++ b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/discovery/readwrite/AdsDiscoveryBlock.java
@@ -99,8 +99,9 @@ public abstract class AdsDiscoveryBlock implements Message {
boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
AdsDiscoveryBlockType blockType =
- readDiscriminatorField(
+ readDiscriminatorEnumField(
"blockType",
+ "AdsDiscoveryBlockType",
new DataReaderEnumDefault<>(
AdsDiscoveryBlockType::enumForValue, readUnsignedInt(readBuffer, 16)));
diff --git a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AmsPacket.java b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AmsPacket.java
index 465d85e45a..c5a9748a64 100644
--- a/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AmsPacket.java
+++ b/plc4j/drivers/ads/src/main/generated/org/apache/plc4x/java/ads/readwrite/AmsPacket.java
@@ -302,8 +302,9 @@ public abstract class AmsPacket implements Message {
int sourceAmsPort = readSimpleField("sourceAmsPort", readUnsignedInt(readBuffer, 16));
CommandId commandId =
- readDiscriminatorField(
+ readDiscriminatorEnumField(
"commandId",
+ "CommandId",
new DataReaderEnumDefault<>(CommandId::enumForValue, readUnsignedInt(readBuffer, 16)));
boolean initCommand =
diff --git a/plc4j/drivers/ads/src/test/resources/logback-test.xml b/plc4j/drivers/ads/src/test/resources/logback-test.xml
index 2b9cea25dc..941f1546f8 100644
--- a/plc4j/drivers/ads/src/test/resources/logback-test.xml
+++ b/plc4j/drivers/ads/src/test/resources/logback-test.xml
@@ -29,7 +29,7 @@
</encoder>
</appender>
- <root level="error">
+ <root level="warn">
<appender-ref ref="STDOUT" />
</root>
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBufferXmlBased.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBufferXmlBased.java
index 77de142a68..c700c85ce8 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBufferXmlBased.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/ReadBufferXmlBased.java
@@ -142,7 +142,8 @@ public class ReadBufferXmlBased implements ReadBuffer, BufferCommons {
@Override
public BigInteger readUnsignedBigInteger(String logicalName, int bitLength, WithReaderArgs... readerArgs) throws ParseException {
move(bitLength);
- throw new PlcRuntimeException("not implemented yet");
+ String bigIntString = decode(logicalName, rwUintKey, bitLength);
+ return new BigInteger(bigIntString);
}
@Override
diff --git a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/TestStep.java b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/TestStep.java
index f3505e99d3..d1cf0c1791 100644
--- a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/TestStep.java
+++ b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/TestStep.java
@@ -67,7 +67,10 @@ public class TestStep implements LocationAware {
public static TestStep parseTestStep(Element curElement, Synchronizer synchronizer, DriverTestsuiteConfiguration driverTestsuiteConfiguration) throws DriverTestsuiteException {
final String elementName = curElement.getName();
final StepType stepType = StepType.valueOf(elementName.toUpperCase().replace("-", "_"));
- final String stepName = curElement.attributeValue(new QName("name"));
+ String stepName = curElement.attributeValue(new QName("name"));
+ if((stepName == null) && curElement instanceof LocationAwareElement) {
+ stepName = ((LocationAwareElement) curElement).getLocation().toString();
+ }
Element parserArgumentsNode = null;
Element definitionNode = null;
for (Element element : curElement.elements()) {
diff --git a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/handlers/IncomingPlcMessageHandler.java b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/handlers/IncomingPlcMessageHandler.java
index a7dc24d0ce..d52042c8cf 100644
--- a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/handlers/IncomingPlcMessageHandler.java
+++ b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/handlers/IncomingPlcMessageHandler.java
@@ -50,9 +50,10 @@ public class IncomingPlcMessageHandler {
embeddedChannel.writeInbound(Unpooled.wrappedBuffer(data));
}
- @SuppressWarnings({"rawtypes", "unchecked"})
+ @SuppressWarnings({"rawtypes"})
public byte[] getBytesFromXml(Element referenceXml, ByteOrder byteOrder) throws DriverTestsuiteException {
- final WriteBufferByteBased writeBuffer = new WriteBufferByteBased(1024, byteOrder);
+ // TODO: Find some smart way to find out how big the buffer should be.
+ final WriteBufferByteBased writeBuffer = new WriteBufferByteBased(1024 * 100, byteOrder);
MessageInput messageInput = MessageResolver.getMessageInput(driverTestsuiteConfiguration.getOptions(), referenceXml.getName());
// Get Message and Validate
Message message = MessageValidatorAndMigrator.validateInboundMessageAndGet(messageInput, referenceXml, parserArguments);
@@ -61,7 +62,7 @@ public class IncomingPlcMessageHandler {
try {
message.serialize(writeBuffer);
final byte[] data = new byte[message.getLengthInBytes()];
- System.arraycopy(writeBuffer.getData(), 0, data, 0, writeBuffer.getPos());
+ System.arraycopy(writeBuffer.getBytes(), 0, data, 0, writeBuffer.getPos());
return data;
} catch (SerializationException e) {
throw new DriverTestsuiteException("Error serializing message", e);
diff --git a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/migration/MessageValidatorAndMigrator.java b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/migration/MessageValidatorAndMigrator.java
index 8e76a2c578..df28e89a22 100644
--- a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/migration/MessageValidatorAndMigrator.java
+++ b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/migration/MessageValidatorAndMigrator.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.plc4x.java.spi.generation.*;
+import org.apache.plc4x.test.dom4j.LocationAwareElement;
import org.apache.plc4x.test.driver.exceptions.DriverTestsuiteException;
import org.dom4j.Element;
import org.slf4j.Logger;
@@ -119,13 +120,16 @@ public class MessageValidatorAndMigrator {
"Differences were found after parsing (Use the above xml in the testsuite to disable this warning).\n" +
// Diff
"%4$s\n" +
+ // Location
+ "%6$s\n" +
// Double Border
"%1$s\n%1$s\n",
border,
centeredDiffDetectedMessage,
xmlString,
diff,
- centeredTestCaseName));
+ centeredTestCaseName,
+ ((LocationAwareElement) referenceXml).getLocation().toString()));
throw new MigrationException(xmlString);
}
return false;
diff --git a/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml b/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml
index c4ed76e1ef..011ba553f2 100644
--- a/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml
+++ b/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml
@@ -33,7 +33,7 @@
</parameter>
<parameter>
<name>sourceAmsPort</name>
- <value>48898</value>
+ <value>65534</value>
</parameter>
<parameter>
<name>targetAmsNetId</name>
@@ -41,7 +41,7 @@
</parameter>
<parameter>
<name>targetAmsPort</name>
- <value>48898</value>
+ <value>851</value>
</parameter>
</driver-parameters>
@@ -383,7 +383,7 @@
</AmsTCPPacket>
</incoming-plc-message>
<!-- Read the size of the symbol table and datatype tables -->
- <outgoing-plc-message>
+ <outgoing-plc-message name="Read 'size of symbol- and datatype table' Request">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">44</length>
@@ -436,7 +436,7 @@
</userdata>
</AmsTCPPacket>
</outgoing-plc-message>
- <incoming-plc-message>
+ <incoming-plc-message name="Read 'size of symbol- and datatype table' Response">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">64</length>
@@ -492,7 +492,7 @@
</AmsTCPPacket>
</incoming-plc-message>
<!-- Load the datatype table information -->
- <outgoing-plc-message>
+ <outgoing-plc-message name="Read 'datatype table' Request">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">44</length>
@@ -545,7 +545,7 @@
</userdata>
</AmsTCPPacket>
</outgoing-plc-message>
- <incoming-plc-message>
+ <incoming-plc-message name="Read 'datatype table' Response">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">35976</length>
@@ -601,7 +601,7 @@
</AmsTCPPacket>
</incoming-plc-message>
<!-- Read the symbol-table -->
- <outgoing-plc-message>
+ <outgoing-plc-message name="Read 'symbol table' Request">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">44</length>
@@ -654,7 +654,7 @@
</userdata>
</AmsTCPPacket>
</outgoing-plc-message>
- <incoming-plc-message>
+ <incoming-plc-message name="Read 'symbol table' Response">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">42104</length>
@@ -713,7 +713,7 @@
Subscribe to changes in the "online-version" number
(So we can detect plc programm updates while being connected)
-->
- <outgoing-plc-message>
+ <outgoing-plc-message name="Subscribe 'online-version' Request">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">72</length>
@@ -773,7 +773,7 @@
</userdata>
</AmsTCPPacket>
</outgoing-plc-message>
- <incoming-plc-message>
+ <incoming-plc-message name="Subscribe 'online-version' Response">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">40</length>
@@ -831,7 +831,7 @@
Subscribe to changes in the "offline-version" number
(So we can detect plc programm updates while being connected)
-->
- <outgoing-plc-message>
+ <outgoing-plc-message name="Subscribe 'offline-version' Request">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">72</length>
@@ -891,7 +891,7 @@
</userdata>
</AmsTCPPacket>
</outgoing-plc-message>
- <incoming-plc-message>
+ <incoming-plc-message name="Subscribe 'offline-version' Response">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">40</length>
@@ -950,7 +950,7 @@
(As we've also just manually read these, they will match the ones we read and
no action will be taken by the driver)
-->
- <incoming-plc-message>
+ <incoming-plc-message name="Subscription 'offline- and online-version' Notification">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">73</length>
@@ -1088,7 +1088,7 @@
</userdata>
</AmsTCPPacket>
</outgoing-plc-message>
- <incoming-plc-message>
+ <incoming-plc-message name="Receive Read Response">
<AmsTCPPacket>
<reserved dataType="uint" bitLength="16">0</reserved>
<length dataType="uint" bitLength="32">376</length>