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 2019/01/22 12:47:49 UTC

[incubator-plc4x] 01/02: - Fixed some problems in the cotp dfdl schema - Implemented a lot of COTP tests

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

cdutz pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit 7e49754ffd6f3e098d70de61cbeb735c4a499a30
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Tue Jan 22 13:46:47 2019 +0100

    - Fixed some problems in the cotp dfdl schema
    - Implemented a lot of COTP tests
---
 .../apache/plc4x/protocols/cotp-protocol.dfdl.xsd  |   6 +-
 .../org/apache/plc4x/protocols/cotp-protocol.tdml  | 448 ++++++++++++++++++++-
 2 files changed, 450 insertions(+), 4 deletions(-)

diff --git a/protocols/src/main/dfdl/org/apache/plc4x/protocols/cotp-protocol.dfdl.xsd b/protocols/src/main/dfdl/org/apache/plc4x/protocols/cotp-protocol.dfdl.xsd
index 7227117..afe7a5e 100644
--- a/protocols/src/main/dfdl/org/apache/plc4x/protocols/cotp-protocol.dfdl.xsd
+++ b/protocols/src/main/dfdl/org/apache/plc4x/protocols/cotp-protocol.dfdl.xsd
@@ -207,8 +207,8 @@
                 <xs:element name="destinationReference" type="cotp:short"/>
                 <xs:element name="rejectCause" type="cotp:byte"/>
                 <xs:element ref="cotp:parameters" minOccurs="0"
-                            dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 3}"
-                            dfdl:occursCountKind="expression" dfdl:occursCount="{if(../../headerLength gt 3) then 1 else 0}"/>
+                            dfdl:lengthKind="explicit" dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 4}"
+                            dfdl:occursCountKind="expression" dfdl:occursCount="{if(../../headerLength gt 4) then 1 else 0}"/>
             </xs:sequence>
         </xs:complexType>
     </xs:element>
@@ -274,7 +274,7 @@
     <xs:element name="CotpParameterChecksum">
         <xs:complexType>
             <xs:sequence>
-                <xs:element name="tsapId" type="cotp:byte"/>
+                <xs:element name="checksum" type="cotp:byte"/>
             </xs:sequence>
         </xs:complexType>
     </xs:element>
diff --git a/protocols/src/test/resources/org/apache/plc4x/protocols/cotp-protocol.tdml b/protocols/src/test/resources/org/apache/plc4x/protocols/cotp-protocol.tdml
index 486bcb6..9da61c8 100644
--- a/protocols/src/test/resources/org/apache/plc4x/protocols/cotp-protocol.tdml
+++ b/protocols/src/test/resources/org/apache/plc4x/protocols/cotp-protocol.tdml
@@ -39,7 +39,427 @@
         <xs:element name="cotpMessage" type="cotp:CotpMessageType"/>
     </tdml:defineSchema>
 
