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>