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 2018/10/30 11:11:32 UTC

[incubator-plc4x] branch master updated: - Added more tests

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 6f0c499  - Added more tests
6f0c499 is described below

commit 6f0c499bfdf374bd44310e5ade270524bf41dc05
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Tue Oct 30 12:11:28 2018 +0100

    - Added more tests
---
 .../java/s7/netty/events/S7IdentifiedEvent.java    | 22 -------
 .../java/s7/netty/model/payloads/VarPayload.java   |  9 ++-
 .../strategies/DefaultS7MessageProcessor.java      |  4 +-
 .../org/apache/plc4x/java/s7/S7PlcDriverTest.java  | 29 +++++++---
 .../s7/netty/model/payloads/S7PayloadTests.java    | 67 ++++++++++++++++++++++
 5 files changed, 97 insertions(+), 34 deletions(-)

diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7IdentifiedEvent.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7IdentifiedEvent.java
deleted file mode 100644
index 8ec15eb..0000000
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/events/S7IdentifiedEvent.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-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.java.s7.netty.events;
-
-public class S7IdentifiedEvent {
-}
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/payloads/VarPayload.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/payloads/VarPayload.java
index 6631948..0167fb7 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/payloads/VarPayload.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/model/payloads/VarPayload.java
@@ -21,6 +21,7 @@ package org.apache.plc4x.java.s7.netty.model.payloads;
 import org.apache.plc4x.java.s7.netty.model.payloads.items.VarPayloadItem;
 import org.apache.plc4x.java.s7.netty.model.types.ParameterType;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -48,8 +49,12 @@ public class VarPayload implements S7Payload {
         return payloadItems;
     }
 
-    public void mergePayload(VarPayload otherPayload) {
-        payloadItems.addAll(otherPayload.getItems());
+    public VarPayload mergePayload(VarPayload otherPayload) {
+        List<VarPayloadItem> mergedItems = new ArrayList<>(payloadItems.size() + otherPayload.getItems().size());
+        mergedItems.addAll(payloadItems);
+        mergedItems.addAll(otherPayload.getItems());
+
+        return new VarPayload(parameterType, mergedItems);
     }
 
 }
