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 <christofer.d...@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