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

jfeinauer pushed a commit to branch add-simple-mock-driver
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit f92d4ef3dcb21905ab08b2b5cc31d698ab907cc7
Author: Julian Feinauer <j.feina...@pragmaticminds.de>
AuthorDate: Thu Nov 1 21:06:31 2018 +0100

    First draft.
---
 .../org/apache/plc4x/java/mock/MockReader.java     | 51 ----------------------
 .../org/apache/plc4x/java/mock/MockDevice.java     |  3 ++
 .../java/org/apache/plc4x/java/mock/MockField.java |  0
 .../apache/plc4x/java/mock/MockFieldHandler.java   |  0
 .../apache/plc4x/java/mock/PlcMockConnection.java  | 30 ++++++++++---
 .../org/apache/plc4x/java/mock/PlcMockDriver.java  | 22 ++++++++--
 .../apache/plc4x/java/mock/PlcMockDriverTest.java} | 27 ++++++++----
 7 files changed, 62 insertions(+), 71 deletions(-)

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/MockDevice.java
 b/plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java
similarity index 92%
rename from 
plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java
rename to 
plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockDevice.java
index def0589..b0e1075 100644
--- 
a/plc4j/protocols/driver-bases/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
@@ -31,4 +31,7 @@ public interface MockDevice {
 
     Pair<PlcResponseCode, BaseDefaultFieldItem> read(String fieldQuery);
 
+    // TODO Implement this
+    // void write(String fieldQuery, BaseDefaultFieldItem value);
+
 }
diff --git 
a/plc4j/protocols/driver-bases/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
similarity index 100%
copy from 
plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
copy to 
plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
diff --git 
a/plc4j/protocols/driver-bases/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
similarity index 100%
rename from 
plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockFieldHandler.java
rename to 
plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/MockFieldHandler.java
diff --git 
a/plc4j/protocols/driver-bases/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
similarity index 70%
rename from 
plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockConnection.java
rename to 
plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/PlcMockConnection.java
index 9e834ec..277f69f 100644
--- 
a/plc4j/protocols/driver-bases/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
@@ -18,25 +18,34 @@ under the License.
 */
 package org.apache.plc4x.java.mock;
 
+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.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;
 
-public class PlcMockConnection implements PlcConnection {
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
+public class PlcMockConnection implements PlcConnection, PlcReader {
+
+    private final String name;
     private final PlcAuthentication authentication;
 
     private boolean isConnected = false;
     private MockDevice device;
 
-    PlcMockConnection(PlcAuthentication authentication) {
+    PlcMockConnection(String name, PlcAuthentication authentication) {
+        this.name = name;
         this.authentication = authentication;
     }
 
@@ -87,7 +96,14 @@ public class PlcMockConnection implements PlcConnection {
 
     @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) 
{
+        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));
     }
 
     @Override
diff --git 
a/plc4j/protocols/driver-bases/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
similarity index 63%
rename from 
plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/PlcMockDriver.java
rename to 
plc4j/protocols/test/src/main/java/org/apache/plc4x/java/mock/PlcMockDriver.java
index c693b84..3a38a86 100644
--- 
a/plc4j/protocols/driver-bases/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
@@ -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.WeakHashMap;
+
+/**
+ * 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 string).
+ * This allows for efficient Mocking.
+ */
 public class PlcMockDriver implements PlcDriver {
 
+    private Map<String, PlcConnection> connectionMap = new WeakHashMap<>();
+
     @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(name, authentication));
     }
 
 }
diff --git 
a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
 
b/plc4j/protocols/test/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java
similarity index 60%
rename from 
plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
rename to 
plc4j/protocols/test/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java
index e570b2b..b2cae5e 100644
--- 
a/plc4j/protocols/driver-bases/test/src/main/java/org/apache/plc4x/java/mock/MockField.java
+++ 
b/plc4j/protocols/test/src/test/java/org/apache/plc4x/java/mock/PlcMockDriverTest.java
@@ -19,18 +19,27 @@
 
 package org.apache.plc4x.java.mock;
 
-import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.PlcConnection;
+import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.junit.Test;
 
-public class MockField implements PlcField {
+import static org.junit.Assert.*;
 
-    private final String fieldQuery;
 
-    public MockField(String fieldQuery) {
-        this.fieldQuery = fieldQuery;
-    }
+public class PlcMockDriverTest {
+
+    private final PlcMockDriver driver = new PlcMockDriver();
+
+    @Test
+    public void fetchTwoConnections_areEqual() throws PlcConnectionException {
+        PlcConnection conn1 = driver.connect("mock:123");
+        PlcConnection conn2 = driver.connect("mock:123");
 
-    public String getFieldQuery() {
-        return fieldQuery;
+        assertEquals(conn1, conn2);
     }
 
-}
+    @Test
+    public void exampleUsage() {
+
+    }
+}
\ No newline at end of file

Reply via email to