Skip to main content
Sign in
Snippets Groups Projects
Commit efb6b602 authored by René Schöne's avatar René Schöne
Browse files

Begin with typeEndpointDefinitions, add more tests, fix some bugs.

- mappings bug fixed: boxed types handled correctly now
- mappings bug fixed: type of last transformation correctly used now
- add junit report to ci
parent 70ccb958
No related branches found
No related tags found
1 merge request!5Testing incremental dependency tracking.
Pipeline #8700 passed
receive NativeTypes.IntValue using String2Int ;
receive NativeTypes.ShortValue using String2Int, Int2Short ;
receive NativeTypes.LongValue using String2Int, Int2Short, Short2Long ;
receive NativeTypes.FloatValue using String2Int, Int2Short, Short2Long, Long2Float ;
receive NativeTypes.DoubleValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double ;
receive NativeTypes.CharValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double, Double2Char ;
send NativeTypes.WriteIntValue using String2Int ;
send NativeTypes.WriteShortValue using String2Int, Int2Short ;
send NativeTypes.WriteLongValue using String2Int, Int2Short, Short2Long ;
send NativeTypes.WriteFloatValue using String2Int, Int2Short, Short2Long, Long2Float ;
send NativeTypes.WriteDoubleValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double ;
send NativeTypes.WriteCharValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double, Double2Char ;
receive BoxedTypes.IntValue using String2Int ;
receive BoxedTypes.ShortValue using String2Int, Int2Short ;
receive BoxedTypes.LongValue using String2Int, Int2Short, Short2Long ;
receive BoxedTypes.FloatValue using String2Int, Int2Short, Short2Long, Long2Float ;
receive BoxedTypes.DoubleValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double ;
receive BoxedTypes.CharValue using String2Int, Int2Short, Short2Long, Long2Float, Float2Double, Double2Char ;
String2Int maps String s to int {:
return Integer.parseInt(s);
:}
Int2Short maps int i to short {:
return (short) i;
:}
Short2Long maps short s to long {:
return (long) s;
:}
Long2Float maps long l to float {:
return (float) (l + 0.01);
:}
Float2Double maps float f to double {:
return (double) f;
:}
Double2Char maps double d to char {:
return (char) ((int) d);
:}
NativeTypes.WriteIntValue canDependOn NativeTypes.Driver as nativeIntDependency;
NativeTypes.WriteShortValue canDependOn NativeTypes.Driver as nativeShortDependency;
NativeTypes.WriteLongValue canDependOn NativeTypes.Driver as nativeLongDependency;
NativeTypes.WriteFloatValue canDependOn NativeTypes.Driver as nativeFloatDependency;
NativeTypes.WriteDoubleValue canDependOn NativeTypes.Driver as nativeDoubleDependency;
NativeTypes.WriteCharValue canDependOn NativeTypes.Driver as nativeCharDependency;
aspect Computation {
// native types, synthesized
syn String NativeTypes.getWriteIntValue() = getDriver();
syn String NativeTypes.getWriteShortValue() = getDriver();
syn String NativeTypes.getWriteLongValue() = getDriver();
syn String NativeTypes.getWriteFloatValue() = getDriver();
syn String NativeTypes.getWriteDoubleValue() = getDriver();
syn String NativeTypes.getWriteCharValue() = getDriver();
}
A ::= NativeTypes BoxedTypes ;
NativeTypes ::= <IntValue:int> <ShortValue:short> <LongValue:long> <FloatValue:float> <DoubleValue:double> <CharValue:char> <Driver:String> /<WriteIntValue:String>/ /<WriteShortValue:String>/ /<WriteLongValue:String>/ /<WriteFloatValue:String>/ /<WriteDoubleValue:String>/ /<WriteCharValue:String>/;
BoxedTypes ::= <IntValue:Integer> <ShortValue:Short> <LongValue:Long> <FloatValue:Float> <DoubleValue:Double> <CharValue:Character> ;
......@@ -66,6 +66,15 @@ public class DefaultOnlyReadTest extends AbstractMqttTest {
floats.connectDoubleValue(mqttUri(TOPIC_NATIVE_DOUBLE));
chars.connectCharValue(mqttUri(TOPIC_NATIVE_CHAR));
chars.connectStringValue(mqttUri(TOPIC_NATIVE_STRING));
integers.connectIntValueTransformed(mqttUri(TOPIC_NATIVE_INT));
integers.connectShortValueTransformed(mqttUri(TOPIC_NATIVE_SHORT));
integers.connectLongValueTransformed(mqttUri(TOPIC_NATIVE_LONG));
floats.connectFloatValueTransformed(mqttUri(TOPIC_NATIVE_FLOAT));
floats.connectDoubleValueTransformed(mqttUri(TOPIC_NATIVE_DOUBLE));
chars.connectCharValueTransformed(mqttUri(TOPIC_NATIVE_CHAR));
chars.connectStringValueTransformed(mqttUri(TOPIC_NATIVE_STRING));
allBoxed.connectIntValue(mqttUri(TOPIC_BOXED_INTEGER));
allBoxed.connectShortValue(mqttUri(TOPIC_BOXED_SHORT));
allBoxed.connectLongValue(mqttUri(TOPIC_BOXED_LONG));
......@@ -73,6 +82,13 @@ public class DefaultOnlyReadTest extends AbstractMqttTest {
allBoxed.connectDoubleValue(mqttUri(TOPIC_BOXED_DOUBLE));
allBoxed.connectCharValue(mqttUri(TOPIC_BOXED_CHARACTER));
allBoxed.connectIntValueTransformed(mqttUri(TOPIC_BOXED_INTEGER));
allBoxed.connectShortValueTransformed(mqttUri(TOPIC_BOXED_SHORT));
allBoxed.connectLongValueTransformed(mqttUri(TOPIC_BOXED_LONG));
allBoxed.connectFloatValueTransformed(mqttUri(TOPIC_BOXED_FLOAT));
allBoxed.connectDoubleValueTransformed(mqttUri(TOPIC_BOXED_DOUBLE));
allBoxed.connectCharValueTransformed(mqttUri(TOPIC_BOXED_CHARACTER));
sender = new MqttHandler().dontSendWelcomeMessage().setHost(TestUtils.getMqttHost());
assertTrue(sender.waitUntilReady(2, TimeUnit.SECONDS));
}
......@@ -117,12 +133,27 @@ public class DefaultOnlyReadTest extends AbstractMqttTest {
assertEquals(expectedCharValue, chars.getCharValue());
assertEquals(expectedStringValue, chars.getStringValue());
assertEquals(expectedIntValue, integers.getIntValueTransformed());
assertEquals(expectedShortValue, integers.getShortValueTransformed());
assertEquals(expectedLongValue, integers.getLongValueTransformed());
assertEquals(expectedFloatValue, floats.getFloatValueTransformed(), TestUtils.DELTA);
assertEquals(expectedDoubleValue, floats.getDoubleValueTransformed(), TestUtils.DELTA);
assertEquals(expectedCharValue, chars.getCharValueTransformed());
assertEquals(expectedStringValue, chars.getStringValueTransformed());
assertEquals(expectedIntValue, allBoxed.getIntValue().intValue());
assertEquals(expectedShortValue, allBoxed.getShortValue().shortValue());
assertEquals(expectedLongValue, allBoxed.getLongValue().longValue());
assertEquals(expectedFloatValue, allBoxed.getFloatValue(), TestUtils.DELTA);
assertEquals(expectedDoubleValue, allBoxed.getDoubleValue(), TestUtils.DELTA);
assertEquals(expectedCharValue, allBoxed.getCharValue().charValue());
assertEquals(expectedIntValue, allBoxed.getIntValueTransformed().intValue());
assertEquals(expectedShortValue, allBoxed.getShortValueTransformed().shortValue());
assertEquals(expectedLongValue, allBoxed.getLongValueTransformed().longValue());
assertEquals(expectedFloatValue, allBoxed.getFloatValueTransformed(), TestUtils.DELTA);
assertEquals(expectedDoubleValue, allBoxed.getDoubleValueTransformed(), TestUtils.DELTA);
assertEquals(expectedCharValue, allBoxed.getCharValueTransformed().charValue());
}
@Override
......
......
......@@ -26,6 +26,14 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest {
private static final String TOPIC_NATIVE_CHAR = "native/char";
private static final String TOPIC_NATIVE_STRING = "native/string";
private static final String TOPIC_NATIVE_INT_TRANSFORMED = "native/int/t";
private static final String TOPIC_NATIVE_SHORT_TRANSFORMED = "native/short/t";
private static final String TOPIC_NATIVE_LONG_TRANSFORMED = "native/long/t";
private static final String TOPIC_NATIVE_FLOAT_TRANSFORMED = "native/float/t";
private static final String TOPIC_NATIVE_DOUBLE_TRANSFORMED = "native/double/t";
private static final String TOPIC_NATIVE_CHAR_TRANSFORMED = "native/char/t";
private static final String TOPIC_NATIVE_STRING_TRANSFORMED = "native/string/t";
private static final String TOPIC_BOXED_INTEGER = "boxed/Integer";
private static final String TOPIC_BOXED_SHORT = "boxed/Short";
private static final String TOPIC_BOXED_LONG = "boxed/Long";
......@@ -33,6 +41,13 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest {
private static final String TOPIC_BOXED_DOUBLE = "boxed/Double";
private static final String TOPIC_BOXED_CHARACTER = "boxed/Character";
private static final String TOPIC_BOXED_INTEGER_TRANSFORMED = "boxed/Integer/t";
private static final String TOPIC_BOXED_SHORT_TRANSFORMED = "boxed/Short/t";
private static final String TOPIC_BOXED_LONG_TRANSFORMED = "boxed/Long/t";
private static final String TOPIC_BOXED_FLOAT_TRANSFORMED = "boxed/Float/t";
private static final String TOPIC_BOXED_DOUBLE_TRANSFORMED = "boxed/Double/t";
private static final String TOPIC_BOXED_CHARACTER_TRANSFORMED = "boxed/Character/t";
private A model;
private NativeTypesSyn nativeIntegers;
private NativeTypesSyn nativeFloats;
......@@ -41,7 +56,8 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest {
private BoxedTypesSyn boxedFloats;
private BoxedTypesSyn boxedChars;
private MqttHandler receiver;
private ReceiverData data;
private ReceiverData dataNormal;
private ReceiverData dataTransformed;
@Override
protected void createModel() {
......@@ -79,6 +95,14 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest {
nativeChars.addNativeCharDependency(nativeChars);
nativeChars.addNativeStringDependency(nativeChars);
nativeIntegers.addNativeIntTransformedDependency(nativeIntegers);
nativeIntegers.addNativeShortTransformedDependency(nativeIntegers);
nativeIntegers.addNativeLongTransformedDependency(nativeIntegers);
nativeFloats.addNativeFloatTransformedDependency(nativeFloats);
nativeFloats.addNativeDoubleTransformedDependency(nativeFloats);
nativeChars.addNativeCharTransformedDependency(nativeChars);
nativeChars.addNativeStringTransformedDependency(nativeChars);
boxedIntegers.addBoxedIntDependency(boxedIntegers);
boxedIntegers.addBoxedShortDependency(boxedIntegers);
boxedIntegers.addBoxedLongDependency(boxedIntegers);
......@@ -86,60 +110,15 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest {
boxedFloats.addBoxedDoubleDependency(boxedFloats);
boxedChars.addBoxedCharDependency(boxedChars);
data = new ReceiverData();
boxedIntegers.addBoxedIntTransformedDependency(boxedIntegers);
boxedIntegers.addBoxedShortTransformedDependency(boxedIntegers);
boxedIntegers.addBoxedLongTransformedDependency(boxedIntegers);
boxedFloats.addBoxedFloatTransformedDependency(boxedFloats);
boxedFloats.addBoxedDoubleTransformedDependency(boxedFloats);
boxedChars.addBoxedCharTransformedDependency(boxedChars);
receiver.newConnection(TOPIC_NATIVE_INT, bytes -> {
data.numberOfNativeIntValues += 1;
data.lastNativeIntValue = java.nio.ByteBuffer.wrap(bytes).getInt();
});
receiver.newConnection(TOPIC_NATIVE_SHORT, bytes -> {
data.numberOfNativeShortValues += 1;
data.lastNativeShortValue = java.nio.ByteBuffer.wrap(bytes).getShort();
});
receiver.newConnection(TOPIC_NATIVE_LONG, bytes -> {
data.numberOfNativeLongValues += 1;
data.lastNativeLongValue = java.nio.ByteBuffer.wrap(bytes).getLong();
});
receiver.newConnection(TOPIC_NATIVE_FLOAT, bytes -> {
data.numberOfNativeFloatValues += 1;
data.lastNativeFloatValue = java.nio.ByteBuffer.wrap(bytes).getFloat();
});
receiver.newConnection(TOPIC_NATIVE_DOUBLE, bytes -> {
data.numberOfNativeDoubleValues += 1;
data.lastNativeDoubleValue = java.nio.ByteBuffer.wrap(bytes).getDouble();
});
receiver.newConnection(TOPIC_NATIVE_CHAR, bytes -> {
data.numberOfNativeCharValues += 1;
data.lastNativeCharValue = java.nio.ByteBuffer.wrap(bytes).getChar();
});
receiver.newConnection(TOPIC_NATIVE_STRING, bytes -> {
data.numberOfNativeStringValues += 1;
data.lastNativeStringValue = new String(bytes);
});
receiver.newConnection(TOPIC_BOXED_INTEGER, bytes -> {
data.numberOfBoxedIntValues += 1;
data.lastBoxedIntValue = java.nio.ByteBuffer.wrap(bytes).getInt();
});
receiver.newConnection(TOPIC_BOXED_SHORT, bytes -> {
data.numberOfBoxedShortValues += 1;
data.lastBoxedShortValue = java.nio.ByteBuffer.wrap(bytes).getShort();
});
receiver.newConnection(TOPIC_BOXED_LONG, bytes -> {
data.numberOfBoxedLongValues += 1;
data.lastBoxedLongValue = java.nio.ByteBuffer.wrap(bytes).getLong();
});
receiver.newConnection(TOPIC_BOXED_FLOAT, bytes -> {
data.numberOfBoxedFloatValues += 1;
data.lastBoxedFloatValue = java.nio.ByteBuffer.wrap(bytes).getFloat();
});
receiver.newConnection(TOPIC_BOXED_DOUBLE, bytes -> {
data.numberOfBoxedDoubleValues += 1;
data.lastBoxedDoubleValue = java.nio.ByteBuffer.wrap(bytes).getDouble();
});
receiver.newConnection(TOPIC_BOXED_CHARACTER, bytes -> {
data.numberOfBoxedCharValues += 1;
data.lastBoxedCharValue = java.nio.ByteBuffer.wrap(bytes).getChar();
});
dataNormal = createReceiver(false);
dataTransformed = createReceiver(true);
nativeIntegers.connectIntValue(mqttUri(TOPIC_NATIVE_INT), writeCurrentValue);
nativeIntegers.connectShortValue(mqttUri(TOPIC_NATIVE_SHORT), writeCurrentValue);
......@@ -148,53 +127,121 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest {
nativeFloats.connectDoubleValue(mqttUri(TOPIC_NATIVE_DOUBLE), writeCurrentValue);
nativeChars.connectCharValue(mqttUri(TOPIC_NATIVE_CHAR), writeCurrentValue);
nativeChars.connectStringValue(mqttUri(TOPIC_NATIVE_STRING), writeCurrentValue);
nativeIntegers.connectIntValueTransformed(mqttUri(TOPIC_NATIVE_INT_TRANSFORMED), writeCurrentValue);
nativeIntegers.connectShortValueTransformed(mqttUri(TOPIC_NATIVE_SHORT_TRANSFORMED), writeCurrentValue);
nativeIntegers.connectLongValueTransformed(mqttUri(TOPIC_NATIVE_LONG_TRANSFORMED), writeCurrentValue);
nativeFloats.connectFloatValueTransformed(mqttUri(TOPIC_NATIVE_FLOAT_TRANSFORMED), writeCurrentValue);
nativeFloats.connectDoubleValueTransformed(mqttUri(TOPIC_NATIVE_DOUBLE_TRANSFORMED), writeCurrentValue);
nativeChars.connectCharValueTransformed(mqttUri(TOPIC_NATIVE_CHAR_TRANSFORMED), writeCurrentValue);
nativeChars.connectStringValueTransformed(mqttUri(TOPIC_NATIVE_STRING_TRANSFORMED), writeCurrentValue);
boxedIntegers.connectIntValue(mqttUri(TOPIC_BOXED_INTEGER), writeCurrentValue);
boxedIntegers.connectShortValue(mqttUri(TOPIC_BOXED_SHORT), writeCurrentValue);
boxedIntegers.connectLongValue(mqttUri(TOPIC_BOXED_LONG), writeCurrentValue);
boxedFloats.connectFloatValue(mqttUri(TOPIC_BOXED_FLOAT), writeCurrentValue);
boxedFloats.connectDoubleValue(mqttUri(TOPIC_BOXED_DOUBLE), writeCurrentValue);
boxedChars.connectCharValue(mqttUri(TOPIC_BOXED_CHARACTER), writeCurrentValue);
boxedIntegers.connectIntValueTransformed(mqttUri(TOPIC_BOXED_INTEGER_TRANSFORMED), writeCurrentValue);
boxedIntegers.connectShortValueTransformed(mqttUri(TOPIC_BOXED_SHORT_TRANSFORMED), writeCurrentValue);
boxedIntegers.connectLongValueTransformed(mqttUri(TOPIC_BOXED_LONG_TRANSFORMED), writeCurrentValue);
boxedFloats.connectFloatValueTransformed(mqttUri(TOPIC_BOXED_FLOAT_TRANSFORMED), writeCurrentValue);
boxedFloats.connectDoubleValueTransformed(mqttUri(TOPIC_BOXED_DOUBLE_TRANSFORMED), writeCurrentValue);
boxedChars.connectCharValueTransformed(mqttUri(TOPIC_BOXED_CHARACTER_TRANSFORMED), writeCurrentValue);
}
private ReceiverData createReceiver(boolean transformed) {
ReceiverData result = new ReceiverData();
receiver.newConnection(transformed ? TOPIC_NATIVE_INT_TRANSFORMED : TOPIC_NATIVE_INT, bytes -> {
result.numberOfNativeIntValues += 1;
result.lastNativeIntValue = java.nio.ByteBuffer.wrap(bytes).getInt();
});
receiver.newConnection(transformed ? TOPIC_NATIVE_SHORT_TRANSFORMED : TOPIC_NATIVE_SHORT, bytes -> {
result.numberOfNativeShortValues += 1;
result.lastNativeShortValue = java.nio.ByteBuffer.wrap(bytes).getShort();
});
receiver.newConnection(transformed ? TOPIC_NATIVE_LONG_TRANSFORMED : TOPIC_NATIVE_LONG, bytes -> {
result.numberOfNativeLongValues += 1;
result.lastNativeLongValue = java.nio.ByteBuffer.wrap(bytes).getLong();
});
receiver.newConnection(transformed ? TOPIC_NATIVE_FLOAT_TRANSFORMED : TOPIC_NATIVE_FLOAT, bytes -> {
result.numberOfNativeFloatValues += 1;
result.lastNativeFloatValue = java.nio.ByteBuffer.wrap(bytes).getFloat();
});
receiver.newConnection(transformed ? TOPIC_NATIVE_DOUBLE_TRANSFORMED : TOPIC_NATIVE_DOUBLE, bytes -> {
result.numberOfNativeDoubleValues += 1;
result.lastNativeDoubleValue = java.nio.ByteBuffer.wrap(bytes).getDouble();
});
receiver.newConnection(transformed ? TOPIC_NATIVE_CHAR_TRANSFORMED : TOPIC_NATIVE_CHAR, bytes -> {
result.numberOfNativeCharValues += 1;
result.lastNativeCharValue = java.nio.ByteBuffer.wrap(bytes).getChar();
});
receiver.newConnection(transformed ? TOPIC_NATIVE_STRING_TRANSFORMED : TOPIC_NATIVE_STRING, bytes -> {
result.numberOfNativeStringValues += 1;
result.lastNativeStringValue = new String(bytes);
});
receiver.newConnection(transformed ? TOPIC_BOXED_INTEGER_TRANSFORMED : TOPIC_BOXED_INTEGER, bytes -> {
result.numberOfBoxedIntValues += 1;
result.lastBoxedIntValue = java.nio.ByteBuffer.wrap(bytes).getInt();
});
receiver.newConnection(transformed ? TOPIC_BOXED_SHORT_TRANSFORMED : TOPIC_BOXED_SHORT, bytes -> {
result.numberOfBoxedShortValues += 1;
result.lastBoxedShortValue = java.nio.ByteBuffer.wrap(bytes).getShort();
});
receiver.newConnection(transformed ? TOPIC_BOXED_LONG_TRANSFORMED : TOPIC_BOXED_LONG, bytes -> {
result.numberOfBoxedLongValues += 1;
result.lastBoxedLongValue = java.nio.ByteBuffer.wrap(bytes).getLong();
});
receiver.newConnection(transformed ? TOPIC_BOXED_FLOAT_TRANSFORMED : TOPIC_BOXED_FLOAT, bytes -> {
result.numberOfBoxedFloatValues += 1;
result.lastBoxedFloatValue = java.nio.ByteBuffer.wrap(bytes).getFloat();
});
receiver.newConnection(transformed ? TOPIC_BOXED_DOUBLE_TRANSFORMED : TOPIC_BOXED_DOUBLE, bytes -> {
result.numberOfBoxedDoubleValues += 1;
result.lastBoxedDoubleValue = java.nio.ByteBuffer.wrap(bytes).getDouble();
});
receiver.newConnection(transformed ? TOPIC_BOXED_CHARACTER_TRANSFORMED : TOPIC_BOXED_CHARACTER, bytes -> {
result.numberOfBoxedCharValues += 1;
result.lastBoxedCharValue = java.nio.ByteBuffer.wrap(bytes).getChar();
});
return result;
}
@Override
protected void communicateSendInitialValue() throws InterruptedException {
// check initial value
TestUtils.waitForMqtt();
checkData(1, 1, 1.1, 'a', "ab");
// set new value
setData("2", "2.2", "cd");
// check new value
TestUtils.waitForMqtt();
checkData(2, 2, 2.2, 'c', "cd");
// set new value
setData("3", "3.2", "ee");
// check new value
TestUtils.waitForMqtt();
checkData(3, 3, 3.2, 'e', "ee");
}
@Override
protected void communicateOnlyUpdatedValue() throws InterruptedException {
// check initial value (will be default values)
TestUtils.waitForMqtt();
checkData(0, null, null, null, null);
// set new value
setData("2", "2.2", "cd");
// check new value
TestUtils.waitForMqtt();
checkData(1, 2, 2.2, 'c', "cd");
// set new value
setData("3", "3.2", "ee");
// check new value
TestUtils.waitForMqtt();
checkData(2, 3, 3.2, 'e', "ee");
}
......@@ -220,7 +267,9 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest {
private void checkData(int expectedNumberOfValues,
Integer expectedInt, Double expectedDouble,
Character expectedChar, String expectedString) {
Character expectedChar, String expectedString) throws InterruptedException {
TestUtils.waitForMqtt();
for (ReceiverData data : new ReceiverData[]{dataNormal, dataTransformed}) {
assertEquals(expectedNumberOfValues, data.numberOfNativeIntValues);
assertEquals(expectedNumberOfValues, data.numberOfNativeShortValues);
assertEquals(expectedNumberOfValues, data.numberOfNativeLongValues);
......@@ -273,6 +322,7 @@ public class DefaultOnlyWriteTest extends AbstractMqttTest {
}
assertEquals(expectedString, data.lastNativeStringValue);
}
}
private static class ReceiverData {
int lastNativeIntValue;
......
......
......@@ -17,7 +17,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
*
* @author rschoene - Initial contribution
*/
@Tag("NewTest")
public class IncrementalDependencyTest extends AbstractMqttTest {
private static final String TOPIC_IN = "in/a";
......@@ -42,6 +41,7 @@ public class IncrementalDependencyTest extends AbstractMqttTest {
b2 = new B();
model.addB(b1);
model.addB(b2);
model.ragconnectCheckIncremental();
}
@Override
......
......
package org.jastadd.ragconnect.tests;
import mapping.ast.A;
import mapping.ast.BoxedTypes;
import mapping.ast.MqttHandler;
import mapping.ast.NativeTypes;
import org.junit.jupiter.api.Tag;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import static org.jastadd.ragconnect.tests.TestUtils.mqttUri;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Test case "mapping".
*
* @author rschoene - Initial contribution
*/
@Tag("NewTest")
public class MappingTest extends AbstractMqttTest {
private static final String TOPIC_INPUT = "input";
private static final String TOPIC_WRITE_NATIVE_INT = "native/int";
private static final String TOPIC_WRITE_NATIVE_SHORT = "native/short";
private static final String TOPIC_WRITE_NATIVE_LONG = "native/long";
private static final String TOPIC_WRITE_NATIVE_FLOAT = "native/float";
private static final String TOPIC_WRITE_NATIVE_DOUBLE = "native/double";
private static final String TOPIC_WRITE_NATIVE_CHAR = "native/char";
private A model;
private NativeTypes natives;
private BoxedTypes boxes;
private MqttHandler handler;
private ReceiverData data;
@Override
protected void createModel() {
model = new A();
natives = new NativeTypes();
natives.setDriver("1");
boxes = new BoxedTypes();
model.setNativeTypes(natives);
model.setBoxedTypes(boxes);
}
@Override
protected void setupReceiverAndConnect(boolean writeCurrentValue) throws IOException {
model.ragconnectSetupMqttWaitUntilReady(2, TimeUnit.SECONDS);
handler = new MqttHandler().dontSendWelcomeMessage().setHost(TestUtils.getMqttHost());
assertTrue(handler.waitUntilReady(2, TimeUnit.SECONDS));
natives.addNativeIntDependency(natives);
natives.addNativeShortDependency(natives);
natives.addNativeLongDependency(natives);
natives.addNativeFloatDependency(natives);
natives.addNativeDoubleDependency(natives);
natives.addNativeCharDependency(natives);
data = new ReceiverData();
handler.newConnection(TOPIC_WRITE_NATIVE_INT, bytes -> {
data.numberOfNativeIntValues += 1;
data.lastNativeIntValue = java.nio.ByteBuffer.wrap(bytes).getInt();
});
handler.newConnection(TOPIC_WRITE_NATIVE_SHORT, bytes -> {
data.numberOfNativeShortValues += 1;
data.lastNativeShortValue = java.nio.ByteBuffer.wrap(bytes).getShort();
});
handler.newConnection(TOPIC_WRITE_NATIVE_LONG, bytes -> {
data.numberOfNativeLongValues += 1;
data.lastNativeLongValue = java.nio.ByteBuffer.wrap(bytes).getLong();
});
handler.newConnection(TOPIC_WRITE_NATIVE_FLOAT, bytes -> {
data.numberOfNativeFloatValues += 1;
data.lastNativeFloatValue = java.nio.ByteBuffer.wrap(bytes).getFloat();
});
handler.newConnection(TOPIC_WRITE_NATIVE_DOUBLE, bytes -> {
data.numberOfNativeDoubleValues += 1;
data.lastNativeDoubleValue = java.nio.ByteBuffer.wrap(bytes).getDouble();
});
handler.newConnection(TOPIC_WRITE_NATIVE_CHAR, bytes -> {
data.numberOfNativeCharValues += 1;
data.lastNativeCharValue = java.nio.ByteBuffer.wrap(bytes).getChar();
});
natives.connectWriteIntValue(mqttUri(TOPIC_WRITE_NATIVE_INT), writeCurrentValue);
natives.connectWriteShortValue(mqttUri(TOPIC_WRITE_NATIVE_SHORT), writeCurrentValue);
natives.connectWriteLongValue(mqttUri(TOPIC_WRITE_NATIVE_LONG), writeCurrentValue);
natives.connectWriteFloatValue(mqttUri(TOPIC_WRITE_NATIVE_FLOAT), writeCurrentValue);
natives.connectWriteDoubleValue(mqttUri(TOPIC_WRITE_NATIVE_DOUBLE), writeCurrentValue);
natives.connectWriteCharValue(mqttUri(TOPIC_WRITE_NATIVE_CHAR), writeCurrentValue);
natives.connectIntValue(mqttUri(TOPIC_INPUT));
natives.connectShortValue(mqttUri(TOPIC_INPUT));
natives.connectLongValue(mqttUri(TOPIC_INPUT));
natives.connectFloatValue(mqttUri(TOPIC_INPUT));
natives.connectDoubleValue(mqttUri(TOPIC_INPUT));
natives.connectCharValue(mqttUri(TOPIC_INPUT));
boxes.connectIntValue(mqttUri(TOPIC_INPUT));
boxes.connectShortValue(mqttUri(TOPIC_INPUT));
boxes.connectLongValue(mqttUri(TOPIC_INPUT));
boxes.connectFloatValue(mqttUri(TOPIC_INPUT));
boxes.connectDoubleValue(mqttUri(TOPIC_INPUT));
boxes.connectCharValue(mqttUri(TOPIC_INPUT));
}
@Override
protected void communicateSendInitialValue() throws InterruptedException {
checkSendData(1, 1, (short) 1, 1, 1.01f, 1.01d, (char) 1);
// no check for initial received data (no input set yet)
// send first value
sendAndSetData("21", "31");
checkSendData(2, 21, (short) 21, 21, 21.01f, 21.01d, (char) 21);
checkReceiveData(31, (short) 31, 31, 31.01f, 31.01d, (char) 31);
// send same value
sendAndSetData("21", "31");
checkSendData(2, 21, (short) 21, 21, 21.01f, 21.01d, (char) 21);
checkReceiveData(31, (short) 31, 31, 31.01f, 31.01d, (char) 31);
// send new value
sendAndSetData("22", "32");
checkSendData(3, 22, (short) 22, 22, 22.01f, 22.01d, (char) 22);
checkReceiveData(32, (short) 32, 32, 32.01f, 32.01d, (char) 32);
}
@Override
protected void communicateOnlyUpdatedValue() throws InterruptedException {
checkSendData(0, 0, (short) 0, 0, 0f, 0d, (char) 0);
// no check for initial received data (no input set yet)
// send first value
sendAndSetData("41", "51");
checkSendData(1, 41, (short) 41, 41, 41.01f, 41.01d, (char) 41);
checkReceiveData(51, (short) 51, 51, 51.01f, 51.01d, (char) 51);
// send same value
sendAndSetData("41", "51");
checkSendData(1, 41, (short) 41, 41, 41.01f, 41.01d, (char) 41);
checkReceiveData(51, (short) 51, 51, 51.01f, 51.01d, (char) 51);
// send new value
sendAndSetData("42", "52");
checkSendData(2, 42, (short) 42, 42, 42.01f, 42.01d, (char) 42);
checkReceiveData(52, (short) 52, 52, 52.01f, 52.01d, (char) 52);
}
@Override
protected void closeConnections() {
if (handler != null) {
handler.close();
}
if (model != null) {
model.ragconnectCloseConnections();
}
}
private void sendAndSetData(String driver, String input) {
natives.setDriver(driver);
handler.publish(TOPIC_INPUT, input.getBytes());
}
private void checkSendData(int expectedNumberOfValues, int expectedInt, short expectedShort, long expectedLong, float expectedFloat, double expectedDouble, char expectedChar) throws InterruptedException {
TestUtils.waitForMqtt();
assertEquals(expectedNumberOfValues, data.numberOfNativeIntValues);
assertEquals(expectedNumberOfValues, data.numberOfNativeShortValues);
assertEquals(expectedNumberOfValues, data.numberOfNativeLongValues);
assertEquals(expectedNumberOfValues, data.numberOfNativeFloatValues);
assertEquals(expectedNumberOfValues, data.numberOfNativeDoubleValues);
assertEquals(expectedNumberOfValues, data.numberOfNativeCharValues);
if (expectedNumberOfValues == 0) {
return;
}
assertEquals(expectedInt, data.lastNativeIntValue);
assertEquals(expectedShort, data.lastNativeShortValue);
assertEquals(expectedLong, data.lastNativeLongValue);
assertEquals(expectedFloat, data.lastNativeFloatValue, TestUtils.DELTA);
assertEquals(expectedDouble, data.lastNativeDoubleValue, TestUtils.DELTA);
assertEquals(expectedChar, data.lastNativeCharValue);
}
private void checkReceiveData(int expectedInt, short expectedShort, long expectedLong, float expectedFloat, double expectedDouble, char expectedChar) {
assertEquals(expectedInt, natives.getIntValue());
assertEquals(expectedShort, natives.getShortValue());
assertEquals(expectedLong, natives.getLongValue());
assertEquals(expectedFloat, natives.getFloatValue(), TestUtils.DELTA);
assertEquals(expectedDouble, natives.getDoubleValue(), TestUtils.DELTA);
assertEquals(expectedChar, natives.getCharValue());
assertEquals(expectedInt, boxes.getIntValue());
assertEquals(expectedShort, boxes.getShortValue());
assertEquals(expectedLong, boxes.getLongValue());
assertEquals(expectedFloat, boxes.getFloatValue(), TestUtils.DELTA);
assertEquals(expectedDouble, boxes.getDoubleValue(), TestUtils.DELTA);
assertEquals(expectedChar, boxes.getCharValue());
}
private static class ReceiverData {
int lastNativeIntValue;
int numberOfNativeIntValues = 0;
short lastNativeShortValue;
int numberOfNativeShortValues = 0;
long lastNativeLongValue;
int numberOfNativeLongValues = 0;
float lastNativeFloatValue;
int numberOfNativeFloatValues = 0;
double lastNativeDoubleValue;
int numberOfNativeDoubleValues = 0;
char lastNativeCharValue;
int numberOfNativeCharValues = 0;
}
}
......@@ -2,7 +2,6 @@ package org.jastadd.ragconnect.tests;
import tutorial.ast.A;
import tutorial.ast.B;
import tutorial.ast.MqttHandler;
import java.io.IOException;
......@@ -15,7 +14,6 @@ import static org.jastadd.ragconnect.tests.TestUtils.mqttUri;
*/
public class TutorialTest extends AbstractMqttTest {
private MqttHandler handler;
private A a;
private B b1;
private B b2;
......@@ -58,9 +56,6 @@ public class TutorialTest extends AbstractMqttTest {
@Override
protected void closeConnections() {
if (handler != null) {
handler.close();
}
if (a != null) {
a.ragconnectCloseConnections();
}
......
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment