You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/11/24 17:26:55 UTC
[incubator-plc4x] branch develop updated: [plc4j] cleanup mock code
and moved it completely to driver-bases-test
This is an automated email from the ASF dual-hosted git repository.
sruehl 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 11e4e8f [plc4j] cleanup mock code and moved it completely to driver-bases-test
11e4e8f is described below
commit 11e4e8f0e85e8fea33a8c166422d001b67b3df13
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Sat Nov 24 18:18:54 2018 +0100
[plc4j] cleanup mock code and moved it completely to driver-bases-test
---
.../org/apache/plc4x/java/mock/MockDevice.java | 18 +-
.../java/org/apache/plc4x/java/mock/MockField.java | 13 ++
.../apache/plc4x/java/mock/MockFieldHandler.java | 70 ++++++++
.../org/apache/plc4x/java/mock/MockFieldItem.java | 0
.../org/apache/plc4x/java/mock/MockReader.java | 51 ------
.../apache/plc4x/java/mock/PlcMockConnection.java | 111 ++++++++++--
.../org/apache/plc4x/java/mock/PlcMockDriver.java | 22 ++-
.../apache/plc4x/java/mock/PlcMockDriverTest.java | 0
plc4j/protocols/pom.xml | 4 +-
plc4j/protocols/test/pom.xml | 51 ------
.../org/apache/plc4x/java/mock/MockDevice.java | 50 ------
.../java/org/apache/plc4x/java/mock/MockField.java | 49 ------
.../apache/plc4x/java/mock/MockFieldHandler.java | 103 ------------
.../apache/plc4x/java/mock/PlcMockConnection.java | 186 ---------------------
.../org/apache/plc4x/java/mock/PlcMockDriver.java | 63 -------
.../services/org.apache.plc4x.java.spi.PlcDriver | 19 ---
plc4j/utils/opm/pom.xml | 5 +-
17 files changed, 216 insertions(+), 599 deletions(-)
diff --git a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java
index def0589..999a4ac 100644
--- a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java
+++ b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java
@@ -20,10 +20,15 @@
package org.apache.plc4x.java.mock;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
+import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
import org.apache.plc4x.java.api.types.PlcResponseCode;
import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
+import java.util.Collection;
+import java.util.function.Consumer;
+
/**
* Mock Object to do assertions on.
*/
@@ -31,4 +36,15 @@ public interface MockDevice {
Pair<PlcResponseCode, BaseDefaultFieldItem> read(String fieldQuery);
+ PlcResponseCode write(String fieldQuery, Object value);
+
+ Pair<PlcResponseCode, PlcSubscriptionHandle> subscribe(String fieldQuery);
+
+ void unsubscribe();
+
+ // TODO: this might not be right here as you are not really register at the device, rather on the connection
+ PlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, Collection<PlcSubscriptionHandle> handles);
+
+ // TODO: this might not be right here as you are not really register at the device, rather on the connection
+ void unregister(PlcConsumerRegistration registration);
}
diff --git a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockField.java b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
index e570b2b..b7dccc9 100644
--- a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
+++ b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
@@ -21,16 +21,29 @@ package org.apache.plc4x.java.mock;
import org.apache.plc4x.java.api.model.PlcField;
+import java.util.List;
+
public class MockField implements PlcField {
private final String fieldQuery;
+ private final List<Object> values;
+
public MockField(String fieldQuery) {
this.fieldQuery = fieldQuery;
+ values = null;
+ }
+
+ public MockField(String fieldQuery, List<Object> values) {
+ this.fieldQuery = fieldQuery;
+ this.values = values;
}
public String getFieldQuery() {
return fieldQuery;
}
+ public List<Object> getValues() {
+ return values;
+ }
}
diff --git a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockFieldHandler.java b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockFieldHandler.java
index a8893e2..055769f 100644
--- a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockFieldHandler.java
+++ b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockFieldHandler.java
@@ -22,6 +22,7 @@ package org.apache.plc4x.java.mock;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
import org.apache.plc4x.java.api.model.PlcField;
import org.apache.plc4x.java.base.connection.DefaultPlcFieldHandler;
+import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
public class MockFieldHandler extends DefaultPlcFieldHandler {
@@ -30,4 +31,73 @@ public class MockFieldHandler extends DefaultPlcFieldHandler {
return new MockField(fieldQuery);
}
+ @Override
+ public BaseDefaultFieldItem encodeBoolean(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeByte(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeShort(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeInteger(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeBigInteger(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeLong(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeFloat(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeBigDecimal(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeDouble(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeString(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeTime(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeDate(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeDateTime(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
+
+ @Override
+ public BaseDefaultFieldItem encodeByteArray(PlcField field, Object[] values) {
+ return new MockFieldItem(values);
+ }
}
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockFieldItem.java b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockFieldItem.java
similarity index 100%
rename from plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockFieldItem.java
rename to plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockFieldItem.java
diff --git a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockReader.java b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockReader.java
deleted file mode 100644
index 10febee..0000000
--- a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockReader.java
+++ /dev/null
@@ -1,51 +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.mock;
-
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.base.messages.DefaultPlcReadRequest;
-import org.apache.plc4x.java.base.messages.DefaultPlcReadResponse;
-import org.apache.plc4x.java.base.messages.PlcReader;
-import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
-
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-public class MockReader implements PlcReader {
-
- private final MockDevice device;
-
- public MockReader(MockDevice device) {
- this.device = device;
- }
-
- @Override
- public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
- Map<String, Pair<PlcResponseCode, BaseDefaultFieldItem>> response = readRequest.getFieldNames().stream()
- .collect(Collectors.toMap(Function.identity(), name -> device.read(((MockField) readRequest.getField(name)).getFieldQuery())));
- return CompletableFuture.completedFuture(new DefaultPlcReadResponse((DefaultPlcReadRequest)readRequest, response));
- }
-
-}
diff --git a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockConnection.java b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockConnection.java
index 9e834ec..9dc802f 100644
--- a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockConnection.java
+++ b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockConnection.java
@@ -18,22 +18,33 @@ under the License.
*/
package org.apache.plc4x.java.mock;
+import org.apache.commons.lang3.Validate;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.authentication.PlcAuthentication;
-import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-import org.apache.plc4x.java.api.exceptions.PlcUnsupportedOperationException;
-import org.apache.plc4x.java.api.messages.PlcReadRequest;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
-import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
-import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.*;
import org.apache.plc4x.java.api.metadata.PlcConnectionMetadata;
-import org.apache.plc4x.java.base.messages.DefaultPlcReadRequest;
+import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
+import org.apache.plc4x.java.api.types.PlcResponseCode;
+import org.apache.plc4x.java.base.messages.*;
+import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-public class PlcMockConnection implements PlcConnection {
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+public class PlcMockConnection implements PlcConnection, PlcReader, PlcWriter, PlcSubscriber {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PlcMockConnection.class);
private final PlcAuthentication authentication;
- private boolean isConnected = false;
private MockDevice device;
PlcMockConnection(PlcAuthentication authentication) {
@@ -45,6 +56,7 @@ public class PlcMockConnection implements PlcConnection {
}
public void setDevice(MockDevice device) {
+ LOGGER.info("Set Mock Devie on Mock Connection {} with device {}", this, device);
this.device = device;
}
@@ -55,14 +67,12 @@ public class PlcMockConnection implements PlcConnection {
@Override
public boolean isConnected() {
- // is connected if a device is set
return device != null;
}
@Override
public void close() {
- // unset device
- this.device = null;
+ LOGGER.info("Closing MockConnection with device {}", device);
}
@Override
@@ -75,34 +85,99 @@ public class PlcMockConnection implements PlcConnection {
@Override
public boolean canWrite() {
- return false;
+ return true;
}
@Override
public boolean canSubscribe() {
- return false;
+ return true;
}
};
}
@Override
public PlcReadRequest.Builder readRequestBuilder() {
- return new DefaultPlcReadRequest.Builder(new MockReader(device), new MockFieldHandler());
+ return new DefaultPlcReadRequest.Builder(this, new MockFieldHandler());
+ }
+
+ @Override
+ public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
+ return CompletableFuture.supplyAsync(() -> {
+ Validate.notNull(device, "No device is set in the mock connection!");
+ LOGGER.debug("Sending read request to MockDevice");
+ Map<String, Pair<PlcResponseCode, BaseDefaultFieldItem>> response = readRequest.getFieldNames().stream()
+ .collect(Collectors.toMap(
+ Function.identity(),
+ name -> device.read(((MockField) readRequest.getField(name)).getFieldQuery())
+ )
+ );
+ return new DefaultPlcReadResponse((DefaultPlcReadRequest) readRequest, response);
+ });
+ }
+
+ @Override
+ public CompletableFuture<PlcWriteResponse> write(PlcWriteRequest writeRequest) {
+ return CompletableFuture.supplyAsync(() -> {
+ Validate.notNull(device, "No device is set in the mock connection!");
+ LOGGER.debug("Sending write request to MockDevice");
+ Map<String, PlcResponseCode> response = writeRequest.getFieldNames().stream()
+ .collect(Collectors.toMap(
+ Function.identity(),
+ name -> device.write(((MockField) writeRequest.getField(name)).getFieldQuery(), ((MockField) writeRequest.getField(name)).getValues())
+ )
+ );
+ return new DefaultPlcWriteResponse((DefaultPlcWriteRequest) writeRequest, response);
+ });
+ }
+
+ @Override
+ public CompletableFuture<PlcSubscriptionResponse> subscribe(PlcSubscriptionRequest subscriptionRequest) {
+ return CompletableFuture.supplyAsync(() -> {
+ Validate.notNull(device, "No device is set in the mock connection!");
+ LOGGER.debug("Sending subsribe request to MockDevice");
+ Map<String, Pair<PlcResponseCode, PlcSubscriptionHandle>> response = subscriptionRequest.getFieldNames().stream()
+ .collect(Collectors.toMap(
+ Function.identity(),
+ name -> device.subscribe(((MockField) subscriptionRequest.getField(name)).getFieldQuery())
+ )
+ );
+ return new DefaultPlcSubscriptionResponse((DefaultPlcSubscriptionRequest) subscriptionRequest, response);
+ });
+ }
+
+ @Override
+ public CompletableFuture<PlcUnsubscriptionResponse> unsubscribe(PlcUnsubscriptionRequest unsubscriptionRequest) {
+ return CompletableFuture.supplyAsync(() -> {
+ Validate.notNull(device, "No device is set in the mock connection!");
+ LOGGER.debug("Sending subsribe request to MockDevice");
+ device.unsubscribe();
+ return new DefaultPlcUnsubscriptionResponse((DefaultPlcUnsubscriptionRequest) unsubscriptionRequest);
+ });
+ }
+
+ @Override
+ public PlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, Collection<PlcSubscriptionHandle> handles) {
+ return device.register(consumer, handles);
+ }
+
+ @Override
+ public void unregister(PlcConsumerRegistration registration) {
+ device.unregister(registration);
}
@Override
public PlcWriteRequest.Builder writeRequestBuilder() {
- throw new PlcUnsupportedOperationException("Write not supported by Mock Driver");
+ return new DefaultPlcWriteRequest.Builder(this, new MockFieldHandler());
}
@Override
public PlcSubscriptionRequest.Builder subscriptionRequestBuilder() {
- throw new PlcUnsupportedOperationException("Subscription not supported by Mock Driver");
+ return new DefaultPlcSubscriptionRequest.Builder(this, new MockFieldHandler());
}
@Override
public PlcUnsubscriptionRequest.Builder unsubscriptionRequestBuilder() {
- throw new PlcUnsupportedOperationException("Subscription not supported by Mock Driver");
+ return new DefaultPlcUnsubscriptionRequest.Builder(this);
}
public PlcAuthentication getAuthentication() {
diff --git a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockDriver.java b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockDriver.java
index c693b84..3476794 100644
--- a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockDriver.java
+++ b/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockDriver.java
@@ -23,8 +23,18 @@ import org.apache.plc4x.java.api.authentication.PlcAuthentication;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Mocking Driver that keeps a Map of references to Connections so that you can fetch a reference to a connection
+ * which will be acquired by someone else (via the connection string).
+ * This allows for efficient Mocking.
+ */
public class PlcMockDriver implements PlcDriver {
+ private Map<String, PlcConnection> connectionMap = new ConcurrentHashMap<>();
+
@Override
public String getProtocolCode() {
return "mock";
@@ -36,13 +46,17 @@ public class PlcMockDriver implements PlcDriver {
}
@Override
- public PlcConnection connect(String url) {
- return new PlcMockConnection(null);
+ public PlcConnection connect(String url) throws PlcConnectionException {
+ return connect(url, null);
}
@Override
- public PlcConnection connect(String url, PlcAuthentication authentication) {
- return new PlcMockConnection(authentication);
+ public PlcConnection connect(String url, PlcAuthentication authentication) throws PlcConnectionException {
+ String deviceName = url.substring(5);
+ if (deviceName.isEmpty()) {
+ throw new PlcConnectionException("Invalid URL: no device name given.");
+ }
+ return connectionMap.computeIfAbsent(deviceName, name -> new PlcMockConnection(authentication));
}
}
diff --git a/plc4j/protocols/test/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java b/plc4j/protocols/driver-bases/test/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java
similarity index 100%
rename from plc4j/protocols/test/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java
rename to plc4j/protocols/driver-bases/test/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java
diff --git a/plc4j/protocols/pom.xml b/plc4j/protocols/pom.xml
index f4cbe1d..2d18946 100644
--- a/plc4j/protocols/pom.xml
+++ b/plc4j/protocols/pom.xml
@@ -17,7 +17,8 @@
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">
+<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>
@@ -43,7 +44,6 @@
<module>iso-tp</module>
<module>modbus</module>
<module>s7</module>
- <module>test</module>
<module>benchmarks</module>
</modules>
diff --git a/plc4j/protocols/test/pom.xml b/plc4j/protocols/test/pom.xml
deleted file mode 100644
index d415346..0000000
--- a/plc4j/protocols/test/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-<?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>plc4j-protocols</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>plc4j-protocol-test</artifactId>
- <name>PLC4J: Protocol: TEST</name>
- <description>Test implementation of a PLC4X driver.</description>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-api</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-protocol-driver-base</artifactId>
- <version>0.3.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- </dependency>
- </dependencies>
-
-</project>
\ No newline at end of file
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java
deleted file mode 100644
index 999a4ac..0000000
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java
+++ /dev/null
@@ -1,50 +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.mock;
-
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
-import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
-import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
-import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
-
-import java.util.Collection;
-import java.util.function.Consumer;
-
-/**
- * Mock Object to do assertions on.
- */
-public interface MockDevice {
-
- Pair<PlcResponseCode, BaseDefaultFieldItem> read(String fieldQuery);
-
- PlcResponseCode write(String fieldQuery, Object value);
-
- Pair<PlcResponseCode, PlcSubscriptionHandle> subscribe(String fieldQuery);
-
- void unsubscribe();
-
- // TODO: this might not be right here as you are not really register at the device, rather on the connection
- PlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, Collection<PlcSubscriptionHandle> handles);
-
- // TODO: this might not be right here as you are not really register at the device, rather on the connection
- void unregister(PlcConsumerRegistration registration);
-}
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockField.java b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
deleted file mode 100644
index b7dccc9..0000000
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
+++ /dev/null
@@ -1,49 +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.mock;
-
-import org.apache.plc4x.java.api.model.PlcField;
-
-import java.util.List;
-
-public class MockField implements PlcField {
-
- private final String fieldQuery;
-
- private final List<Object> values;
-
- public MockField(String fieldQuery) {
- this.fieldQuery = fieldQuery;
- values = null;
- }
-
- public MockField(String fieldQuery, List<Object> values) {
- this.fieldQuery = fieldQuery;
- this.values = values;
- }
-
- public String getFieldQuery() {
- return fieldQuery;
- }
-
- public List<Object> getValues() {
- return values;
- }
-}
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockFieldHandler.java b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockFieldHandler.java
deleted file mode 100644
index 055769f..0000000
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockFieldHandler.java
+++ /dev/null
@@ -1,103 +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.mock;
-
-import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
-import org.apache.plc4x.java.api.model.PlcField;
-import org.apache.plc4x.java.base.connection.DefaultPlcFieldHandler;
-import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
-
-public class MockFieldHandler extends DefaultPlcFieldHandler {
-
- @Override
- public PlcField createField(String fieldQuery) throws PlcInvalidFieldException {
- return new MockField(fieldQuery);
- }
-
- @Override
- public BaseDefaultFieldItem encodeBoolean(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeByte(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeShort(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeInteger(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeBigInteger(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeLong(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeFloat(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeBigDecimal(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeDouble(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeString(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeTime(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeDate(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeDateTime(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-
- @Override
- public BaseDefaultFieldItem encodeByteArray(PlcField field, Object[] values) {
- return new MockFieldItem(values);
- }
-}
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/PlcMockConnection.java b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/PlcMockConnection.java
deleted file mode 100644
index 9dc802f..0000000
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/PlcMockConnection.java
+++ /dev/null
@@ -1,186 +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.mock;
-
-import org.apache.commons.lang3.Validate;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.authentication.PlcAuthentication;
-import org.apache.plc4x.java.api.messages.*;
-import org.apache.plc4x.java.api.metadata.PlcConnectionMetadata;
-import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
-import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
-import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.base.messages.*;
-import org.apache.plc4x.java.base.messages.items.BaseDefaultFieldItem;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-public class PlcMockConnection implements PlcConnection, PlcReader, PlcWriter, PlcSubscriber {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(PlcMockConnection.class);
-
- private final PlcAuthentication authentication;
-
- private MockDevice device;
-
- PlcMockConnection(PlcAuthentication authentication) {
- this.authentication = authentication;
- }
-
- public MockDevice getDevice() {
- return device;
- }
-
- public void setDevice(MockDevice device) {
- LOGGER.info("Set Mock Devie on Mock Connection {} with device {}", this, device);
- this.device = device;
- }
-
- @Override
- public void connect() {
- // do nothing
- }
-
- @Override
- public boolean isConnected() {
- return device != null;
- }
-
- @Override
- public void close() {
- LOGGER.info("Closing MockConnection with device {}", device);
- }
-
- @Override
- public PlcConnectionMetadata getMetadata() {
- return new PlcConnectionMetadata() {
- @Override
- public boolean canRead() {
- return true;
- }
-
- @Override
- public boolean canWrite() {
- return true;
- }
-
- @Override
- public boolean canSubscribe() {
- return true;
- }
- };
- }
-
- @Override
- public PlcReadRequest.Builder readRequestBuilder() {
- return new DefaultPlcReadRequest.Builder(this, new MockFieldHandler());
- }
-
- @Override
- public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
- return CompletableFuture.supplyAsync(() -> {
- Validate.notNull(device, "No device is set in the mock connection!");
- LOGGER.debug("Sending read request to MockDevice");
- Map<String, Pair<PlcResponseCode, BaseDefaultFieldItem>> response = readRequest.getFieldNames().stream()
- .collect(Collectors.toMap(
- Function.identity(),
- name -> device.read(((MockField) readRequest.getField(name)).getFieldQuery())
- )
- );
- return new DefaultPlcReadResponse((DefaultPlcReadRequest) readRequest, response);
- });
- }
-
- @Override
- public CompletableFuture<PlcWriteResponse> write(PlcWriteRequest writeRequest) {
- return CompletableFuture.supplyAsync(() -> {
- Validate.notNull(device, "No device is set in the mock connection!");
- LOGGER.debug("Sending write request to MockDevice");
- Map<String, PlcResponseCode> response = writeRequest.getFieldNames().stream()
- .collect(Collectors.toMap(
- Function.identity(),
- name -> device.write(((MockField) writeRequest.getField(name)).getFieldQuery(), ((MockField) writeRequest.getField(name)).getValues())
- )
- );
- return new DefaultPlcWriteResponse((DefaultPlcWriteRequest) writeRequest, response);
- });
- }
-
- @Override
- public CompletableFuture<PlcSubscriptionResponse> subscribe(PlcSubscriptionRequest subscriptionRequest) {
- return CompletableFuture.supplyAsync(() -> {
- Validate.notNull(device, "No device is set in the mock connection!");
- LOGGER.debug("Sending subsribe request to MockDevice");
- Map<String, Pair<PlcResponseCode, PlcSubscriptionHandle>> response = subscriptionRequest.getFieldNames().stream()
- .collect(Collectors.toMap(
- Function.identity(),
- name -> device.subscribe(((MockField) subscriptionRequest.getField(name)).getFieldQuery())
- )
- );
- return new DefaultPlcSubscriptionResponse((DefaultPlcSubscriptionRequest) subscriptionRequest, response);
- });
- }
-
- @Override
- public CompletableFuture<PlcUnsubscriptionResponse> unsubscribe(PlcUnsubscriptionRequest unsubscriptionRequest) {
- return CompletableFuture.supplyAsync(() -> {
- Validate.notNull(device, "No device is set in the mock connection!");
- LOGGER.debug("Sending subsribe request to MockDevice");
- device.unsubscribe();
- return new DefaultPlcUnsubscriptionResponse((DefaultPlcUnsubscriptionRequest) unsubscriptionRequest);
- });
- }
-
- @Override
- public PlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, Collection<PlcSubscriptionHandle> handles) {
- return device.register(consumer, handles);
- }
-
- @Override
- public void unregister(PlcConsumerRegistration registration) {
- device.unregister(registration);
- }
-
- @Override
- public PlcWriteRequest.Builder writeRequestBuilder() {
- return new DefaultPlcWriteRequest.Builder(this, new MockFieldHandler());
- }
-
- @Override
- public PlcSubscriptionRequest.Builder subscriptionRequestBuilder() {
- return new DefaultPlcSubscriptionRequest.Builder(this, new MockFieldHandler());
- }
-
- @Override
- public PlcUnsubscriptionRequest.Builder unsubscriptionRequestBuilder() {
- return new DefaultPlcUnsubscriptionRequest.Builder(this);
- }
-
- public PlcAuthentication getAuthentication() {
- return authentication;
- }
-}
diff --git a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/PlcMockDriver.java b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/PlcMockDriver.java
deleted file mode 100644
index 3ff5dd4..0000000
--- a/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/PlcMockDriver.java
+++ /dev/null
@@ -1,63 +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.mock;
-
-import org.apache.plc4x.java.spi.PlcDriver;
-import org.apache.plc4x.java.api.authentication.PlcAuthentication;
-import org.apache.plc4x.java.api.PlcConnection;
-import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
-
-import java.util.Map;
-import java.util.WeakHashMap;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Mocking Driver that keeps a Map of references to Connections so that you can fetch a reference to a connection
- * which will be acquired by someone else (via the connection string).
- * This allows for efficient Mocking.
- */
-public class PlcMockDriver implements PlcDriver {
-
- private Map<String, PlcConnection> connectionMap = new ConcurrentHashMap<>();
-
- @Override
- public String getProtocolCode() {
- return "mock";
- }
-
- @Override
- public String getProtocolName() {
- return "Mock Protocol Implementation";
- }
-
- @Override
- public PlcConnection connect(String url) throws PlcConnectionException {
- return connect(url, null);
- }
-
- @Override
- public PlcConnection connect(String url, PlcAuthentication authentication) throws PlcConnectionException {
- String deviceName = url.substring(5);
- if (deviceName.isEmpty()) {
- throw new PlcConnectionException("Invalid URL: no device name given.");
- }
- return connectionMap.computeIfAbsent(deviceName, name -> new PlcMockConnection(authentication));
- }
-
-}
diff --git a/plc4j/protocols/test/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver b/plc4j/protocols/test/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
deleted file mode 100644
index ebff4aa..0000000
--- a/plc4j/protocols/test/src/main/resources/META-INF/services/org.apache.plc4x.java.spi.PlcDriver
+++ /dev/null
@@ -1,19 +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.
-#
-org.apache.plc4x.java.mock.PlcMockDriver
diff --git a/plc4j/utils/opm/pom.xml b/plc4j/utils/opm/pom.xml
index a0fbda1..4efbf62 100644
--- a/plc4j/utils/opm/pom.xml
+++ b/plc4j/utils/opm/pom.xml
@@ -17,7 +17,8 @@
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">
+<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>
@@ -75,7 +76,7 @@
</dependency>
<dependency>
<groupId>org.apache.plc4x</groupId>
- <artifactId>plc4j-protocol-test</artifactId>
+ <artifactId>plc4j-protocol-driver-base-test</artifactId>
<version>0.3.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>