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


The following commit(s) were added to refs/heads/develop by this push:
     new db108f7  - Added a first test to the cotp protocol testsuite - Aligned 
the cotp schema with the tpkt protocol structure
db108f7 is described below

commit db108f778fac1771acce86a282caaa4d60062b5e
Author: Christofer Dutz <christofer.d...@c-ware.de>
AuthorDate: Tue Jan 22 10:51:47 2019 +0100

    - Added a first test to the cotp protocol testsuite
    - Aligned the cotp schema with the tpkt protocol structure
---
 .../apache/plc4x/protocols/cotp-protocol.dfdl.xsd  | 98 ++++++++++++----------
 .../apache/plc4x/protocols/CotpProtocolTest.java   | 31 +++++++
 .../org/apache/plc4x/protocols/cotp-protocol.tdml  | 93 ++++++++++++++++++++
 .../org/apache/plc4x/protocols/tpkt-protocol.tdml  |  2 +-
 4 files changed, 181 insertions(+), 43 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 e179712..6792c74 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
@@ -24,19 +24,22 @@
     <xs:annotation>
         <xs:appinfo source="http://www.ogf.org/dfdl/";>
             <dfdl:defineVariable name="messageType" type="xs:string"/>
-            <dfdl:format representation="binary"
-                         binaryNumberRep="binary"
-                         byteOrder="bigEndian"
-                         lengthKind="implicit" lengthUnits="bytes" length="0"
-                         occursCountKind="implicit"
-                         textOutputMinLength="0"
-                         alignment="1" alignmentUnits="bits"
-                         leadingSkip="0" trailingSkip="0"
-                         textPadKind="none" ignoreCase="no"
-                         encoding="utf-8" truncateSpecifiedLengthString="no"
-                         initiator="" terminator=""
-                         sequenceKind="ordered" separator=""
-                         escapeSchemeRef=""  initiatedContent="no"/>
+            <dfdl:defineFormat name="cotpFormat">
+                <dfdl:format representation="binary"
+                             binaryNumberRep="binary"
+                             byteOrder="bigEndian"
+                             lengthKind="implicit" lengthUnits="bytes" 
length="0"
+                             occursCountKind="implicit"
+                             textOutputMinLength="0"
+                             alignment="1" alignmentUnits="bits"
+                             leadingSkip="0" trailingSkip="0"
+                             textPadKind="none" ignoreCase="no"
+                             encoding="utf-8" 
truncateSpecifiedLengthString="no"
+                             initiator="" terminator=""
+                             sequenceKind="ordered" separator=""
+                             escapeSchemeRef="" initiatedContent="no"/>
+            </dfdl:defineFormat>
+            <dfdl:format ref="cotp:cotpFormat"/>
         </xs:appinfo>
     </xs:annotation>
 
@@ -60,27 +63,27 @@
 
     -->
 
-    <xs:element name="CotpTPDU">
-        <xs:complexType>
-            <xs:sequence>
-                <!-- Length of the COTP header data -->
-                <xs:element name="headerLength" type="cotp:byte"/>
-                <xs:element name="type" type="cotp:byte"/>
-                <xs:choice dfdl:choiceDispatchKey="{type}">
-                    <xs:element dfdl:choiceBranchKey="224" 
ref="cotp:CotpTpduConnectionRequest"/>
-                    <xs:element dfdl:choiceBranchKey="208" 
ref="cotp:CotpTpduConnectionResponse"/>
-                    <xs:element dfdl:choiceBranchKey="128" 
ref="cotp:CotpTpduDisconnectRequest"/>
-                    <xs:element dfdl:choiceBranchKey="192" 
ref="cotp:CotpTpduDisconnectResponse"/>
-                    <xs:element dfdl:choiceBranchKey="112" 
ref="cotp:CotpTpduError"/>
-                    <xs:element dfdl:choiceBranchKey="240" 
ref="cotp:CotpTpduData"/>
-                </xs:choice>
-                <!-- TODO: add the entire rest of the input to the user-data 
-->
-                <xs:element name="userData" type="xs:hexBinary"
-                            dfdl:byteOrder="bigEndian" 
dfdl:lengthUnits="bytes" dfdl:lengthKind="explicit"
-                            dfdl:length="{totalInputSize - (2 + 1 + 
../headerLength}"/>
-            </xs:sequence>
-        </xs:complexType>
-    </xs:element>
+    <xs:element name="CoTpTPDU" type="cotp:CotpMessageType"/>
+
+    <xs:complexType name="CotpMessageType">
+        <xs:sequence>
+            <!-- Length of the COTP header data -->
+            <xs:element name="headerLength" type="cotp:byte"/>
+            <xs:element name="type" type="cotp:byte"/>
+            <xs:choice dfdl:choiceDispatchKey="{type}">
+                <xs:element dfdl:choiceBranchKey="224" 
ref="cotp:CotpTpduConnectionRequest"/>
+                <xs:element dfdl:choiceBranchKey="208" 
ref="cotp:CotpTpduConnectionResponse"/>
+                <xs:element dfdl:choiceBranchKey="128" 
ref="cotp:CotpTpduDisconnectRequest"/>
+                <xs:element dfdl:choiceBranchKey="192" 
ref="cotp:CotpTpduDisconnectResponse"/>
+                <xs:element dfdl:choiceBranchKey="112" 
ref="cotp:CotpTpduError"/>
+                <xs:element dfdl:choiceBranchKey="240" 
ref="cotp:CotpTpduData"/>
+            </xs:choice>
+            <!-- TODO: add the entire rest of the input to the user-data -->
+            <xs:element name="userData" type="xs:hexBinary"
+                        dfdl:byteOrder="bigEndian" dfdl:lengthUnits="bytes" 
dfdl:lengthKind="explicit"
+                        dfdl:length="0"/>
+        </xs:sequence>
+    </xs:complexType>
 
     <xs:element name="CotpTpduConnectionRequest">
         <xs:complexType>
