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