You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2021/10/25 11:28:10 UTC
[plc4x] branch feature/mspec-ng updated: fix(plc4j/codgen): fixed
s7 io test
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch feature/mspec-ng
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/feature/mspec-ng by this push:
new e786ae2 fix(plc4j/codgen): fixed s7 io test
e786ae2 is described below
commit e786ae2a8aeb7941405ab03adac1316f0487381c
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Oct 25 13:27:56 2021 +0200
fix(plc4j/codgen): fixed s7 io test
---
.../resources/templates/java/io-template.java.ftlh | 2 +
plc4j/drivers/s7/pom.xml | 5 +-
plc4j/drivers/s7/src/test/java/S7IoTest.java | 232 +++++++++++----------
3 files changed, 131 insertions(+), 108 deletions(-)
diff --git a/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh b/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh
index eb365c8..74bcacd 100644
--- a/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh
+++ b/code-generation/language-java/src/main/resources/templates/java/io-template.java.ftlh
@@ -571,7 +571,9 @@ public class ${type.name}IO implements <#if outputFlavor != "passive">MessageIO<
<#if helper.isEnumField(field)>
${helper.getWriteBufferWriteMethodCall(optionalField.name, helper.getEnumBaseTypeReference(optionalField.type), "(" + optionalField.name + ".getValue())", optionalField)};
<#else>
+ writeBuffer.pushContext("${optionalField.name}");
${complexTypeReference.name}IO.staticSerialize(writeBuffer, ${optionalField.name});
+ writeBuffer.popContext("${optionalField.name}");
</#if>
</#if>
}
diff --git a/plc4j/drivers/s7/pom.xml b/plc4j/drivers/s7/pom.xml
index 9ff95df..d1bf714 100644
--- a/plc4j/drivers/s7/pom.xml
+++ b/plc4j/drivers/s7/pom.xml
@@ -163,8 +163,9 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
+ <groupId>org.skyscreamer</groupId>
+ <artifactId>jsonassert</artifactId>
+ <version>1.5.0</version>
<scope>test</scope>
</dependency>
diff --git a/plc4j/drivers/s7/src/test/java/S7IoTest.java b/plc4j/drivers/s7/src/test/java/S7IoTest.java
index 117ed41..3749707 100644
--- a/plc4j/drivers/s7/src/test/java/S7IoTest.java
+++ b/plc4j/drivers/s7/src/test/java/S7IoTest.java
@@ -16,7 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
+
+import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationConfig;
import org.apache.plc4x.java.s7.readwrite.*;
import org.apache.plc4x.java.s7.readwrite.io.TPKTPacketIO;
import org.apache.plc4x.java.s7.readwrite.types.COTPTpduSize;
@@ -28,6 +31,8 @@ import org.apache.plc4x.java.spi.generation.WriteBufferJsonBased;
import org.apache.plc4x.java.spi.generation.WriteBufferXmlBased;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.skyscreamer.jsonassert.JSONAssert;
+import org.skyscreamer.jsonassert.JSONCompareMode;
import java.io.ByteArrayInputStream;
import java.util.Collections;
@@ -38,7 +43,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
public class S7IoTest {
@Test
- @Disabled("Needs to be ported first")
void TestS7MessageBytes() throws Exception {
String wantXml =
"<TPKTPacket>\n" +
@@ -64,43 +68,49 @@ public class S7IoTest {
" </COTPParameterTpduSize>\n" +
" </COTPParameter>\n" +
" </parameters>\n" +
- " <S7Message>\n" +
- " <protocolId dataType=\"uint\" bitLength=\"8\">50</protocolId>\n" +
- " <messageType dataType=\"uint\" bitLength=\"8\">3</messageType>\n" +
- " <reserved dataType=\"uint\" bitLength=\"16\">0</reserved>\n" +
- " <tpduReference dataType=\"uint\" bitLength=\"16\">11</tpduReference>\n" +
- " <parameterLength dataType=\"uint\" bitLength=\"16\">2</parameterLength>\n" +
- " <payloadLength dataType=\"uint\" bitLength=\"16\">6</payloadLength>\n" +
- " <S7MessageResponseData>\n" +
- " <errorClass dataType=\"uint\" bitLength=\"8\">0</errorClass>\n" +
- " <errorCode dataType=\"uint\" bitLength=\"8\">0</errorCode>\n" +
- " </S7MessageResponseData>\n" +
- " <S7Parameter>\n" +
- " <parameterType dataType=\"uint\" bitLength=\"8\">4</parameterType>\n" +
- " <S7ParameterReadVarResponse>\n" +
- " <numItems dataType=\"uint\" bitLength=\"8\">1</numItems>\n" +
- " </S7ParameterReadVarResponse>\n" +
- " </S7Parameter>\n" +
- " <S7Payload>\n" +
- " <S7PayloadReadVarResponse>\n" +
- " <items isList=\"true\">\n" +
- " <S7VarPayloadDataItem>\n" +
- " <returnCode>\n" +
- " <DataTransportErrorCode dataType=\"uint\" bitLength=\"8\" stringRepresentation=\"OK\">255</DataTransportErrorCode>\n" +
- " </returnCode>\n" +
- " <transportSize>\n" +
- " <DataTransportSize dataType=\"uint\" bitLength=\"8\" stringRepresentation=\"BIT\">3</DataTransportSize>\n" +
- " </transportSize>\n" +
- " <dataLength dataType=\"uint\" bitLength=\"16\">1</dataLength>\n" +
- " <data dataType=\"byte\" bitLength=\"8\">0x01</data>\n" +
- " <padding isList=\"true\">\n" +
- " <value dataType=\"uint\" bitLength=\"8\">0</value>\n" +
- " </padding>\n" +
- " </S7VarPayloadDataItem>\n" +
- " </items>\n" +
- " </S7PayloadReadVarResponse>\n" +
- " </S7Payload>\n" +
- " </S7Message>\n" +
+ " <payload>\n" +
+ " <S7Message>\n" +
+ " <protocolId dataType=\"uint\" bitLength=\"8\">50</protocolId>\n" +
+ " <messageType dataType=\"uint\" bitLength=\"8\">3</messageType>\n" +
+ " <reserved dataType=\"uint\" bitLength=\"16\">0</reserved>\n" +
+ " <tpduReference dataType=\"uint\" bitLength=\"16\">11</tpduReference>\n" +
+ " <parameterLength dataType=\"uint\" bitLength=\"16\">2</parameterLength>\n" +
+ " <payloadLength dataType=\"uint\" bitLength=\"16\">6</payloadLength>\n" +
+ " <S7MessageResponseData>\n" +
+ " <errorClass dataType=\"uint\" bitLength=\"8\">0</errorClass>\n" +
+ " <errorCode dataType=\"uint\" bitLength=\"8\">0</errorCode>\n" +
+ " </S7MessageResponseData>\n" +
+ " <parameter>\n" +
+ " <S7Parameter>\n" +
+ " <parameterType dataType=\"uint\" bitLength=\"8\">4</parameterType>\n" +
+ " <S7ParameterReadVarResponse>\n" +
+ " <numItems dataType=\"uint\" bitLength=\"8\">1</numItems>\n" +
+ " </S7ParameterReadVarResponse>\n" +
+ " </S7Parameter>\n" +
+ " </parameter>\n" +
+ " <payload>\n" +
+ " <S7Payload>\n" +
+ " <S7PayloadReadVarResponse>\n" +
+ " <items isList=\"true\">\n" +
+ " <S7VarPayloadDataItem>\n" +
+ " <returnCode>\n" +
+ " <DataTransportErrorCode dataType=\"uint\" bitLength=\"8\" stringRepresentation=\"OK\">255</DataTransportErrorCode>\n" +
+ " </returnCode>\n" +
+ " <transportSize>\n" +
+ " <DataTransportSize dataType=\"uint\" bitLength=\"8\" stringRepresentation=\"BIT\">3</DataTransportSize>\n" +
+ " </transportSize>\n" +
+ " <dataLength dataType=\"uint\" bitLength=\"16\">1</dataLength>\n" +
+ " <data dataType=\"byte\" bitLength=\"8\">0x01</data>\n" +
+ " <padding isList=\"true\">\n" +
+ " <value dataType=\"uint\" bitLength=\"8\">0</value>\n" +
+ " </padding>\n" +
+ " </S7VarPayloadDataItem>\n" +
+ " </items>\n" +
+ " </S7PayloadReadVarResponse>\n" +
+ " </S7Payload>\n" +
+ " </payload>\n" +
+ " </S7Message>\n" +
+ " </payload>\n" +
" </COTPPacket>\n" +
" </payload>\n" +
"</TPKTPacket>";
@@ -119,73 +129,84 @@ public class S7IoTest {
" \"tpduRef__plc4x_bitLength\": 7,\n" +
" \"tpduRef__plc4x_dataType\": \"uint\"\n" +
" },\n" +
- " \"S7Message\": {\n" +
- " \"S7MessageResponseData\": {\n" +
- " \"errorClass\": 0,\n" +
- " \"errorClass__plc4x_bitLength\": 8,\n" +
- " \"errorClass__plc4x_dataType\": \"uint\",\n" +
- " \"errorCode\": 0,\n" +
- " \"errorCode__plc4x_bitLength\": 8,\n" +
- " \"errorCode__plc4x_dataType\": \"uint\"\n" +
- " },\n" +
- " \"S7Parameter\": {\n" +
- " \"S7ParameterReadVarResponse\": {\n" +
- " \"numItems\": 1,\n" +
- " \"numItems__plc4x_bitLength\": 8,\n" +
- " \"numItems__plc4x_dataType\": \"uint\"\n" +
+ " \"payload\": {\n" +
+ " \"S7Message\": {\n" +
+ " \"S7MessageResponseData\": {\n" +
+ " \"errorClass\": 0,\n" +
+ " \"errorClass__plc4x_bitLength\": 8,\n" +
+ " \"errorClass__plc4x_dataType\": \"uint\",\n" +
+ " \"errorCode\": 0,\n" +
+ " \"errorCode__plc4x_bitLength\": 8,\n" +
+ " \"errorCode__plc4x_dataType\": \"uint\"\n" +
+ " },\n" +
+ " \"parameter\": {\n" +
+ " \"S7Parameter\": {\n" +
+ " \"S7ParameterReadVarResponse\": {\n" +
+ " \"numItems\": 1,\n" +
+ " \"numItems__plc4x_bitLength\": 8,\n" +
+ " \"numItems__plc4x_dataType\": \"uint\"\n" +
+ " },\n" +
+ " \"parameterType\": 4,\n" +
+ " \"parameterType__plc4x_bitLength\": 8,\n" +
+ " \"parameterType__plc4x_dataType\": \"uint\"\n" +
+ " }\n" +
" },\n" +
- " \"parameterType\": 4,\n" +
- " \"parameterType__plc4x_bitLength\": 8,\n" +
- " \"parameterType__plc4x_dataType\": \"uint\"\n" +
- " },\n" +
- " \"S7Payload\": {\n" +
- " \"S7PayloadReadVarResponse\": {\n" +
- " \"items\": [\n" +
- " {\n" +
- " \"S7VarPayloadDataItem\": {\n" +
- " \"data\": \"0x01\",\n" +
- " \"dataLength\": 1,\n" +
- " \"dataLength__plc4x_bitLength\": 16,\n" +
- " \"dataLength__plc4x_dataType\": \"uint\",\n" +
- " \"data__plc4x_bitLength\": 8,\n" +
- " \"data__plc4x_dataType\": \"byte\",\n" +
- " \"padding\": [" +
- " ],\n" +
- " \"returnCode\": {\n" +
- " \"DataTransportErrorCode\": 255,\n" +
- " \"DataTransportErrorCode__plc4x_bitLength\": 8,\n" +
- " \"DataTransportErrorCode__plc4x_dataType\": \"uint\",\n" +
- " \"DataTransportErrorCode__plc4x_stringRepresentation\": \"OK\"\n" +
- " },\n" +
- " \"transportSize\": {\n" +
- " \"DataTransportSize\": 3,\n" +
- " \"DataTransportSize__plc4x_bitLength\": 8,\n" +
- " \"DataTransportSize__plc4x_dataType\": \"uint\",\n" +
- " \"DataTransportSize__plc4x_stringRepresentation\": \"BIT\"\n" +
+ " \"payload\": {\n" +
+ " \"S7Payload\": {\n" +
+ " \"S7PayloadReadVarResponse\": {\n" +
+ " \"items\": [\n" +
+ " {\n" +
+ " \"S7VarPayloadDataItem\": {\n" +
+ " \"data\": \"0x01\",\n" +
+ " \"dataLength\": 1,\n" +
+ " \"dataLength__plc4x_bitLength\": 16,\n" +
+ " \"dataLength__plc4x_dataType\": \"uint\",\n" +
+ " \"data__plc4x_bitLength\": 8,\n" +
+ " \"data__plc4x_dataType\": \"byte\",\n" +
+ " \"padding\": [\n" +
+ " {\n" +
+ " \"value__plc4x_dataType\": \"uint\",\n" +
+ " \"value__plc4x_bitLength\": 8,\n" +
+ " \"\": 0\n" +
+ " }\n" +
+ " ],\n" +
+ " \"returnCode\": {\n" +
+ " \"DataTransportErrorCode\": 255,\n" +
+ " \"DataTransportErrorCode__plc4x_bitLength\": 8,\n" +
+ " \"DataTransportErrorCode__plc4x_dataType\": \"uint\",\n" +
+ " \"DataTransportErrorCode__plc4x_stringRepresentation\": \"OK\"\n" +
+ " },\n" +
+ " \"transportSize\": {\n" +
+ " \"DataTransportSize\": 3,\n" +
+ " \"DataTransportSize__plc4x_bitLength\": 8,\n" +
+ " \"DataTransportSize__plc4x_dataType\": \"uint\",\n" +
+ " \"DataTransportSize__plc4x_stringRepresentation\": \"BIT\"\n" +
+ " }\n" +
+ " }\n" +
" }\n" +
- " }\n" +
+ " ]\n" +
" }\n" +
- " ]\n" +
- " }\n" +
- " },\n" +
- " \"messageType\": 3,\n" +
- " \"messageType__plc4x_bitLength\": 8,\n" +
- " \"messageType__plc4x_dataType\": \"uint\",\n" +
- " \"parameterLength\": 2,\n" +
- " \"parameterLength__plc4x_bitLength\": 16,\n" +
- " \"parameterLength__plc4x_dataType\": \"uint\",\n" +
- " \"payloadLength\": 6,\n" +
- " \"payloadLength__plc4x_bitLength\": 16,\n" +
- " \"payloadLength__plc4x_dataType\": \"uint\",\n" +
- " \"protocolId\": 50,\n" +
- " \"protocolId__plc4x_bitLength\": 8,\n" +
- " \"protocolId__plc4x_dataType\": \"uint\",\n" +
- " \"reserved\": 0,\n" +
- " \"reserved__plc4x_bitLength\": 16,\n" +
- " \"reserved__plc4x_dataType\": \"uint\",\n" +
- " \"tpduReference\": 11,\n" +
- " \"tpduReference__plc4x_bitLength\": 16,\n" +
- " \"tpduReference__plc4x_dataType\": \"uint\"\n" +
+ " }\n" +
+ " },\n" +
+ " \"messageType\": 3,\n" +
+ " \"messageType__plc4x_bitLength\": 8,\n" +
+ " \"messageType__plc4x_dataType\": \"uint\",\n" +
+ " \"parameterLength\": 2,\n" +
+ " \"parameterLength__plc4x_bitLength\": 16,\n" +
+ " \"parameterLength__plc4x_dataType\": \"uint\",\n" +
+ " \"payloadLength\": 6,\n" +
+ " \"payloadLength__plc4x_bitLength\": 16,\n" +
+ " \"payloadLength__plc4x_dataType\": \"uint\",\n" +
+ " \"protocolId\": 50,\n" +
+ " \"protocolId__plc4x_bitLength\": 8,\n" +
+ " \"protocolId__plc4x_dataType\": \"uint\",\n" +
+ " \"reserved\": 0,\n" +
+ " \"reserved__plc4x_bitLength\": 16,\n" +
+ " \"reserved__plc4x_dataType\": \"uint\",\n" +
+ " \"tpduReference\": 11,\n" +
+ " \"tpduReference__plc4x_bitLength\": 16,\n" +
+ " \"tpduReference__plc4x_dataType\": \"uint\"\n" +
+ " }\n" +
" },\n" +
" \"headerLength\": 5,\n" +
" \"headerLength__plc4x_bitLength\": 8,\n" +
@@ -254,16 +275,15 @@ public class S7IoTest {
String gotXml = writeBufferXmlBased.getXmlString();
assertEquals(wantXml, gotXml);
ReadBufferXmlBased readBufferXmlBased = new ReadBufferXmlBased(new ByteArrayInputStream(gotXml.getBytes()));
- //TPKTPacket reReadTpktPacket = TPKTPacketIO.staticParse(readBufferXmlBased);
- //assertThat(reReadTpktPacket).usingRecursiveComparison().isEqualTo(tpktPacket);
+ TPKTPacket reReadTpktPacket = TPKTPacketIO.staticParse(readBufferXmlBased);
+ assertThat(reReadTpktPacket).usingRecursiveComparison().isEqualTo(tpktPacket);
}
// json
{
WriteBufferJsonBased writeBufferJsonBased = new WriteBufferJsonBased();
TPKTPacketIO.staticSerialize(writeBufferJsonBased, tpktPacket);
String gotJson = writeBufferJsonBased.getJsonString();
- ObjectMapper objectMapper = new ObjectMapper();
- assertEquals(objectMapper.readTree(wantJson), objectMapper.readTree(gotJson));
+ JSONAssert.assertEquals(wantJson, gotJson, JSONCompareMode.LENIENT);
ReadBufferJsonBased readBufferXmlBased = new ReadBufferJsonBased(new ByteArrayInputStream(gotJson.getBytes()));
TPKTPacket reReadTpktPacket = TPKTPacketIO.staticParse(readBufferXmlBased);
assertThat(reReadTpktPacket).usingRecursiveComparison().isEqualTo(tpktPacket);