@@ -88,7 +91,9 @@
                 <xs:element name="destinationReference" type="cotp:short"/>
                 <xs:element name="sourceReference" type="cotp:short"/>
                 <xs:element name="protocolClass" type="cotp:byte"/>
-                <xs:element ref="cotp:parameters"/>
+                <xs:element ref="cotp:parameters" minOccurs="0"
+                            dfdl:lengthKind="explicit" 
dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 6}"
+                            dfdl:occursCountKind="expression" 
dfdl:occursCount="{if(../../headerLength gt 6) then 1 else 0}"/>
             </xs:sequence>
         </xs:complexType>
     </xs:element>
@@ -99,7 +104,9 @@
                 <xs:element name="destinationReference" type="cotp:short"/>
                 <xs:element name="sourceReference" type="cotp:short"/>
                 <xs:element name="protocolClass" type="cotp:byte"/>
-                <xs:element ref="cotp:parameters"/>
+                <xs:element ref="cotp:parameters" minOccurs="0"
+                            dfdl:lengthKind="explicit" 
dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 6}"
+                            dfdl:occursCountKind="expression" 
dfdl:occursCount="{if(../../headerLength gt 6) then 1 else 0}"/>
             </xs:sequence>
         </xs:complexType>
     </xs:element>
@@ -110,7 +117,9 @@
                 <xs:element name="destinationReference" type="cotp:short"/>
                 <xs:element name="sourceReference" type="cotp:short"/>
                 <xs:element name="disconnectReason" type="cotp:byte"/>
-                <xs:element ref="cotp:parameters"/>
+                <xs:element ref="cotp:parameters" minOccurs="0"
+                            dfdl:lengthKind="explicit" 
dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 6}"
+                            dfdl:occursCountKind="expression" 
dfdl:occursCount="{if(../../headerLength gt 6) then 1 else 0}"/>
             </xs:sequence>
         </xs:complexType>
     </xs:element>
@@ -120,7 +129,9 @@
             <xs:sequence>
                 <xs:element name="destinationReference" type="cotp:short"/>
                 <xs:element name="sourceReference" type="cotp:short"/>
-                <xs:element ref="cotp:parameters"/>
+                <xs:element ref="cotp:parameters" minOccurs="0"
+                            dfdl:lengthKind="explicit" 
dfdl:lengthUnits="bytes" dfdl:length="{../../headerLength - 5}"
+                            dfdl:occursCountKind="expression" 
dfdl:occursCount="{if(../../headerLength gt 5) then 1 else 0}"/>
             </xs:sequence>
         </xs:complexType>
     </xs:element>
@@ -130,7 +141,9 @@
             <xs:sequence>
                 <xs:element name="destinationReference" type="cotp:short"/>
                 <xs:element name="rejectCause" type="cotp:byte"/>
-                <xs:element ref="cotp:parameters"/>
+                <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}"/>
             </xs:sequence>
         </xs:complexType>
     </xs:element>
@@ -149,7 +162,7 @@
     <xs:element name="parameters">
         <xs:complexType>
             <xs:sequence>
-                <xs:element name="parameter">
+                <xs:element name="parameter" maxOccurs="unbounded">
                     <xs:complexType>
                         <xs:sequence>
                             <xs:element name="type" type="cotp:byte"/>
@@ -159,7 +172,8 @@
                                 <xs:element dfdl:choiceBranchKey="193" 
ref="cotp:CotpParameterCallingTsap"/>
                                 <xs:element dfdl:choiceBranchKey="194" 
ref="cotp:CotpParameterCalledTsap"/>
                                 <xs:element dfdl:choiceBranchKey="195" 
ref="cotp:CotpParameterChecksum"/>
-                                <xs:element dfdl:choiceBranchKey="224" 
ref="cotp:CotpParameterDisconnectAdditionalInformation"/>
+                                <xs:element dfdl:choiceBranchKey="224"
+                                            
ref="cotp:CotpParameterDisconnectAdditionalInformation"/>
                             </xs:choice>
                         </xs:sequence>
                     </xs:complexType>