diff --git a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessor.java b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessor.java
index 5c9a7f6..0ab4b1c 100644
--- a/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessor.java
+++ b/plc4j/protocols/s7/src/main/java/org/apache/plc4x/java/s7/netty/strategies/DefaultS7MessageProcessor.java
@@ -361,14 +361,14 @@ public class DefaultS7MessageProcessor implements S7MessageProcessor {
                         readVarPayload = (VarPayload) payload;
                         s7Payloads.add(payload);
                     } else {
-                        readVarPayload.mergePayload((VarPayload) payload);
+                        readVarPayload = readVarPayload.mergePayload((VarPayload) payload);
                     }
                 } else if(payload.getType() == ParameterType.WRITE_VAR) {
                     if(writeVarPayload == null) {
                         writeVarPayload = (VarPayload) payload;
                         s7Payloads.add(payload);
                     } else {
-                        writeVarPayload.mergePayload((VarPayload) payload);
+                        readVarPayload = writeVarPayload.mergePayload((VarPayload) payload);
                     }
                 } else {
                     s7Payloads.add(payload);
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java
index abf56c3..a93fe0f 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/S7PlcDriverTest.java
@@ -18,13 +18,11 @@ under the License.
 */
 package org.apache.plc4x.java.s7;
 
-import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.authentication.PlcUsernamePasswordAuthentication;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.s7.connection.S7PlcConnection;
 import org.apache.plc4x.test.FastTests;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
@@ -33,23 +31,39 @@ import static org.junit.Assert.assertThat;
 
 public class S7PlcDriverTest {
 
-    @Ignore("We first have to find/build some tool to help test these connections.")
+    @Test
+    @Category(FastTests.class)
+    public void getProtocolCode() {
+        assertThat(new S7PlcDriver().getProtocolCode(), equalTo("s7"));
+    }
+
+    @Test
+    @Category(FastTests.class)
+    public void getProtocolName() {
+        assertThat(new S7PlcDriver().getProtocolName(), equalTo("Siemens S7 (Basic)"));
+    }
+
     @Test
     @Category(FastTests.class)
     public void getConnection() throws PlcException {
-        S7PlcConnection s7Connection = (S7PlcConnection)
-            new PlcDriverManager().getConnection("s7://localhost/1/2");
+        S7PlcConnection s7Connection = (S7PlcConnection) new S7PlcDriver().connect("s7://localhost/1/2");
         assertThat(s7Connection.getRack(), equalTo(1));
         assertThat(s7Connection.getSlot(), equalTo(2));
     }
 
+    @Test(expected = PlcConnectionException.class)
+    @Category(FastTests.class)
+    public void getConnectionToUnknownHost() throws PlcException {
+        new S7PlcDriver().connect("s7://IHopeThisHostDoesntExistAAAAAAAAhhhhhhh/1/2");
+    }
+
     /**
      * In this test case the 's7' driver should report an invalid url format.
      */
     @Test(expected = PlcConnectionException.class)
     @Category(FastTests.class)
     public void getConnectionInvalidUrl() throws PlcConnectionException {
-        new PlcDriverManager().getConnection("s7://localhost/hurz/2");
+        new S7PlcDriver().connect("s7://localhost/hurz/2");
     }
 
     /**
@@ -59,8 +73,7 @@ public class S7PlcDriverTest {
     @Test(expected = PlcConnectionException.class)
     @Category(FastTests.class)
     public void getConnectionWithAuthentication() throws PlcConnectionException {
-        new PlcDriverManager().getConnection("s7://localhost/1/2",
-            new PlcUsernamePasswordAuthentication("user", "pass"));
+        new S7PlcDriver().connect("s7://localhost/1/2", new PlcUsernamePasswordAuthentication("user", "pass"));
     }
 
 }
diff --git a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/payloads/S7PayloadTests.java b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/payloads/S7PayloadTests.java
index 322ff47..38cb369 100644
--- a/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/payloads/S7PayloadTests.java
+++ b/plc4j/protocols/s7/src/test/java/org/apache/plc4x/java/s7/netty/model/payloads/S7PayloadTests.java
@@ -20,14 +20,18 @@ under the License.
 package org.apache.plc4x.java.s7.netty.model.payloads;
 
 import org.apache.plc4x.java.s7.netty.model.payloads.items.VarPayloadItem;
+import org.apache.plc4x.java.s7.netty.model.payloads.ssls.SslModuleIdentificationDataRecord;
 import org.apache.plc4x.java.s7.netty.model.types.DataTransportErrorCode;
 import org.apache.plc4x.java.s7.netty.model.types.DataTransportSize;
 import org.apache.plc4x.java.s7.netty.model.types.ParameterType;
+import org.apache.plc4x.java.s7.netty.model.types.SslId;
 import org.apache.plc4x.test.FastTests;
+import org.hamcrest.core.IsNull;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import java.util.ArrayList;
+import java.util.Collections;
 
 import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
 import static org.hamcrest.core.IsEqual.equalTo;
@@ -58,8 +62,71 @@ public class S7PayloadTests {
         payloadItems.add(new VarPayloadItem(DataTransportErrorCode.OK, DataTransportSize.BIT, data));
 
         VarPayload  varPayload = new VarPayload(parameterType, payloadItems);
+
         assertThat("Unexpected parameter type", varPayload.getType(), equalTo(ParameterType.DOWNLOAD_ENDED));
         assertThat("Unexpected payload items", varPayload.getItems(), contains(payloadItems.toArray()));
     }
 
+    @Test
+    @Category(FastTests.class)
+    public void mergeVarPayloads() {
+        VarPayload  primaryVarPayload = new VarPayload(ParameterType.READ_VAR, Collections.singletonList(new VarPayloadItem(DataTransportErrorCode.OK, DataTransportSize.BIT, new byte[] {(byte) 0xFF})));
+
+        assertThat(primaryVarPayload.getItems(), IsNull.notNullValue());
+        assertThat(primaryVarPayload.getItems().size(), equalTo(1));
+
+        VarPayload  secondaryVarPayload = new VarPayload(ParameterType.READ_VAR, Collections.singletonList(new VarPayloadItem(DataTransportErrorCode.OK, DataTransportSize.BIT, new byte[] {(byte) 0x11})));
+
+        assertThat(secondaryVarPayload.getItems(), IsNull.notNullValue());
+        assertThat(secondaryVarPayload.getItems().size(), equalTo(1));
+
+        VarPayload resultingPayload = primaryVarPayload.mergePayload(secondaryVarPayload);
+
+        assertThat(resultingPayload.getItems(), IsNull.notNullValue());
+        assertThat(resultingPayload.getItems().size(), equalTo(2));
+    }
+
+    @Test
+    @Category(FastTests.class)
+    public void emptyCpuServicesPayload() {
+        CpuServicesPayload cpuServicesPayload = new CpuServicesPayload(DataTransportErrorCode.OK, SslId.CPU_CHARACTERISTICS, (short) 1);
+
+        assertThat(cpuServicesPayload.getType(), equalTo(ParameterType.CPU_SERVICES));
+        assertThat(cpuServicesPayload.getReturnCode(), equalTo(DataTransportErrorCode.OK));
+        assertThat(cpuServicesPayload.getSslId(), equalTo(SslId.CPU_CHARACTERISTICS));
+        assertThat(cpuServicesPayload.getSslIndex(), equalTo((short) 1));
+        assertThat(cpuServicesPayload.getSslDataRecords(), IsNull.notNullValue());
+        assertThat(cpuServicesPayload.getSslDataRecords().size(), equalTo(0));
+    }
+
+    @Test
+    @Category(FastTests.class)
+    public void cpuServicesPayload() {
+        SslModuleIdentificationDataRecord sslModuleIdentificationDataRecord = new SslModuleIdentificationDataRecord(
+            SslModuleIdentificationDataRecord.INDEX_MODULE, "ArtNo", (short) 1, (short) 2, (short) 3);
+
+        CpuServicesPayload cpuServicesPayload = new CpuServicesPayload(DataTransportErrorCode.OK, SslId.MODULE_IDENTIFICATION, (short) 1, Collections.singletonList(sslModuleIdentificationDataRecord));
+
+        assertThat(cpuServicesPayload.getType(), equalTo(ParameterType.CPU_SERVICES));
+        assertThat(cpuServicesPayload.getReturnCode(), equalTo(DataTransportErrorCode.OK));
+        assertThat(cpuServicesPayload.getSslId(), equalTo(SslId.MODULE_IDENTIFICATION));
+        assertThat(cpuServicesPayload.getSslIndex(), equalTo((short) 1));
+        assertThat(cpuServicesPayload.getSslDataRecords(), IsNull.notNullValue());
+        assertThat(cpuServicesPayload.getSslDataRecords().size(), equalTo(1));
+    }
+
+    @Test
+    @Category(FastTests.class)
+    public void sslModuleIdentificationPayload() {
+        SslModuleIdentificationDataRecord sslModuleIdentificationDataRecord = new SslModuleIdentificationDataRecord(
+            SslModuleIdentificationDataRecord.INDEX_MODULE, "ArtNo", (short) 1, (short) 2, (short) 3);
+
+        assertThat(sslModuleIdentificationDataRecord.getIndex(), equalTo(SslModuleIdentificationDataRecord.INDEX_MODULE));
+        assertThat(sslModuleIdentificationDataRecord.getArticleNumber(), equalTo("ArtNo"));
+        assertThat(sslModuleIdentificationDataRecord.getBgType(), equalTo((short) 1));
+        assertThat(sslModuleIdentificationDataRecord.getModuleOrOsVersion(), equalTo((short) 2));
+        assertThat(sslModuleIdentificationDataRecord.getPgDescriptionFileVersion(), equalTo((short) 3));
+        assertThat(sslModuleIdentificationDataRecord.getLengthInWords(), equalTo((short) 14));
+    }
+
 }
\ No newline at end of file