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>