diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/ViaTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/ViaTest.java index 8f1a8394960fa4d3ab37aeaf345e4f266b157e02..e42393d48cc37b58ad7897ea65bf796c83110e98 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/ViaTest.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/ViaTest.java @@ -31,11 +31,16 @@ public class ViaTest extends AbstractMqttTest { private static final String PATH_REST_2_REST_RECEIVE = "rest2rest/receive"; private static final String TOPIC_MQTT_2_REST_RECEIVE = "mqtt2rest/receive"; private static final String PATH_REST_2_MQTT_RECEIVE = "rest2mqtt/receive"; + private static final String TOPIC_BOTH_MQTT_RECEIVE = "both/send"; + private static final String PATH_BOTH_REST_RECEIVE = "both/send"; private static final String TOPIC_MQTT_2_MQTT_SEND = "mqtt2mqtt/send"; private static final String PATH_REST_2_REST_SEND = "rest2rest/send"; private static final String PATH_MQTT_2_REST_SEND = "mqtt2rest/send"; private static final String TOPIC_REST_2_MQTT_SEND = "rest2mqtt/send"; + private static final String TOPIC_BOTH_2_MQTT_SEND = "both2mqtt/send"; + private static final String PATH_BOTH_2_REST_SEND = "both2rest/send"; + private static final String REST_SERVER_BASE_URL = "http://localhost:" + REST_PORT + "/"; private MqttHandler handler; @@ -44,8 +49,12 @@ public class ViaTest extends AbstractMqttTest { private ReceiverData dataRest2Mqtt; private WebTarget dataRest2Rest; private WebTarget dataMqtt2Rest; + private ReceiverData dataBoth2Mqtt; + private WebTarget dataBoth2Rest; + private WebTarget senderRest2Rest; private WebTarget senderRest2Mqtt; + private WebTarget senderBoth2Rest; @AfterEach public void closeConnections() { @@ -70,13 +79,72 @@ public class ViaTest extends AbstractMqttTest { // check initial value TestUtils.waitForMqtt(); - checkData(1, "100-M2M-ToMqtt", "200-R2R-ToRest", "300-M2R-ToRest", 1, "400-R2M-ToMqtt"); + checkData(1, "100-M2M-ToMqtt", + "200-R2R-ToRest", + "300-M2R-ToRest", + 1, "400-R2M-ToMqtt", + 1, "500-B2M-ToMqtt", + "500-B2R-ToRest"); sendData("101", "201", "301", "401"); + sendDataForBoth("501", true); // check new value TestUtils.waitForMqtt(); - checkData(2, "FromMqtt-101-M2M-ToMqtt", "FromRest-201-R2R-ToRest", "FromMqtt-301-M2R-ToRest", 2, "FromRest-401-R2M-ToMqtt"); + checkData(2, "FromMqtt-101-M2M-ToMqtt", + "FromRest-201-R2R-ToRest", + "FromMqtt-301-M2R-ToRest", + 2, "FromRest-401-R2M-ToMqtt", + 2, "FromMqtt-501-B2M-ToMqtt", + "FromMqtt-501-B2R-ToRest"); + + // send value only for bothInput via REST + sendDataForBoth("502", false); + + // check this value + TestUtils.waitForMqtt(); + checkData(2, "FromMqtt-101-M2M-ToMqtt", + "FromRest-201-R2R-ToRest", + "FromMqtt-301-M2R-ToRest", + 2, "FromRest-401-R2M-ToMqtt", + 3, "FromRest-502-B2M-ToMqtt", + "FromRest-502-B2R-ToRest"); + + // send same value only for bothInput via MQTT + sendDataForBoth("502", true); + + // check this value + TestUtils.waitForMqtt(); + checkData(2, "FromMqtt-101-M2M-ToMqtt", + "FromRest-201-R2R-ToRest", + "FromMqtt-301-M2R-ToRest", + 2, "FromRest-401-R2M-ToMqtt", + 4, "FromMqtt-502-B2M-ToMqtt", + "FromMqtt-502-B2R-ToRest"); + + // send values for other things + sendData("102", "202", "302", "402"); + + // check this value + TestUtils.waitForMqtt(); + checkData(3, "FromMqtt-102-M2M-ToMqtt", + "FromRest-202-R2R-ToRest", + "FromMqtt-302-M2R-ToRest", + 3, "FromRest-402-R2M-ToMqtt", + 4, "FromMqtt-502-B2M-ToMqtt", + "FromMqtt-502-B2R-ToRest"); + + // send same values again for other things + sendData("102", "202", "302", "402"); + + // check this value + TestUtils.waitForMqtt(); + checkData(3, "FromMqtt-102-M2M-ToMqtt", + "FromRest-202-R2R-ToRest", + "FromMqtt-302-M2R-ToRest", + 3, "FromRest-402-R2M-ToMqtt", + 4, "FromMqtt-502-B2M-ToMqtt", + "FromMqtt-502-B2R-ToRest"); } @Test @@ -86,13 +154,72 @@ public class ViaTest extends AbstractMqttTest { // check initial value TestUtils.waitForMqtt(); - checkData(0, null, "200-R2R-ToRest", "300-M2R-ToRest", 0, null); + checkData(0, null, + "200-R2R-ToRest", + "300-M2R-ToRest", + 0, null, + 0, null, + "500-B2R-ToRest"); sendData("111", "211", "311", "411"); + sendDataForBoth("511", true); // check new value TestUtils.waitForMqtt(); - checkData(1, "FromMqtt-111-M2M-ToMqtt", "FromRest-211-R2R-ToRest", "FromMqtt-311-M2R-ToRest", 1, "FromRest-411-R2M-ToMqtt"); + checkData(1, "FromMqtt-111-M2M-ToMqtt", + "FromRest-211-R2R-ToRest", + "FromMqtt-311-M2R-ToRest", + 1, "FromRest-411-R2M-ToMqtt", + 1, "FromMqtt-511-B2M-ToMqtt", + "FromMqtt-511-B2R-ToRest"); + + // send value only for bothInput via REST + sendDataForBoth("512", false); + + // check this value + TestUtils.waitForMqtt(); + checkData(1, "FromMqtt-111-M2M-ToMqtt", + "FromRest-211-R2R-ToRest", + "FromMqtt-311-M2R-ToRest", + 1, "FromRest-411-R2M-ToMqtt", + 2, "FromRest-512-B2M-ToMqtt", + "FromRest-512-B2R-ToRest"); + + // send same value only for bothInput via MQTT + sendDataForBoth("512", true); + + // check this value + TestUtils.waitForMqtt(); + checkData(1, "FromMqtt-111-M2M-ToMqtt", + "FromRest-211-R2R-ToRest", + "FromMqtt-311-M2R-ToRest", + 1, "FromRest-411-R2M-ToMqtt", + 3, "FromMqtt-512-B2M-ToMqtt", + "FromMqtt-512-B2R-ToRest"); + + // send values for other things + sendData("112", "212", "312", "412"); + + // check this value + TestUtils.waitForMqtt(); + checkData(2, "FromMqtt-112-M2M-ToMqtt", + "FromRest-212-R2R-ToRest", + "FromMqtt-312-M2R-ToRest", + 2, "FromRest-412-R2M-ToMqtt", + 3, "FromMqtt-512-B2M-ToMqtt", + "FromMqtt-512-B2R-ToRest"); + + // send same values again for other things + sendData("112", "212", "312", "412"); + + // check this value + TestUtils.waitForMqtt(); + checkData(2, "FromMqtt-112-M2M-ToMqtt", + "FromRest-212-R2R-ToRest", + "FromMqtt-312-M2R-ToRest", + 2, "FromRest-412-R2M-ToMqtt", + 3, "FromMqtt-512-B2M-ToMqtt", + "FromMqtt-512-B2R-ToRest"); } private void sendData(String inputMqtt2Mqtt, String inputRest2Rest, String inputMqtt2Rest, String inputRest2Mqtt) { @@ -102,11 +229,21 @@ public class ViaTest extends AbstractMqttTest { senderRest2Mqtt.request().put(Entity.entity(inputRest2Mqtt, MediaType.TEXT_PLAIN_TYPE)); } - private void checkData(int numberOfMqtt2MqttValues, String mqtt2MqttValue, String rest2RestValue, String mqtt2RestValue, int numberOfRest2MqttValues, String rest2MqttValue) { + private void sendDataForBoth(String input, boolean useMqtt) { + if (useMqtt) { + handler.publish(TOPIC_BOTH_MQTT_RECEIVE, input.getBytes()); + } else { + senderBoth2Rest.request().put(Entity.entity(input, MediaType.TEXT_PLAIN_TYPE)); + } + } + + private void checkData(int numberOfMqtt2MqttValues, String mqtt2MqttValue, String rest2RestValue, String mqtt2RestValue, int numberOfRest2MqttValues, String rest2MqttValue, int numberOfBoth2MqttValues, String both2MqttValue, String both2RestValue) { dataMqtt2Mqtt.assertEqualData(numberOfMqtt2MqttValues, mqtt2MqttValue); dataRest2Mqtt.assertEqualData(numberOfRest2MqttValues, rest2MqttValue); + dataBoth2Mqtt.assertEqualData(numberOfBoth2MqttValues, both2MqttValue); assertEquals(rest2RestValue, readRest2Rest()); assertEquals(mqtt2RestValue, readMqtt2Rest()); + assertEquals(both2RestValue, readBoth2Rest()); } private String readRest2Rest() { @@ -117,6 +254,10 @@ public class ViaTest extends AbstractMqttTest { return dataMqtt2Rest.request().get().readEntity(String.class); } + private String readBoth2Rest() { + return dataBoth2Rest.request().get().readEntity(String.class); + } + private void createModel() { // Setting value for Input without dependencies does not trigger any updates model = new A(); @@ -124,6 +265,7 @@ public class ViaTest extends AbstractMqttTest { model.setRest2RestInput("200"); model.setMqtt2RestInput("300"); model.setRest2MqttInput("400"); + model.setBoth2BothInput("500"); } private void setupReceiverAndConnect(boolean writeCurrentValue) throws IOException { @@ -138,9 +280,12 @@ public class ViaTest extends AbstractMqttTest { model.addDependencyRest2Rest(model); model.addDependencyMqtt2Rest(model); model.addDependencyRest2Mqtt(model); + model.addDependencyBoth2Mqtt(model); + model.addDependencyBoth2Rest(model); dataMqtt2Mqtt = new ReceiverData(); dataRest2Mqtt = new ReceiverData(); + dataBoth2Mqtt = new ReceiverData(); handler.newConnection(TOPIC_MQTT_2_MQTT_SEND, bytes -> { dataMqtt2Mqtt.numberOfStringValues += 1; @@ -150,12 +295,18 @@ public class ViaTest extends AbstractMqttTest { dataRest2Mqtt.numberOfStringValues += 1; dataRest2Mqtt.lastStringValue = new String(bytes); }); + handler.newConnection(TOPIC_BOTH_2_MQTT_SEND, bytes -> { + dataBoth2Mqtt.numberOfStringValues += 1; + dataBoth2Mqtt.lastStringValue = new String(bytes); + }); Client client = ClientBuilder.newClient(); dataRest2Rest = client.target(REST_SERVER_BASE_URL + PATH_REST_2_REST_SEND); dataMqtt2Rest = client.target(REST_SERVER_BASE_URL + PATH_MQTT_2_REST_SEND); + dataBoth2Rest = client.target(REST_SERVER_BASE_URL + PATH_BOTH_2_REST_SEND); senderRest2Rest = client.target(REST_SERVER_BASE_URL + PATH_REST_2_REST_RECEIVE); senderRest2Mqtt = client.target(REST_SERVER_BASE_URL + PATH_REST_2_MQTT_RECEIVE); + senderBoth2Rest = client.target(REST_SERVER_BASE_URL + PATH_BOTH_REST_RECEIVE); model.connectMqtt2MqttInput(TOPIC_MQTT_2_MQTT_RECEIVE); model.connectMqtt2MqttOutput(TOPIC_MQTT_2_MQTT_SEND, writeCurrentValue); @@ -165,6 +316,10 @@ public class ViaTest extends AbstractMqttTest { model.connectRest2MqttOutput(TOPIC_REST_2_MQTT_SEND, writeCurrentValue); model.connectRest2RestInput(PATH_REST_2_REST_RECEIVE); model.connectRest2RestOutput(PATH_REST_2_REST_SEND, writeCurrentValue); + model.connectBoth2BothInputViaMqtt(TOPIC_BOTH_MQTT_RECEIVE); + model.connectBoth2BothInputViaRest(PATH_BOTH_REST_RECEIVE); + model.connectBoth2MqttOutput(TOPIC_BOTH_2_MQTT_SEND, writeCurrentValue); + model.connectBoth2RestOutput(PATH_BOTH_2_REST_SEND, writeCurrentValue); } private static class ReceiverData {