-    <tdml:parserTestCase name="minimalCotpMessage"
+    <!--
+
+        Tests for the basic TPDU types (no parameters)
+
+    -->
+
+    <tdml:parserTestCase name="typeConnectionRequest"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="Minimal valid COTP Connection Request TPDU">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">06E00001000200</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>6</headerLength>
+                    <type>224</type>
+                    <CotpTpduConnectionRequest>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <protocolClass>0</protocolClass>
+                    </CotpTpduConnectionRequest>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="typeConnectionResponse"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="Minimal valid COTP Connection Response TPDU">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">06D00001000200</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>6</headerLength>
+                    <type>208</type>
+                    <CotpTpduConnectionResponse>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <protocolClass>0</protocolClass>
+                    </CotpTpduConnectionResponse>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="typeDisconnectionRequest"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="Minimal valid COTP Disconnection Request TPDU">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">06800001000200</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>6</headerLength>
+                    <type>128</type>
+                    <CotpTpduDisconnectRequest>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <disconnectReason>0</disconnectReason>
+                    </CotpTpduDisconnectRequest>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="typeDisconnectionResponse"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="Minimal valid COTP Disconnection Response TPDU">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">05C000010002</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>5</headerLength>
+                    <type>192</type>
+                    <CotpTpduDisconnectResponse>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                    </CotpTpduDisconnectResponse>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="typeError"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="Minimal valid COTP Error TPDU">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">0470000102</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>4</headerLength>
+                    <type>112</type>
+                    <CotpTpduError>
+                        <destinationReference>1</destinationReference>
+                        <rejectCause>2</rejectCause>
+                    </CotpTpduError>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="typeData"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="Minimal valid COTP Data TPDU">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">02F002</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>2</headerLength>
+                    <type>240</type>
+                    <CotpTpduData>
+                        <endOfTransmission>0</endOfTransmission>
+                        <tpduRef>2</tpduRef>
+                    </CotpTpduData>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="typeDataEndOfTransmission"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="Minimal valid COTP Data (End Of Transmission) TPDU">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">02F082</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>2</headerLength>
+                    <type>240</type>
+                    <CotpTpduData>
+                        <endOfTransmission>1</endOfTransmission>
+                        <tpduRef>2</tpduRef>
+                    </CotpTpduData>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <!--
+
+        Tests for the parameter types.
+
+    -->
+
+    <tdml:parserTestCase name="parameterTpduSize"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="parameterTpduSize">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">09E00001000200C00109</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>9</headerLength>
+                    <type>224</type>
+                    <CotpTpduConnectionRequest>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <protocolClass>0</protocolClass>
+                        <parameters>
+                            <parameter>
+                                <type>192</type>
+                                <parameterLength>1</parameterLength>
+                                <CotpParameterTpduSize>
+                                    <tpduSize>9</tpduSize>
+                                </CotpParameterTpduSize>
+                            </parameter>
+                        </parameters>
+                    </CotpTpduConnectionRequest>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="parameterCallingTsap"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="parameterCallingTsap">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">0AE00001000200C1020009</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>10</headerLength>
+                    <type>224</type>
+                    <CotpTpduConnectionRequest>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <protocolClass>0</protocolClass>
+                        <parameters>
+                            <parameter>
+                                <type>193</type>
+                                <parameterLength>2</parameterLength>
+                                <CotpParameterCallingTsap>
+                                    <tsapId>9</tsapId>
+                                </CotpParameterCallingTsap>
+                            </parameter>
+                        </parameters>
+                    </CotpTpduConnectionRequest>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="parameterCalledTsap"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="parameterCalledTsap">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">0AE00001000200C2020009</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>10</headerLength>
+                    <type>224</type>
+                    <CotpTpduConnectionRequest>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <protocolClass>0</protocolClass>
+                        <parameters>
+                            <parameter>
+                                <type>194</type>
+                                <parameterLength>2</parameterLength>
+                                <CotpParameterCalledTsap>
+                                    <tsapId>9</tsapId>
+                                </CotpParameterCalledTsap>
+                            </parameter>
+                        </parameters>
+                    </CotpTpduConnectionRequest>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="parameterChecksum"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="parameterChecksum">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">09E00001000200C30109</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>9</headerLength>
+                    <type>224</type>
+                    <CotpTpduConnectionRequest>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <protocolClass>0</protocolClass>
+                        <parameters>
+                            <parameter>
+                                <type>195</type>
+                                <parameterLength>1</parameterLength>
+                                <CotpParameterChecksum>
+                                    <checksum>9</checksum>
+                                </CotpParameterChecksum>
+                            </parameter>
+                        </parameters>
+                    </CotpTpduConnectionRequest>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="parameterDisconnectAdditionalInformation"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="parameterDisconnectAdditionalInformation">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">0EE00001000200E006010203040506</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>14</headerLength>
+                    <type>224</type>
+                    <CotpTpduConnectionRequest>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <protocolClass>0</protocolClass>
+                        <parameters>
+                            <parameter>
+                                <type>224</type>
+                                <parameterLength>6</parameterLength>
+                                <CotpParameterDisconnectAdditionalInformation>
+                                    <data>010203040506</data>
+                                </CotpParameterDisconnectAdditionalInformation>
+                            </parameter>
+                        </parameters>
+                    </CotpTpduConnectionRequest>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <!--
+
+        Tests for typical packets used in PLC4X
+
+    -->
+
+    <tdml:parserTestCase name="scenarioConnectionRequest"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="COTP Connection request used for initiating an S7 protocol connection.">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart type="byte">11E00001000200C1020100C2020102c0010a</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>17</headerLength>
+                    <type>224</type>
+                    <CotpTpduConnectionRequest>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <protocolClass>0</protocolClass>
+                        <parameters>
+                            <parameter>
+                                <type>193</type>
+                                <parameterLength>2</parameterLength>
+                                <CotpParameterCallingTsap>
+                                    <tsapId>256</tsapId>
+                                </CotpParameterCallingTsap>
+                            </parameter>
+                            <parameter>
+                                <type>194</type>
+                                <parameterLength>2</parameterLength>
+                                <CotpParameterCalledTsap>
+                                    <tsapId>258</tsapId>
+                                </CotpParameterCalledTsap>
+                            </parameter>
+                            <parameter>
+                                <type>192</type>
+                                <parameterLength>1</parameterLength>
+                                <CotpParameterTpduSize>
+                                    <tpduSize>10</tpduSize>
+                                </CotpParameterTpduSize>
+                            </parameter>
+                        </parameters>
+                    </CotpTpduConnectionRequest>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+    <tdml:parserTestCase name="scenarioConnectionResponse"
                          root="cotpMessage"
                          model="cotpSchema"
                          description="Minimal valid COTP Message">
@@ -88,6 +508,32 @@
         </tdml:infoset>
     </tdml:parserTestCase>
 
+    <tdml:parserTestCase name="scenarioDataTpdu"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="Typical Data TPDU used for transferring S7 packets.">
+        <!-- Define the input -->
+        <tdml:document>
+            <!-- TODO: Comment in the S7 payload as soon as the schema is fixed -->
+            <tdml:documentPart type="byte">02F080<!--320700000300000800080001120411440100ff09000401320004--></tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>2</headerLength>
+                    <type>240</type>
+                    <CotpTpduData>
+                        <endOfTransmission>1</endOfTransmission>
+                        <tpduRef>0</tpduRef>
+                    </CotpTpduData>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
 </testSuite>