This is an automated email from the ASF dual-hosted git repository. hutcheb pushed a commit to branch feat/plc4py/test_runner in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit bc0ce50f0cbf7400cb4c20f5988bd1195f146901 Author: hutcheb <[email protected]> AuthorDate: Thu Aug 22 06:15:27 2024 +0800 feat(plc4py): start looking at implementing actual test --- .../utils/ParserSerializerTestSuiteRunner.py | 21 +- plc4py/tests/unit/plc4py/utils/TestSuiteTest.py | 2 +- .../utils/resources/ParserSerializerTestsuite.xml | 258 +++++++++++++++++++++ 3 files changed, 262 insertions(+), 19 deletions(-) diff --git a/plc4py/plc4py/utils/ParserSerializerTestSuiteRunner.py b/plc4py/plc4py/utils/ParserSerializerTestSuiteRunner.py index 83b109b4bb..afd5e485c6 100644 --- a/plc4py/plc4py/utils/ParserSerializerTestSuiteRunner.py +++ b/plc4py/plc4py/utils/ParserSerializerTestSuiteRunner.py @@ -46,34 +46,19 @@ class ParserSerializerTestsuiteRunner(XmlTestSuiteLoader): if not test_case.name in self.ignored_test_cases: test_suite = ParserSerializerTestCase() test_suite.add_test_case(test_case) - test_suite.name = test_suite_xml.name + " - " + test_case.name dynamic_tests.append(test_suite) - + logger.info("Found %s testcases.", len(test_suite_xml.testcase)) return dynamic_tests def run( self, test_suite: ParserSerializerTestSuite, test_case: ParserSerializerTestCase ) -> Iterator[unittest.TestResult]: + logger.info("Running testcases %s", test_case.name) + test_case_raw = test_case.test_case.raw return self.test_suite_document_xml is not None - -# # -# List<Element> testcasesXml = testsuiteXml.elements(new QName("testcase")); -# List<Testcase> testcases = new ArrayList<>(testcasesXml.size()); -# for (Element testcaseXml : testcasesXml) { -# -# LOGGER.info(String.format("Found %d testcases.", testcases.size())); -# return new ParserSerializerTestsuite(testsuiteName, testcases, byteOrder, options); -# } catch (DocumentException e) { -# throw new ParserSerializerTestsuiteException("Error parsing testsuite xml", e); -# } catch (DecoderException e) { -# throw new ParserSerializerTestsuiteException("Error parsing testcase raw data", e); -# } -# } # -# private void run(ParserSerializerTestsuite testSuite, Testcase testcase) throws ParserSerializerTestsuiteException { -# LOGGER.info("Running testcase {}", testcase); # byte[] testcaseRaw = testcase.getRaw(); # if (LOGGER.isDebugEnabled()) # LOGGER.debug("\n{}", AsciiBoxWriter.DEFAULT.boxString("Testcase raw input", org.apache.plc4x.java.spi.utils.hex.Hex.dump(testcaseRaw), 0)); diff --git a/plc4py/tests/unit/plc4py/utils/TestSuiteTest.py b/plc4py/tests/unit/plc4py/utils/TestSuiteTest.py index 7bc6c945e6..f52b524aa3 100644 --- a/plc4py/tests/unit/plc4py/utils/TestSuiteTest.py +++ b/plc4py/tests/unit/plc4py/utils/TestSuiteTest.py @@ -27,7 +27,7 @@ from utils.XmlTestSuiteLoader import XmlTestSuiteLoader, ParserSerializerTestSui def pytest_generate_tests(metafunc): xml_loader = ParserSerializerTestsuiteRunner( - os.path.join(os.path.dirname(__file__), 'resources', "DriverTestSuite.xml")) + os.path.join(os.path.dirname(__file__), 'resources', "ParserSerializerTestsuite.xml")) test_suites = xml_loader.test_suite_tests diff --git a/plc4py/tests/unit/plc4py/utils/resources/ParserSerializerTestsuite.xml b/plc4py/tests/unit/plc4py/utils/resources/ParserSerializerTestsuite.xml new file mode 100644 index 0000000000..3e8a990e35 --- /dev/null +++ b/plc4py/tests/unit/plc4py/utils/resources/ParserSerializerTestsuite.xml @@ -0,0 +1,258 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + --> +<test:testsuite xmlns:test="https://plc4x.apache.org/schemas/parser-serializer-testsuite.xsd" + byteOrder="BIG_ENDIAN"> + + <name>Modbus</name> + + <protocolName>modbus</protocolName> + <outputFlavor>read-write</outputFlavor> + + <testcase> + <name>Read Input Registers Request</name> + <raw>000000000006ff0408d20002</raw> + <root-type>ModbusADU</root-type> + <parser-arguments> + <driverType>MODBUS_TCP</driverType> + <response>false</response> + </parser-arguments> + <xml> + <ModbusADU> + <ModbusTcpADU> + <transactionIdentifier dataType="uint" bitLength="16">0</transactionIdentifier> + <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier> + <length dataType="uint" bitLength="16">6</length> + <unitIdentifier dataType="uint" bitLength="8">255</unitIdentifier> + <pdu> + <ModbusPDU> + <errorFlag dataType="bit" bitLength="1">false</errorFlag> + <functionFlag dataType="uint" bitLength="7">4</functionFlag> + <ModbusPDUReadInputRegistersRequest> + <startingAddress dataType="uint" bitLength="16">2258</startingAddress> + <quantity dataType="uint" bitLength="16">2</quantity> + </ModbusPDUReadInputRegistersRequest> + </ModbusPDU> + </pdu> + </ModbusTcpADU> + </ModbusADU> + </xml> + </testcase> + + <testcase> + <name>Read Input Registers Response</name> + <raw> + 7cfe000000c9ff04c600000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000004000000000000000000000000000001db000001d600004a380000000000000000000000000000000000000000000000000000000000006461696d006e0000000000000000000000000000303100300000000000000000000000000000000000000000000000000000000000000000000000000000 + </raw> + <root-type>ModbusADU</root-type> + <parser-arguments> + <driverType>MODBUS_TCP</driverType> + <response>true</response> + </parser-arguments> + <xml> + <ModbusADU> + <ModbusTcpADU> + <transactionIdentifier dataType="uint" bitLength="16">31998</transactionIdentifier> + <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier> + <length dataType="uint" bitLength="16">201</length> + <unitIdentifier dataType="uint" bitLength="8">255</unitIdentifier> + <pdu> + <ModbusPDU> + <errorFlag dataType="bit" bitLength="1">false</errorFlag> + <functionFlag dataType="uint" bitLength="7">4</functionFlag> + <ModbusPDUReadInputRegistersResponse> + <byteCount dataType="uint" bitLength="8">198</byteCount> + <value dataType="byte" bitLength="1584">0x00000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000004000000000000000000000000000001db000001d600004a380000000000000000000000000000000000000000000000000000000000006461696d006e0000000000000000000000000000303100300000000000000000000000000000000000000000000000000000000000000000000000000000</value> + </ModbusPDUReadInputRegistersResponse> + </ModbusPDU> + </pdu> + </ModbusTcpADU> + </ModbusADU> + </xml> + </testcase> + + <testcase> + <name>Read Extended Registers Request Split File Record</name> + <raw>000a0000001101140e060003270e000206000400000008</raw> + <root-type>ModbusADU</root-type> + <parser-arguments> + <driverType>MODBUS_TCP</driverType> + <response>false</response> + </parser-arguments> + <xml> + <ModbusADU> + <ModbusTcpADU> + <transactionIdentifier dataType="uint" bitLength="16">10</transactionIdentifier> + <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier> + <length dataType="uint" bitLength="16">17</length> + <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier> + <pdu> + <ModbusPDU> + <errorFlag dataType="bit" bitLength="1">false</errorFlag> + <functionFlag dataType="uint" bitLength="7">20</functionFlag> + <ModbusPDUReadFileRecordRequest> + <byteCount dataType="uint" bitLength="8">14</byteCount> + <items isList="true"> + <ModbusPDUReadFileRecordRequestItem> + <referenceType dataType="uint" bitLength="8">6</referenceType> + <fileNumber dataType="uint" bitLength="16">3</fileNumber> + <recordNumber dataType="uint" bitLength="16">9998</recordNumber> + <recordLength dataType="uint" bitLength="16">2</recordLength> + </ModbusPDUReadFileRecordRequestItem> + <ModbusPDUReadFileRecordRequestItem> + <referenceType dataType="uint" bitLength="8">6</referenceType> + <fileNumber dataType="uint" bitLength="16">4</fileNumber> + <recordNumber dataType="uint" bitLength="16">0</recordNumber> + <recordLength dataType="uint" bitLength="16">8</recordLength> + </ModbusPDUReadFileRecordRequestItem> + </items> + </ModbusPDUReadFileRecordRequest> + </ModbusPDU> + </pdu> + </ModbusTcpADU> + </ModbusADU> + </xml> + </testcase> + + <testcase> + <name>Read Extended Registers Response Split File Record</name> + <raw>000a0000001b011418050600000000110600000000000000000000000000000000</raw> + <root-type>ModbusADU</root-type> + <parser-arguments> + <driverType>MODBUS_TCP</driverType> + <response>true</response> + </parser-arguments> + <xml> + <ModbusADU> + <ModbusTcpADU> + <transactionIdentifier dataType="uint" bitLength="16">10</transactionIdentifier> + <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier> + <length dataType="uint" bitLength="16">27</length> + <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier> + <pdu> + <ModbusPDU> + <errorFlag dataType="bit" bitLength="1">false</errorFlag> + <functionFlag dataType="uint" bitLength="7">20</functionFlag> + <ModbusPDUReadFileRecordResponse> + <byteCount dataType="uint" bitLength="8">24</byteCount> + <items isList="true"> + <ModbusPDUReadFileRecordResponseItem> + <dataLength dataType="uint" bitLength="8">5</dataLength> + <referenceType dataType="uint" bitLength="8">6</referenceType> + <data dataType="byte" bitLength="32">0x00000000</data> + </ModbusPDUReadFileRecordResponseItem> + <ModbusPDUReadFileRecordResponseItem> + <dataLength dataType="uint" bitLength="8">17</dataLength> + <referenceType dataType="uint" bitLength="8">6</referenceType> + <data dataType="byte" bitLength="128">0x00000000000000000000000000000000</data> + </ModbusPDUReadFileRecordResponseItem> + </items> + </ModbusPDUReadFileRecordResponse> + </ModbusPDU> + </pdu> + </ModbusTcpADU> + </ModbusADU> + </xml> + </testcase> + + <testcase> + <name>Write Extended Registers Request File Record</name> + + <raw>000a0000000c011509060002000000010008</raw> + <root-type>ModbusADU</root-type> + <parser-arguments> + <driverType>MODBUS_TCP</driverType> + <response>false</response> + </parser-arguments> + <xml> + <ModbusADU> + <ModbusTcpADU> + <transactionIdentifier dataType="uint" bitLength="16">10</transactionIdentifier> + <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier> + <length dataType="uint" bitLength="16">12</length> + <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier> + <pdu> + <ModbusPDU> + <errorFlag dataType="bit" bitLength="1">false</errorFlag> + <functionFlag dataType="uint" bitLength="7">21</functionFlag> + <ModbusPDUWriteFileRecordRequest> + <byteCount dataType="uint" bitLength="8">9</byteCount> + <items isList="true"> + <ModbusPDUWriteFileRecordRequestItem> + <referenceType dataType="uint" bitLength="8">6</referenceType> + <fileNumber dataType="uint" bitLength="16">2</fileNumber> + <recordNumber dataType="uint" bitLength="16">0</recordNumber> + <recordLength dataType="uint" bitLength="16">1</recordLength> + <recordData dataType="byte" bitLength="16">0x0008</recordData> + </ModbusPDUWriteFileRecordRequestItem> + </items> + </ModbusPDUWriteFileRecordRequest> + </ModbusPDU> + </pdu> + </ModbusTcpADU> + </ModbusADU> + </xml> + </testcase> + + <testcase> + <name>Write Extended Registers Request Split File Record</name> + <raw>000a00000015011512060001270F00010000060002000000010000</raw> + <root-type>ModbusADU</root-type> + <parser-arguments> + <driverType>MODBUS_TCP</driverType> + <response>false</response> + </parser-arguments> + <xml> + <ModbusADU> + <ModbusTcpADU> + <transactionIdentifier dataType="uint" bitLength="16">10</transactionIdentifier> + <protocolIdentifier dataType="uint" bitLength="16">0</protocolIdentifier> + <length dataType="uint" bitLength="16">21</length> + <unitIdentifier dataType="uint" bitLength="8">1</unitIdentifier> + <pdu> + <ModbusPDU> + <errorFlag dataType="bit" bitLength="1">false</errorFlag> + <functionFlag dataType="uint" bitLength="7">21</functionFlag> + <ModbusPDUWriteFileRecordRequest> + <byteCount dataType="uint" bitLength="8">18</byteCount> + <items isList="true"> + <ModbusPDUWriteFileRecordRequestItem> + <referenceType dataType="uint" bitLength="8">6</referenceType> + <fileNumber dataType="uint" bitLength="16">1</fileNumber> + <recordNumber dataType="uint" bitLength="16">9999</recordNumber> + <recordLength dataType="uint" bitLength="16">1</recordLength> + <recordData dataType="byte" bitLength="16">0x0000</recordData> + </ModbusPDUWriteFileRecordRequestItem> + <ModbusPDUWriteFileRecordRequestItem> + <referenceType dataType="uint" bitLength="8">6</referenceType> + <fileNumber dataType="uint" bitLength="16">2</fileNumber> + <recordNumber dataType="uint" bitLength="16">0</recordNumber> + <recordLength dataType="uint" bitLength="16">1</recordLength> + <recordData dataType="byte" bitLength="16">0x0000</recordData> + </ModbusPDUWriteFileRecordRequestItem> + </items> + </ModbusPDUWriteFileRecordRequest> + </ModbusPDU> + </pdu> + </ModbusTcpADU> + </ModbusADU> + </xml> + </testcase> + +</test:testsuite>
