This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch fix/cdutz/reenable-golang-driver-testsuites
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to 
refs/heads/fix/cdutz/reenable-golang-driver-testsuites by this push:
     new 199738041c refactor(plc4j): Continued streamlining the way Api types 
are parsed/serialized
199738041c is described below

commit 199738041c7b493bb338b9e20962027f5ef9d225
Author: Christofer Dutz <[email protected]>
AuthorDate: Mon Feb 13 11:13:09 2023 +0100

    refactor(plc4j): Continued streamlining the way Api types are 
parsed/serialized
---
 .../testing/protocols/eip/DriverTestsuite.xml      |  2 +-
 .../protocols/modbus/tcp/DriverTestsuite.xml       | 16 ++++---
 plc4go/internal/eip/Tag.go                         |  2 +-
 plc4go/pkg/api/model/plc_response_code.go          |  2 +-
 plc4go/spi/model/DefaultPlcWriteRequest.go         | 52 ++++------------------
 plc4go/spi/model/DefaultPlcWriteResponse.go        | 37 +++++----------
 .../java/spi/messages/DefaultPlcWriteRequest.java  | 29 ++++++------
 .../java/spi/messages/DefaultPlcWriteResponse.java |  4 +-
 .../eip/src/main/resources/protocols/eip/eip.mspec | 22 ++++-----
 .../protocols/modbus/tcp/DriverTestsuite.xml       | 16 ++++---
 10 files changed, 68 insertions(+), 114 deletions(-)

diff --git a/plc4go/assets/testing/protocols/eip/DriverTestsuite.xml 
b/plc4go/assets/testing/protocols/eip/DriverTestsuite.xml
index f0603c00a6..98f44f1298 100644
--- a/plc4go/assets/testing/protocols/eip/DriverTestsuite.xml
+++ b/plc4go/assets/testing/protocols/eip/DriverTestsuite.xml
@@ -52,7 +52,7 @@
         </EipConnectionRequest>
       </EipPacket>
     </outgoing-plc-message>
-    <!-- The PLC will send the connection response with a sender context and 
session handle-->
+    <!-- The PLC will send the connection response with a sender context and 
session handle -->
     <incoming-plc-message name="Receive connection response">
       <EipPacket>
         <command dataType="uint" bitLength="16">101</command>
diff --git a/plc4go/assets/testing/protocols/modbus/tcp/DriverTestsuite.xml 
b/plc4go/assets/testing/protocols/modbus/tcp/DriverTestsuite.xml
index a6d7fe51a9..4266eef72b 100644
--- a/plc4go/assets/testing/protocols/modbus/tcp/DriverTestsuite.xml
+++ b/plc4go/assets/testing/protocols/modbus/tcp/DriverTestsuite.xml
@@ -432,13 +432,13 @@
                   <numberOfElements dataType="uint" 
bitLength="16">1</numberOfElements>
                   <dataType dataType="string" bitLength="32" 
encoding="UTF-8">REAL</dataType>
                 </ModbusTagHoldingRegister>
-                <value dataType="string" bitLength="72" 
encoding="UTF-8">3.1415927</value>
+                <PlcREAL dataType="float" 
bitLength="32">3.1415927410125732</PlcREAL>
               </hurz>
             </tags>
           </PlcWriteRequest>
-          <tags>
+          <responseCodes>
             <hurz dataType="string" bitLength="16" encoding="UTF-8">OK</hurz>
-          </tags>
+          </responseCodes>
         </PlcWriteResponse>
       </api-response>
     </steps>
@@ -519,14 +519,16 @@
                   <numberOfElements dataType="uint" 
bitLength="16">2</numberOfElements>
                   <dataType dataType="string" bitLength="32" 
encoding="UTF-8">REAL</dataType>
                 </ModbusTagHoldingRegister>
-                <value dataType="string" bitLength="72" 
encoding="UTF-8">3.1415927</value>
-                <value dataType="string" bitLength="72" 
encoding="UTF-8">3.1415927</value>
+                <PlcList>
+                  <PlcREAL dataType="float" 
bitLength="32">3.1415927410125732</PlcREAL>
+                  <PlcREAL dataType="float" 
bitLength="32">3.1415927410125732</PlcREAL>
+                </PlcList>
               </hurz>
             </tags>
           </PlcWriteRequest>
