Skip to content

Commit

Permalink
Merge pull request #5
Browse files Browse the repository at this point in the history
This closes #5
  • Loading branch information
dlaboss committed Feb 26, 2018
2 parents 5dd2fb9 + 02197e8 commit 3927527
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ Licensed to the Apache Software Foundation (ASF) under one
public class PlcConnectionAdapter implements AutoCloseable {

private static final Logger logger = LoggerFactory.getLogger(PlcConnectionAdapter.class);
private static final Class[] allowedDataTypes = new Class[]{Boolean.class, Byte.class, Short.class, Integer.class, Float.class, String.class, Calendar.class};
private static final Class<?>[] allowedDataTypes = new Class[]{Boolean.class, Byte.class, Short.class, Integer.class, Float.class, String.class, Calendar.class};

private String plcConnectionUrl;
private PlcConnection plcConnection;
Expand Down Expand Up @@ -203,7 +203,7 @@ public void accept(JsonObject jo) {
}

static void checkDatatype(Class<?> cls) {
for (Class check: allowedDataTypes) {
for (Class<?> check: allowedDataTypes) {
if (check == cls)
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,21 @@ Licensed to the Apache Software Foundation (ASF) under one
*/
package org.apache.plc4x.edgent;

import com.google.gson.JsonObject;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.hamcrest.core.IsNull.notNullValue;
import static org.hamcrest.core.IsNull.nullValue;
import static org.hamcrest.core.IsSame.sameInstance;
import static org.hamcrest.object.IsCompatibleType.typeCompatibleWith;
import static org.junit.Assert.assertThat;

import java.lang.reflect.Array;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

import org.apache.edgent.function.Consumer;
import org.apache.edgent.function.Function;
import org.apache.edgent.function.Supplier;
Expand All @@ -38,25 +52,12 @@ Licensed to the Apache Software Foundation (ASF) under one
import org.junit.Test;
import org.junit.experimental.categories.Category;

import java.lang.reflect.Array;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNot.not;
import static org.hamcrest.core.IsNull.notNullValue;
import static org.hamcrest.core.IsNull.nullValue;
import static org.hamcrest.core.IsSame.sameInstance;
import static org.hamcrest.object.IsCompatibleType.typeCompatibleWith;
import static org.junit.Assert.assertThat;
import com.google.gson.JsonObject;

public class PlcConnectionAdapterTest {

protected MockConnection getMockConnection() throws PlcConnectionException {
return (MockConnection) new PlcDriverManager().getConnection("mock://some-cool-url");
return (MockConnection) new PlcDriverManager().getConnection("mock-for-edgent-integration://some-cool-url");
}

/*
Expand Down Expand Up @@ -123,7 +124,6 @@ private <T> void checkRead(MockConnection connection, TypeSafePlcReadRequest<T>
assertThat(value, equalTo(response.getResponseItems().get(0).getValues().get(0)));
}

@SuppressWarnings("unchecked")
private <T> void checkWrite(MockConnection connection, TypeSafePlcWriteRequest<T> request, T value) throws InterruptedException, ExecutionException {
// this is really a tests of our mock tooling but knowing it's behaving as expected
// will help identify problems in the adapter/supplier/consumer
Expand All @@ -134,20 +134,21 @@ private <T> void checkWrite(MockConnection connection, TypeSafePlcWriteRequest<T
assertThat(cf.isDone(), is(true));
PlcWriteResponse response = cf.get();
assertThat(response, notNullValue());
T writtenData = (T) connection.getDataValue(request.getRequestItems().get(0).getAddress());
Object writtenData = connection.getDataValue(request.getRequestItems().get(0).getAddress());
if (writtenData.getClass().isArray()) {
writtenData = (T) Array.get(writtenData, 0);
writtenData = Array.get(writtenData, 0);
}
if (List.class.isAssignableFrom(writtenData.getClass())) {
writtenData = (T) ((List) writtenData).get(0);
@SuppressWarnings("unchecked")
List<Object> writtenDataList = (List<Object>) writtenData;
writtenData = writtenDataList.get(0);
}
assertThat(value, equalTo(writtenData));
}

/*
* Verify the adapter yields the appropriate PlcReadRequest for each type and that it works.
*/
@SuppressWarnings("unchecked")
@Test
@Category(FastTests.class)
public void testNewPlcReadRequest() throws Exception {
Expand Down Expand Up @@ -225,7 +226,6 @@ public void testNewPlcReadRequest() throws Exception {
/*
* Verify the adapter yields the appropriate PlcWriteRequest for each type and that it works.
*/
@SuppressWarnings("unchecked")
@Test
@Category(FastTests.class)
public void testNewPlcWriteRequest() throws Exception {
Expand Down Expand Up @@ -297,7 +297,6 @@ public void testNewPlcWriteRequest() throws Exception {
/*
* test PlcConnectionAdapter.newSupplier
*/
@SuppressWarnings("unchecked")
@Test
@Category(FastTests.class)
public void testNewSupplier() throws Exception {
Expand Down Expand Up @@ -337,7 +336,6 @@ public void testNewSupplier() throws Exception {
/*
* test PlcConnectionAdapter.newSupplier with read exception
*/
@SuppressWarnings("unchecked")
@Test
@Category(FastTests.class)
public void testNewSupplierNeg() throws Exception {
Expand Down Expand Up @@ -379,7 +377,6 @@ private static <T> void checkSupplier(int readFailureCountTrigger, MockConnectio
/*
* test PlcConnectionAdapter.newConsumer(address)
*/
@SuppressWarnings("unchecked")
@Test
@Category(FastTests.class)
public void testNewConsumer1() throws Exception {
Expand Down Expand Up @@ -415,7 +412,6 @@ public void testNewConsumer1() throws Exception {
/*
* test PlcConnectionAdapter.newConsumer(address) with write exception
*/
@SuppressWarnings("unchecked")
@Test
@Category(FastTests.class)
public void testNewConsumer1Neg() throws Exception {
Expand All @@ -436,21 +432,24 @@ static <T> void checkConsumer(MockConnection connection, Address address, Consum
checkConsumer(0, connection, address, consumer, values);
}

@SuppressWarnings("unchecked")
private static <T> void checkConsumer(int writeFailureCountTrigger, MockConnection connection, Address address, Consumer<T> consumer, Object... values) throws Exception {
// verify that a write failure doesn't kill the consumer
// it logs (not verified) but keeps working for the subsequent writes
connection.setWriteException(writeFailureCountTrigger, "This is a mock write exception");
int writeCount = 0;
Object previousValue = null;
for (Object value : values) {
consumer.accept((T) value);
T writtenData = (T) connection.getDataValue(address);
@SuppressWarnings("unchecked")
T tValue = (T) value;
consumer.accept(tValue);
Object writtenData = connection.getDataValue(address);
if (List.class.isAssignableFrom(writtenData.getClass())) {
writtenData = (T) ((List) writtenData).get(0);
@SuppressWarnings("unchecked")
List<Object> writtenDataList = (List<Object>) writtenData;
writtenData = writtenDataList.get(0);
}
if (writtenData.getClass().isArray()) {
writtenData = (T) Array.get(writtenData, 0);
writtenData = Array.get(writtenData, 0);
}
// System.out.println("checkConsumer"+(writeFailureCountTrigger > 0 ? "NEG" : "")+": value:"+value+" writtenData:"+writtenData);
if (writeFailureCountTrigger <= 0)
Expand Down Expand Up @@ -545,13 +544,15 @@ else if (value instanceof String)

consumer.accept(jo);

@SuppressWarnings("unchecked")
T writtenData = (T) connection.getDataValue(address);
Object writtenData = connection.getDataValue(address);
if (writtenData.getClass().isArray()) {
writtenData = (T) Array.get(writtenData, 0);
Object[] writtenDataArray = (Object[]) writtenData;
writtenData = Array.get((Object[]) writtenDataArray, 0);
}
if (List.class.isAssignableFrom(writtenData.getClass())) {
writtenData = (T) ((List) writtenData).get(0);
@SuppressWarnings("unchecked")
List<Object> writtenDataList = (List<Object>) writtenData;
writtenData = writtenDataList.get(0);
}
// System.out.println("checkConsumerJson"+(writeFailureCountTrigger > 0 ? "NEG" : "")+": value:"+value+" writtenData:"+writtenData);
if (writeFailureCountTrigger <= 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,8 @@ Licensed to the Apache Software Foundation (ASF) under one

public class PlcFunctionsTest {

// TODO figure out how to get these run via Eclipse (org.junit.jupiter.api?) and remove this
// Ah... Junit 5... needs newer Eclipse (newer than neon 1.a)
public static void main(String[] args) throws Exception {
PlcFunctionsTest t = new PlcFunctionsTest();
t.testSupplier();
t.testNewConsumer1();
t.testNewConsumer2();
System.out.println("SUCCESS");
}

protected MockConnection getMockConnection() throws PlcConnectionException {
return (MockConnection) new PlcDriverManager().getConnection("mock://some-cool-url");
return (MockConnection) new PlcDriverManager().getConnection("mock-for-edgent-integration://some-cool-url");
}

/*
Expand All @@ -59,7 +49,7 @@ public void testSupplier() throws Exception {
PlcConnectionAdapter adapter = new PlcConnectionAdapter(getMockConnection());
MockConnection connection = (MockConnection) adapter.getConnection();

Supplier supplier;
Supplier<?> supplier;

supplier = PlcFunctions.booleanSupplier(adapter, addressStr);
PlcConnectionAdapterTest.checkSupplier(connection, address, (Supplier<Boolean>)supplier, true, false);
Expand All @@ -85,7 +75,6 @@ public void testSupplier() throws Exception {
/*
* test PlcConnectionAdapter.newConsumer(address)
*/
@SuppressWarnings("unchecked")
@Test
@Category(FastTests.class)
public void testNewConsumer1() throws Exception {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@ Licensed to the Apache Software Foundation (ASF) under one
*/
package org.apache.plc4x.edgent.mock;

import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;

import org.apache.plc4x.java.api.authentication.PlcAuthentication;
import org.apache.plc4x.java.api.connection.AbstractPlcConnection;
import org.apache.plc4x.java.api.connection.PlcReader;
Expand All @@ -40,9 +47,6 @@ Licensed to the Apache Software Foundation (ASF) under one
import org.apache.plc4x.java.api.model.Address;
import org.apache.plc4x.java.api.types.ResponseCode;

import java.util.*;
import java.util.concurrent.CompletableFuture;

public class MockConnection extends AbstractPlcConnection implements PlcReader, PlcWriter {

private final String url;
Expand Down Expand Up @@ -103,15 +107,19 @@ public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
cf.completeExceptionally(new PlcIoException(readExceptionMsg));
return cf;
}
List<ReadResponseItem<?>> responseItems = new LinkedList<>();
for (ReadRequestItem requestItem : readRequest.getRequestItems()) {
ReadResponseItem responseItem = new ReadResponseItem(requestItem, ResponseCode.OK,
List<ReadResponseItem<Object>> responseItems = new LinkedList<>();
for (ReadRequestItem<?> reqItem : readRequest.getRequestItems()) {
@SuppressWarnings("unchecked")
ReadRequestItem<Object> requestItem = (ReadRequestItem<Object>) reqItem;
ReadResponseItem<Object> responseItem = new ReadResponseItem<>(requestItem, ResponseCode.OK,
Collections.singletonList(getDataValue(requestItem.getAddress())));
responseItems.add(responseItem);
}
PlcReadResponse response;
if (readRequest instanceof TypeSafePlcReadRequest) {
response = new TypeSafePlcReadResponse((TypeSafePlcReadRequest) readRequest, responseItems.isEmpty() ? null : responseItems.get(0));
@SuppressWarnings("unchecked")
TypeSafePlcReadRequest<Object> readReq = (TypeSafePlcReadRequest<Object>) readRequest;
response = new TypeSafePlcReadResponse<Object>(readReq, responseItems);
} else {
response = new PlcReadResponse(readRequest, responseItems);
}
Expand All @@ -128,15 +136,17 @@ public CompletableFuture<PlcWriteResponse> write(PlcWriteRequest writeRequest) {
cf.completeExceptionally(new PlcIoException(writeExceptionMsg));
return cf;
}
List<WriteResponseItem<?>> responseItems = new LinkedList<>();
for (WriteRequestItem requestItem : writeRequest.getRequestItems()) {
List<WriteResponseItem<Object>> responseItems = new LinkedList<>();
for (WriteRequestItem<?> reqItem : writeRequest.getRequestItems()) {
WriteRequestItem<Object> requestItem = (WriteRequestItem<Object>) reqItem;
setDataValue(requestItem.getAddress(), requestItem.getValues());
WriteResponseItem<?> responseItem = new WriteResponseItem<>(requestItem, ResponseCode.OK);
WriteResponseItem<Object> responseItem = new WriteResponseItem<>(requestItem, ResponseCode.OK);
responseItems.add(responseItem);
}
PlcWriteResponse response;
if (writeRequest instanceof TypeSafePlcWriteRequest) {
response = new TypeSafePlcWriteResponse((TypeSafePlcWriteRequest) writeRequest, responseItems.isEmpty() ? null : responseItems.get(0));
TypeSafePlcWriteRequest<Object> writeReq = (TypeSafePlcWriteRequest<Object>) writeRequest;
response = new TypeSafePlcWriteResponse<Object>(writeReq, responseItems);
} else {
response = new PlcWriteResponse(writeRequest, responseItems);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class MockDriver implements PlcDriver {

@Override
public String getProtocolCode() {
return "mock";
return "mock-for-edgent-integration";
}

@Override
Expand Down

0 comments on commit 3927527

Please sign in to comment.