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/08/27 08:33:51 UTC

[plc4x] 02/02: - First steps to implementing the Allen Bradley ETH protocol.

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/plc4x.git

commit b0fe0380cd8139a79b610f6e2123536ee1de15e0
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Tue Aug 27 10:33:41 2019 +0200

    - First steps to implementing the Allen Bradley ETH protocol.
---
 .../protocol/test/ProtocolTestsuiteRunner.java     |   5 +
 protocols/ab-eth/pom.xml                           |  43 ++++++
 .../apache/plc4x/protocol/abeth/ABETHProtocol.java |  46 ++++++
 ...e.plc4x.plugins.codegenerator.protocol.Protocol |  19 +++
 .../main/resources/protocols/abeth/ab-eth.mspec    |  85 +++++++++++
 protocols/pom.xml                                  |   3 +-
 sandbox/pom.xml                                    |   1 +
 sandbox/test-java-ab-eth-driver/pom.xml            |  92 ++++++++++++
 .../org/apache/plc4x/protocol/abeth/AbEthTest.java |  30 ++++
 .../test/resources/testsuite/AbEthTestsuite.xml    | 163 +++++++++++++++++++++
 10 files changed, 486 insertions(+), 1 deletion(-)

diff --git a/plc4j/utils/protocol-test-utils/src/main/java/org/apache/plc4x/protocol/test/ProtocolTestsuiteRunner.java b/plc4j/utils/protocol-test-utils/src/main/java/org/apache/plc4x/protocol/test/ProtocolTestsuiteRunner.java
index 50dbc41..7e1f299 100644
--- a/plc4j/utils/protocol-test-utils/src/main/java/org/apache/plc4x/protocol/test/ProtocolTestsuiteRunner.java
+++ b/plc4j/utils/protocol-test-utils/src/main/java/org/apache/plc4x/protocol/test/ProtocolTestsuiteRunner.java
@@ -109,11 +109,16 @@ public class ProtocolTestsuiteRunner {
             String xmlString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(msg);
             Diff diff = DiffBuilder.compare(referenceXml).withTest(xmlString).ignoreWhitespace().build();
             if(diff.hasDifferences()) {
+                System.out.println(xmlString);
                 throw new ProtocolTestsuiteException("Differences were found after parsing.\n" + diff.toString());
             }
             WriteBuffer writeBuffer = new WriteBuffer(((SizeAware) msg).getLengthInBytes(), testSuite.isLittleEndian());
             messageIO.serialize(writeBuffer, msg);
             byte[] data = writeBuffer.getData();
+            if(testcase.getRaw().length != data.length) {
+                LOGGER.info("Expected a byte array with a length of " + testcase.getRaw().length +
+                    " but got one with " + data.length);
+            }
             if(!Arrays.equals(testcase.getRaw(), data)) {
                 int i;
                 for(i = 0; i < data.length; i++) {
diff --git a/protocols/ab-eth/pom.xml b/protocols/ab-eth/pom.xml
new file mode 100644
index 0000000..deafab0
--- /dev/null
+++ b/protocols/ab-eth/pom.xml
@@ -0,0 +1,43 @@
+<?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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x</groupId>
+    <artifactId>plc4x-protocols</artifactId>
+    <version>0.5.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>plc4x-protocols-ab-eth</artifactId>
+
+  <name>Protocols: AB-ETH</name>
+  <description>Base protocol specifications for the AB ETH protocol</description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-build-utils-protocol-base-mspec</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+    </dependency>
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/protocols/ab-eth/src/main/java/org/apache/plc4x/protocol/abeth/ABETHProtocol.java b/protocols/ab-eth/src/main/java/org/apache/plc4x/protocol/abeth/ABETHProtocol.java
new file mode 100644
index 0000000..5f72f06
--- /dev/null
+++ b/protocols/ab-eth/src/main/java/org/apache/plc4x/protocol/abeth/ABETHProtocol.java
@@ -0,0 +1,46 @@
+/*
+ * 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.protocol.abeth;
+
+import org.apache.plc4x.plugins.codegenerator.language.mspec.parser.MessageFormatParser;
+import org.apache.plc4x.plugins.codegenerator.protocol.Protocol;
+import org.apache.plc4x.plugins.codegenerator.types.definitions.ComplexTypeDefinition;
+import org.apache.plc4x.plugins.codegenerator.types.exceptions.GenerationException;
+
+import java.io.InputStream;
+import java.util.Map;
+
+public class ABETHProtocol implements Protocol {
+
+    @Override
+    public String getName() {
+        return "ab-eth";
+    }
+
+    @Override
+    public Map<String, ComplexTypeDefinition> getTypeDefinitions() throws GenerationException {
+        InputStream schemaInputStream = ABETHProtocol.class.getResourceAsStream("/protocols/abeth/ab-eth.mspec");
+        if(schemaInputStream == null) {
+            throw new GenerationException("Error loading message-format schema for protocol '" + getName() + "'");
+        }
+        return new MessageFormatParser().parse(schemaInputStream);
+    }
+
+}
diff --git a/protocols/ab-eth/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol b/protocols/ab-eth/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol
new file mode 100644
index 0000000..6f20f62
--- /dev/null
+++ b/protocols/ab-eth/src/main/resources/META-INF/services/org.apache.plc4x.plugins.codegenerator.protocol.Protocol
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+org.apache.plc4x.protocol.abeth.ABETHProtocol
\ No newline at end of file
diff --git a/protocols/ab-eth/src/main/resources/protocols/abeth/ab-eth.mspec b/protocols/ab-eth/src/main/resources/protocols/abeth/ab-eth.mspec
new file mode 100644
index 0000000..a279bdb
--- /dev/null
+++ b/protocols/ab-eth/src/main/resources/protocols/abeth/ab-eth.mspec
@@ -0,0 +1,85 @@
+//
+// 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.
+//
+
+[discriminatedType 'CIPEncapsulationPacket'
+    [discriminator uint 16 'commandType']
+    [implicit      uint 16 'len' 'lengthInBytes - 28']
+    [simple        uint 32 'sessionHandle']
+    [simple        uint 32 'status']
+    [array         uint 8  'senderContext' count '8']
+    [simple        uint 32 'options']
+    [reserved      uint 32 '0x00000000']
+    [typeSwitch 'commandType'
+        ['0x0101' CIPEncapsulationConnectionRequest
+        ]
+        ['0x0201' CIPEncapsulationConnectionResponse
+        ]
+        ['0x0107' CIPEncapsulationReadRequest
+            [simple   DF1RequestMessage  'request']
+        ]
+        ['0x0207' CIPEncapsulationReadResponse [uint 16 'len']
+            [simple   DF1ResponseMessage 'response' ['len']]
+        ]
+    ]
+]
+
+[discriminatedType 'DF1RequestMessage'
+    [simple        uint 8  'destinationAddress']
+    [simple        uint 8  'sourceAddress']
+    [reserved      uint 16 '0x0000']
+    [discriminator uint 8  'commandCode']
+    [simple        uint 8  'status']
+    [simple        uint 16 'transactionCounter']
+    [typeSwitch 'commandCode'
+        ['0x0F' DF1CommandRequestMessage
+            [simple DF1RequestCommand 'command']
+        ]
+    ]
+]
+
+[discriminatedType 'DF1ResponseMessage' [uint 16 'payloadLength']
+    [reserved      uint 8  '0x00']
+    [simple        uint 8  'destinationAddress']
+    [simple        uint 8  'sourceAddress']
+    [reserved      uint 8  '0x00']
+    [discriminator uint 8  'commandCode']
+    [simple        uint 8  'status']
+    [simple        uint 16 'transactionCounter']
+    [typeSwitch 'commandCode'
+        ['0x4F' DF1CommandResponseMessageProtectedTypedLogicalRead [uint 8 'status']
+            [array    uint 8 'data' length 'payloadLength - 8']
+            [optional uint 8 'extendedStatus' 'status != 0']
+        ]
+    ]
+]
+
+[discriminatedType 'DF1RequestCommand'
+    [discriminator    uint 8 'functionCode']
+    [typeSwitch 'functionCode'
+        ['0xA2' DF1RequestProtectedTypedLogicalRead
+            [simple uint 8 'byteSize']
+            [simple uint 8 'fileNumber']
+            [simple uint 8 'fileType']
+            [simple uint 8 'elementNumber']
+            [simple uint 8 'subElementNumber']
+        ]
+    ]
+]
+
+
diff --git a/protocols/pom.xml b/protocols/pom.xml
index 8f59a67..1022cea 100644
--- a/protocols/pom.xml
+++ b/protocols/pom.xml
@@ -190,9 +190,10 @@
   </build>
 
   <modules>
+    <module>ab-eth</module>
+    <module>df1</module>
     <module>knxnetip</module>
     <module>s7</module>
-    <module>df1</module>
   </modules>
 
   <profiles>
diff --git a/sandbox/pom.xml b/sandbox/pom.xml
index f4f5422..b3dc0ab 100644
--- a/sandbox/pom.xml
+++ b/sandbox/pom.xml
@@ -36,6 +36,7 @@
 
   <modules>
     <module>code-gen</module>
+    <module>test-java-ab-eth-driver</module>
     <module>test-java-knxnetip-driver</module>
     <module>test-java-s7-driver</module>
     <module>test-java-passive-s7-driver</module>
diff --git a/sandbox/test-java-ab-eth-driver/pom.xml b/sandbox/test-java-ab-eth-driver/pom.xml
new file mode 100644
index 0000000..136aeae
--- /dev/null
+++ b/sandbox/test-java-ab-eth-driver/pom.xml
@@ -0,0 +1,92 @@
+<?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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.plc4x.sandbox</groupId>
+    <artifactId>plc4x-sandbox</artifactId>
+    <version>0.5.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>test-java-ab-eth-driver</artifactId>
+
+  <name>Sandbox: Test Generated AB-ETH Driver</name>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.plc4x.plugins</groupId>
+        <artifactId>plc4x-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>test</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>generate-driver</goal>
+            </goals>
+            <configuration>
+              <protocolName>ab-eth</protocolName>
+              <languageName>java</languageName>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-driver-base-java</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4j-utils-protocol-test-utils</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-build-utils-language-java</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.plc4x</groupId>
+      <artifactId>plc4x-protocols-ab-eth</artifactId>
+      <version>0.5.0-SNAPSHOT</version>
+      <!-- Scope is 'provided' as this way it's not shipped with the driver -->
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git a/sandbox/test-java-ab-eth-driver/src/test/java/org/apache/plc4x/protocol/abeth/AbEthTest.java b/sandbox/test-java-ab-eth-driver/src/test/java/org/apache/plc4x/protocol/abeth/AbEthTest.java
new file mode 100644
index 0000000..39b275f
--- /dev/null
+++ b/sandbox/test-java-ab-eth-driver/src/test/java/org/apache/plc4x/protocol/abeth/AbEthTest.java
@@ -0,0 +1,30 @@
+/*
+  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.protocol.abeth;
+
+import org.apache.plc4x.protocol.test.ProtocolTestsuiteRunner;
+
+public class AbEthTest extends ProtocolTestsuiteRunner {
+
+    public AbEthTest() {
+        super("/testsuite/AbEthTestsuite.xml");
+    }
+
+}
diff --git a/sandbox/test-java-ab-eth-driver/src/test/resources/testsuite/AbEthTestsuite.xml b/sandbox/test-java-ab-eth-driver/src/test/resources/testsuite/AbEthTestsuite.xml
new file mode 100644
index 0000000..b9b13f7
--- /dev/null
+++ b/sandbox/test-java-ab-eth-driver/src/test/resources/testsuite/AbEthTestsuite.xml
@@ -0,0 +1,163 @@
+<?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.
+  -->
+<test:testsuite xmlns:test="https://plc4x.apache.org/schemas/testsuite.xsd"
+                bigEndian="false">
+
+  <name>Allen-Bradley ETH</name>
+
+  <testcase>
+    <name>Connection Request</name>
+    <raw>01010000000000000000000000040005000000000000000000000000</raw>
+    <root-type>CIPEncapsulationPacket</root-type>
+    <xml>
+      <CIPEncapsulationConnectionRequest className="org.apache.plc4x.java.abeth.CIPEncapsulationConnectionRequest">
+        <sessionHandle>0</sessionHandle>
+        <status>0</status>
+        <senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>4</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>5</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+        </senderContext>
+        <options>0</options>
+      </CIPEncapsulationConnectionRequest>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>Connection Response</name>
+    <raw>02010000000003320000000000040005000000000000000000000000</raw>
+    <root-type>CIPEncapsulationPacket</root-type>
+    <xml>
+      <CIPEncapsulationConnectionResponse className="org.apache.plc4x.java.abeth.CIPEncapsulationConnectionResponse">
+        <sessionHandle>818</sessionHandle>
+        <status>0</status>
+        <senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>4</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>5</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+        </senderContext>
+        <options>0</options>
+      </CIPEncapsulationConnectionResponse>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>Protected Typed Logical Read Request</name>
+    <raw>0107000e000003320000000040000000000000000000000000000000080500000f000401a21800640000</raw>
+    <root-type>CIPEncapsulationPacket</root-type>
+    <xml>
+      <CIPEncapsulationReadRequest className="org.apache.plc4x.java.abeth.CIPEncapsulationReadRequest">
+        <sessionHandle>818</sessionHandle>
+        <status>0</status>
+        <senderContext>
+          <senderContext>64</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+        </senderContext>
+        <options>0</options>
+        <request className="org.apache.plc4x.java.abeth.DF1CommandRequestMessage">
+          <destinationAddress>8</destinationAddress>
+          <sourceAddress>5</sourceAddress>
+          <status>0</status>
+          <transactionCounter>1025</transactionCounter>
+          <command className="org.apache.plc4x.java.abeth.DF1RequestProtectedTypedLogicalRead">
+            <byteSize>24</byteSize>
+            <fileNumber>0</fileNumber>
+            <fileType>100</fileType>
+            <elementNumber>0</elementNumber>
+            <subElementNumber>0</subElementNumber>
+          </command>
+        </request>
+      </CIPEncapsulationReadRequest>
+    </xml>
+  </testcase>
+
+  <testcase>
+    <name>Protected Typed Logical Read Response</name>
+    <raw>02070020000003320000000040000000000000000000000000000000000508004f000401910101000900040405001f02010003000404050000024000</raw>
+    <root-type>CIPEncapsulationPacket</root-type>
+    <xml>
+      <CIPEncapsulationReadResponse className="org.apache.plc4x.java.abeth.CIPEncapsulationReadResponse">
+        <sessionHandle>818</sessionHandle>
+        <status>0</status>
+        <senderContext>
+          <senderContext>64</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+          <senderContext>0</senderContext>
+        </senderContext>
+        <options>0</options>
+        <response className="org.apache.plc4x.java.abeth.DF1CommandResponseMessageProtectedTypedLogicalRead">
+          <destinationAddress>5</destinationAddress>
+          <sourceAddress>8</sourceAddress>
+          <status>0</status>
+          <transactionCounter>1025</transactionCounter>
+          <data>
+            <data>145</data>
+            <data>1</data>
+            <data>1</data>
+            <data>0</data>
+            <data>9</data>
+            <data>0</data>
+            <data>4</data>
+            <data>4</data>
+            <data>5</data>
+            <data>0</data>
+            <data>31</data>
+            <data>2</data>
+            <data>1</data>
+            <data>0</data>
+            <data>3</data>
+            <data>0</data>
+            <data>4</data>
+            <data>4</data>
+            <data>5</data>
+            <data>0</data>
+            <data>0</data>
+            <data>2</data>
+            <data>64</data>
+            <data>0</data>
+          </data>
+          <extendedStatus/>
+        </response>
+      </CIPEncapsulationReadResponse>
+    </xml>
+  </testcase>
+
+</test:testsuite>
\ No newline at end of file