@@ -205,7 +219,7 @@
             <xs:sequence>
                 <xs:element name="data" type="xs:hexBinary"
                             dfdl:byteOrder="bigEndian" 
dfdl:lengthUnits="bytes" dfdl:lengthKind="explicit"
-                            dfdl:length="{../../../parameterLength}"/>
+                            dfdl:length="{../../parameterLength}"/>
             </xs:sequence>
         </xs:complexType>
     </xs:element>
diff --git 
a/protocols/src/test/java/org/apache/plc4x/protocols/CotpProtocolTest.java 
b/protocols/src/test/java/org/apache/plc4x/protocols/CotpProtocolTest.java
new file mode 100644
index 0000000..507e65c
--- /dev/null
+++ b/protocols/src/test/java/org/apache/plc4x/protocols/CotpProtocolTest.java
@@ -0,0 +1,31 @@
+/*
+ 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
+
+     http://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.
+ */
+
+package org.apache.plc4x.protocols;
+
+/**
+ * Executes all tests for the ISO on TCP / TPKT protocol.
+ */
+public class CotpProtocolTest extends AbstractProtocolTest {
+
+    public CotpProtocolTest() {
+        super("org/apache/plc4x/protocols/cotp-protocol.tdml");
+    }
+
+}
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
new file mode 100644
index 0000000..486bcb6
--- /dev/null
+++ b/protocols/src/test/resources/org/apache/plc4x/protocols/cotp-protocol.tdml
@@ -0,0 +1,93 @@
+<?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
+
+      http://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.
+  -->
+
+<testSuite xmlns:dfdl="http://www.ogf.org/dfdl/dfdl-1.0/";
+           xmlns:test="plc4x-protocol-test"
+           xmlns:tdml="http://www.ibm.com/xmlns/dfdl/testData";
+           xmlns:cotp="http://plc4x.apache.org/cotp";
+           xmlns:xs="http://www.w3.org/2001/XMLSchema";
+           suiteName="COTP protocol (ISOTp)"
+           description="Testsuite for the COTP protocol"
+           defaultRoundTrip="true">
+
+    <tdml:defineSchema name="cotpSchema" elementFormDefault="unqualified">
+        <!-- Import the Schema -->
+        <xs:import namespace="http://plc4x.apache.org/cotp";
+                   schemaLocation="cotp-protocol.dfdl.xsd"/>
+
+        <!-- Import the format settings -->
+        <dfdl:format ref="cotp:cotpFormat"/>
+
+        <!-- Define the root element name and type -->
+        <xs:element name="cotpMessage" type="cotp:CotpMessageType"/>
+    </tdml:defineSchema>
+
+    <tdml:parserTestCase name="minimalCotpMessage"
+                         root="cotpMessage"
+                         model="cotpSchema"
+                         description="Minimal valid COTP Message">
+        <!-- Define the input -->
+        <tdml:document>
+            <tdml:documentPart 
type="byte">11D00001000200C00109C1020100C2020102</tdml:documentPart>
+        </tdml:document>
+
+        <!-- Define the expected output -->
+        <tdml:infoset>
+            <tdml:dfdlInfoset>
+                <test:cotpMessage>
+                    <headerLength>17</headerLength>
+                    <type>208</type>
+                    <CotpTpduConnectionResponse>
+                        <destinationReference>1</destinationReference>
+                        <sourceReference>2</sourceReference>
+                        <protocolClass>0</protocolClass>
+                        <parameters>
+                            <parameter>
+                                <type>192</type>
+                                <parameterLength>1</parameterLength>
+                                <CotpParameterTpduSize>
+                                    <tpduSize>9</tpduSize>
+                                </CotpParameterTpduSize>
+                            </parameter>
+                            <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>
+                        </parameters>
+                    </CotpTpduConnectionResponse>
+                    <userData/>
+                </test:cotpMessage>
+            </tdml:dfdlInfoset>
+        </tdml:infoset>
+    </tdml:parserTestCase>
+
+</testSuite>
+
+
diff --git 
a/protocols/src/test/resources/org/apache/plc4x/protocols/tpkt-protocol.tdml 
b/protocols/src/test/resources/org/apache/plc4x/protocols/tpkt-protocol.tdml
index 1881ecb..e713497 100644
--- a/protocols/src/test/resources/org/apache/plc4x/protocols/tpkt-protocol.tdml
+++ b/protocols/src/test/resources/org/apache/plc4x/protocols/tpkt-protocol.tdml
@@ -23,7 +23,7 @@
            xmlns:tdml="http://www.ibm.com/xmlns/dfdl/testData";
            xmlns:tpkt="http://plc4x.apache.org/tpkt";
            xmlns:xs="http://www.w3.org/2001/XMLSchema";
-           suiteName="plc4x-tpkt"
+           suiteName="TPKT protocol (ISO-on-TCP)"
            description="Testsuite for the TPKT protocol"
            defaultRoundTrip="true">
 

Reply via email to