-          <tags>
+          <responseCodes>
             <hurz dataType="string" bitLength="16" encoding="UTF-8">OK</hurz>
-          </tags>
+          </responseCodes>
         </PlcWriteResponse>
       </api-response>
     </steps>
diff --git a/plc4go/internal/eip/Tag.go b/plc4go/internal/eip/Tag.go
index 9c8f34f0fd..6cb16fe76e 100644
--- a/plc4go/internal/eip/Tag.go
+++ b/plc4go/internal/eip/Tag.go
@@ -79,7 +79,7 @@ func (m plcTag) GetElementNb() uint16 {
 }
 
 func (m plcTag) Serialize() ([]byte, error) {
-       wb := 
utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.BigEndian))
+       wb := 
utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian))
        if err := m.SerializeWithWriteBuffer(wb); err != nil {
                return nil, err
        }
diff --git a/plc4go/pkg/api/model/plc_response_code.go 
b/plc4go/pkg/api/model/plc_response_code.go
index 4febb6559f..989a0355ff 100644
--- a/plc4go/pkg/api/model/plc_response_code.go
+++ b/plc4go/pkg/api/model/plc_response_code.go
@@ -86,5 +86,5 @@ func (m PlcResponseCode) Serialize() ([]byte, error) {
 }
 
 func (m PlcResponseCode) SerializeWithWriteBuffer(ctx context.Context, 
writeBuffer utils.WriteBuffer) error {
-       return writeBuffer.WriteUint8("AlarmType", 8, uint8(m), 
utils.WithAdditionalStringRepresentation(m.GetName()))
+       return writeBuffer.WriteUint8("ResponseCode", 8, uint8(m), 
utils.WithAdditionalStringRepresentation(m.GetName()))
 }
diff --git a/plc4go/spi/model/DefaultPlcWriteRequest.go 
b/plc4go/spi/model/DefaultPlcWriteRequest.go
index 3547da5e97..aec022f40c 100644
--- a/plc4go/spi/model/DefaultPlcWriteRequest.go
+++ b/plc4go/spi/model/DefaultPlcWriteRequest.go
@@ -201,14 +201,11 @@ func (d *DefaultPlcWriteRequest) 
SerializeWithWriteBuffer(ctx context.Context, w
        if err := writeBuffer.PushContext("PlcWriteRequest"); err != nil {
                return err
        }
-       if err := d.DefaultPlcTagRequest.SerializeWithWriteBuffer(ctx, 
writeBuffer); err != nil {
-               return err
-       }
-       if err := writeBuffer.PushContext("values", 
utils.WithRenderAsList(true)); err != nil {
+
+       if err := writeBuffer.PushContext("tags"); err != nil {
                return err
        }
-       for name, elem := range d.values {
-
+       for name, elem := range d.tags {
                var elem interface{} = elem
                if serializable, ok := elem.(utils.Serializable); ok {
                        if err := writeBuffer.PushContext(name); err != nil {
@@ -217,6 +214,10 @@ func (d *DefaultPlcWriteRequest) 
SerializeWithWriteBuffer(ctx context.Context, w
                        if err := serializable.SerializeWithWriteBuffer(ctx, 
writeBuffer); err != nil {
                                return err
                        }
+                       var value interface{} = d.values[name]
+                       if err := 
value.(utils.Serializable).SerializeWithWriteBuffer(ctx, writeBuffer); err != 
nil {
+                               return err
+                       }
                        if err := writeBuffer.PopContext(name); err != nil {
                                return err
                        }
@@ -227,47 +228,10 @@ func (d *DefaultPlcWriteRequest) 
SerializeWithWriteBuffer(ctx context.Context, w
                        }
                }
        }
-       if err := writeBuffer.PopContext("values", 
utils.WithRenderAsList(true)); err != nil {
+       if err := writeBuffer.PopContext("tags"); err != nil {
                return err
        }
 
-       if d.writer != nil {
-               if serializableField, ok := d.writer.(utils.Serializable); ok {
-                       if err := writeBuffer.PushContext("writer"); err != nil 
{
-                               return err
-                       }
-                       if err := 
serializableField.SerializeWithWriteBuffer(ctx, writeBuffer); err != nil {
-                               return err
-                       }
-                       if err := writeBuffer.PopContext("writer"); err != nil {
-                               return err
-                       }
-               } else {
-                       stringValue := fmt.Sprintf("%v", d.writer)
-                       if err := writeBuffer.WriteString("writer", 
uint32(len(stringValue)*8), "UTF-8", stringValue); err != nil {
-                               return err
-                       }
-               }
-       }
-
-       if d.writeRequestInterceptor != nil {
-               if serializableField, ok := 
d.writeRequestInterceptor.(utils.Serializable); ok {
-                       if err := 
writeBuffer.PushContext("writeRequestInterceptor"); err != nil {
-                               return err
-                       }
-                       if err := 
serializableField.SerializeWithWriteBuffer(ctx, writeBuffer); err != nil {
-                               return err
-                       }
-                       if err := 
writeBuffer.PopContext("writeRequestInterceptor"); err != nil {
-                               return err
-                       }
-               } else {
-                       stringValue := fmt.Sprintf("%v", 
d.writeRequestInterceptor)
-                       if err := 
writeBuffer.WriteString("writeRequestInterceptor", uint32(len(stringValue)*8), 
"UTF-8", stringValue); err != nil {
-                               return err
-                       }
-               }
-       }
        if err := writeBuffer.PopContext("PlcWriteRequest"); err != nil {
                return err
        }
diff --git a/plc4go/spi/model/DefaultPlcWriteResponse.go 
b/plc4go/spi/model/DefaultPlcWriteResponse.go
index 2c53cabe2f..5f3df57479 100644
--- a/plc4go/spi/model/DefaultPlcWriteResponse.go
+++ b/plc4go/spi/model/DefaultPlcWriteResponse.go
@@ -41,23 +41,23 @@ func NewDefaultPlcWriteResponse(request 
model.PlcWriteRequest, responseCodes map
        }
 }
 
-func (m *DefaultPlcWriteResponse) GetTagNames() []string {
+func (d *DefaultPlcWriteResponse) GetTagNames() []string {
        var tagNames []string
        // We take the tag names from the request to keep order as map is not 
ordered
-       for _, name := range m.request.GetTagNames() {
-               if _, ok := m.responseCodes[name]; ok {
+       for _, name := range d.request.GetTagNames() {
+               if _, ok := d.responseCodes[name]; ok {
                        tagNames = append(tagNames, name)
                }
        }
        return tagNames
 }
 
-func (m *DefaultPlcWriteResponse) GetRequest() model.PlcWriteRequest {
-       return m.request
+func (d *DefaultPlcWriteResponse) GetRequest() model.PlcWriteRequest {
+       return d.request
 }
 
-func (m *DefaultPlcWriteResponse) GetResponseCode(name string) 
model.PlcResponseCode {
-       return m.responseCodes[name]
+func (d *DefaultPlcWriteResponse) GetResponseCode(name string) 
model.PlcResponseCode {
+       return d.responseCodes[name]
 }
 
 func (d *DefaultPlcWriteResponse) Serialize() ([]byte, error) {
@@ -88,30 +88,17 @@ func (d *DefaultPlcWriteResponse) 
SerializeWithWriteBuffer(ctx context.Context,
                        }
                }
        }
-       if err := writeBuffer.PushContext("responseCodes", 
utils.WithRenderAsList(true)); err != nil {
+       if err := writeBuffer.PushContext("responseCodes"); err != nil {
                return err
        }
        for name, elem := range d.responseCodes {
-
                var elem interface{} = elem
-               if serializable, ok := elem.(utils.Serializable); ok {
-                       if err := writeBuffer.PushContext(name); err != nil {
-                               return err
-                       }
-                       if err := serializable.SerializeWithWriteBuffer(ctx, 
writeBuffer); err != nil {
-                               return err
-                       }
-                       if err := writeBuffer.PopContext(name); err != nil {
-                               return err
-                       }
-               } else {
-                       elemAsString := fmt.Sprintf("%v", elem)
-                       if err := writeBuffer.WriteString(name, 
uint32(len(elemAsString)*8), "UTF-8", elemAsString); err != nil {
-                               return err
-                       }
+               elemAsString := fmt.Sprintf("%v", elem)
+               if err := writeBuffer.WriteString(name, 
uint32(len(elemAsString)*8), "UTF-8", elemAsString); err != nil {
+                       return err
                }
        }
-       if err := writeBuffer.PopContext("responseCodes", 
utils.WithRenderAsList(true)); err != nil {
+       if err := writeBuffer.PopContext("responseCodes"); err != nil {
                return err
        }
        if err := writeBuffer.PopContext("PlcWriteResponse"); err != nil {
diff --git 
a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
 
b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
index 4f93b563b3..f5e9adfe97 100644
--- 
a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
+++ 
b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
@@ -115,24 +115,11 @@ public class DefaultPlcWriteRequest implements 
PlcWriteRequest, Serializable {
             writeBuffer.pushContext(tagName);
             PlcTag tag = tagValueItem.getTag();
             if (!(tag instanceof Serializable)) {
-                throw new RuntimeException("Error serializing. Tag doesn't 
implement XmlSerializable");
+                throw new RuntimeException("Error serializing. Tag doesn't 
implement Serializable");
             }
             ((Serializable) tag).serialize(writeBuffer);
             final PlcValue value = tagValueItem.getValue();
-            if (value instanceof PlcList) {
-                PlcList list = (PlcList) value;
-                for (PlcValue plcValue : list.getList()) {
-                    String plcValueString = plcValue.getString();
-                    writeBuffer.writeString("value",
-                        plcValueString.getBytes(StandardCharsets.UTF_8).length 
* 8,
-                        plcValueString, 
WithOption.WithEncoding(StandardCharsets.UTF_8.name()));
-                }
-            } else {
-                String plcValueString = value.getString();
-                writeBuffer.writeString("value",
-                    plcValueString.getBytes(StandardCharsets.UTF_8).length * 8,
-                    plcValueString, 
WithOption.WithEncoding(StandardCharsets.UTF_8.name()));
-            }
+            serializePlcValue(value, writeBuffer);
             writeBuffer.popContext(tagName);
         }
         writeBuffer.popContext("tags");
@@ -140,6 +127,18 @@ public class DefaultPlcWriteRequest implements 
PlcWriteRequest, Serializable {
         writeBuffer.popContext("PlcWriteRequest");
     }
 
+    protected void serializePlcValue(PlcValue plcValue, WriteBuffer 
writeBuffer) throws SerializationException {
+        if(plcValue instanceof Serializable) {
+            Serializable serializable = (Serializable) plcValue;
+            serializable.serialize(writeBuffer);
+        } else {
+            String plcValueString = plcValue.getString();
+            writeBuffer.writeString("value",
+                plcValueString.getBytes(StandardCharsets.UTF_8).length * 8,
+                plcValueString, 
WithOption.WithEncoding(StandardCharsets.UTF_8.name()));
+        }
+    }
+
     public static class Builder implements PlcWriteRequest.Builder {
 
         private final PlcWriter writer;
diff --git 
a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
 
b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
index 27e8ba4c9f..66503cda01 100644
--- 
a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
+++ 
b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
@@ -69,7 +69,7 @@ public class DefaultPlcWriteResponse implements 
PlcWriteResponse, Serializable {
         if (request instanceof Serializable) {
             ((Serializable) request).serialize(writeBuffer);
         }
-        writeBuffer.pushContext("tags");
+        writeBuffer.pushContext("responseCodes");
         for (Map.Entry<String, PlcResponseCode> tagEntry : 
responseCodes.entrySet()) {
             String tagName = tagEntry.getKey();
             final PlcResponseCode tagResponseCode = tagEntry.getValue();
@@ -78,7 +78,7 @@ public class DefaultPlcWriteResponse implements 
PlcWriteResponse, Serializable {
                 result.getBytes(StandardCharsets.UTF_8).length * 8,
                 result, 
WithOption.WithEncoding(StandardCharsets.UTF_8.name()));
         }
-        writeBuffer.popContext("tags");
+        writeBuffer.popContext("responseCodes");
 
         writeBuffer.popContext("PlcWriteResponse");
     }
diff --git a/protocols/eip/src/main/resources/protocols/eip/eip.mspec 
b/protocols/eip/src/main/resources/protocols/eip/eip.mspec
index 37e4369d0c..297b6e06e1 100644
--- a/protocols/eip/src/main/resources/protocols/eip/eip.mspec
+++ b/protocols/eip/src/main/resources/protocols/eip/eip.mspec
@@ -30,18 +30,18 @@
     [array         uint 8  senderContext count '8']
     [simple        uint 32 options]
     [typeSwitch command
-            ['0x0065' EipConnectionRequest
-                [const  uint    16   protocolVersion   0x01]
-                [const  uint    16   flags             0x00]
-            ]
-            ['0x0066' EipDisconnectRequest
-            ]
-            ['0x006F' CipRRData(uint 16 packetLength)
-                [reserved  uint    32    '0x00000000']
-                [reserved  uint    16    '0x0000']
-                [simple    CipExchange('packetLength - 6')   exchange]
-            ]
+        ['0x0065' EipConnectionRequest
+            [const  uint    16   protocolVersion   0x01]
+            [const  uint    16   flags             0x00]
         ]
+        ['0x0066' EipDisconnectRequest
+        ]
+        ['0x006F' CipRRData(uint 16 packetLength)
+            [reserved  uint    32    '0x00000000']
+            [reserved  uint    16    '0x0000']
+            [simple    CipExchange('packetLength - 6')   exchange]
+        ]
+    ]
 ]
 
 [type  CipExchange (uint 16 exchangeLen)  //We pass then length down to evey 
sub-type to be able to provide the remaining data size
diff --git 
a/protocols/modbus/src/test/resources/protocols/modbus/tcp/DriverTestsuite.xml 
b/protocols/modbus/src/test/resources/protocols/modbus/tcp/DriverTestsuite.xml
index a6d7fe51a9..4266eef72b 100644
--- 
a/protocols/modbus/src/test/resources/protocols/modbus/tcp/DriverTestsuite.xml
+++ 
b/protocols/modbus/src/test/resources/protocols/modbus/tcp/DriverTestsuite.xml
@@ -432,13 +432,13 @@
                   <numberOfElements dataType="uint" 
bitLength="16">1</numberOfElements>
                   <dataType dataType="string" bitLength="32" 
encoding="UTF-8">REAL</dataType>
                 </ModbusTagHoldingRegister>
-                <value dataType="string" bitLength="72" 
encoding="UTF-8">3.1415927</value>
+                <PlcREAL dataType="float" 
bitLength="32">3.1415927410125732</PlcREAL>
               </hurz>
             </tags>
           </PlcWriteRequest>
-          <tags>
+          <responseCodes>
             <hurz dataType="string" bitLength="16" encoding="UTF-8">OK</hurz>
-          </tags>
+          </responseCodes>
         </PlcWriteResponse>
       </api-response>
     </steps>
@@ -519,14 +519,16 @@
                   <numberOfElements dataType="uint" 
bitLength="16">2</numberOfElements>
                   <dataType dataType="string" bitLength="32" 
encoding="UTF-8">REAL</dataType>
                 </ModbusTagHoldingRegister>
-                <value dataType="string" bitLength="72" 
encoding="UTF-8">3.1415927</value>
-                <value dataType="string" bitLength="72" 
encoding="UTF-8">3.1415927</value>
+                <PlcList>
+                  <PlcREAL dataType="float" 
bitLength="32">3.1415927410125732</PlcREAL>
+                  <PlcREAL dataType="float" 
bitLength="32">3.1415927410125732</PlcREAL>
+                </PlcList>
               </hurz>
             </tags>
           </PlcWriteRequest>
-          <tags>
+          <responseCodes>
             <hurz dataType="string" bitLength="16" encoding="UTF-8">OK</hurz>
-          </tags>
+          </responseCodes>
         </PlcWriteResponse>
       </api-response>
     </steps>

Reply via email to