From 47b8af00910d3b5274a28f658882b6ce7af038e8 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Tue, 30 Jun 2020 16:25:30 +0200 Subject: [PATCH] Extend ExampleTest with counter of intermediate calls. --- .../src/test/01-input/example/Test.jadd | 13 +++ .../src/test/01-input/example/Test.ros2rag | 4 + .../jastadd/ros2rag/tests/ExampleTest.java | 86 ++++++++++++++++++- 3 files changed, 102 insertions(+), 1 deletion(-) diff --git a/ros2rag.tests/src/test/01-input/example/Test.jadd b/ros2rag.tests/src/test/01-input/example/Test.jadd index 53f41b6..c355f57 100644 --- a/ros2rag.tests/src/test/01-input/example/Test.jadd +++ b/ros2rag.tests/src/test/01-input/example/Test.jadd @@ -1,4 +1,16 @@ aspect GrammarTypes { + public class TestCounter { + public static TestCounter INSTANCE = new TestCounter(); + public int numberParseLinkState = 0; + public int numberSerializeRobotConfig = 0; + public int numberLinkStateToIntPosition = 0; + public int numberCreateSpeedMessage = 0; + public int numberInSafetyZone = 0; + public static void reset() { + TestCounter.INSTANCE = new TestCounter(); + } + } + public class IntPosition { private final int x, y, z; @@ -53,6 +65,7 @@ aspect GrammarTypes { eq RobotArm.getEndEffector().containingRobotArm() = this; syn boolean RobotArm.isInSafetyZone() { + TestCounter.INSTANCE.numberInSafetyZone += 1; for (Joint joint : getJointList()) { if (model().getZoneModel().isInSafetyZone(joint.getCurrentPosition())) { return true; diff --git a/ros2rag.tests/src/test/01-input/example/Test.ros2rag b/ros2rag.tests/src/test/01-input/example/Test.ros2rag index 6421bc8..5c92938 100644 --- a/ros2rag.tests/src/test/01-input/example/Test.ros2rag +++ b/ros2rag.tests/src/test/01-input/example/Test.ros2rag @@ -8,19 +8,23 @@ RobotArm.AppropriateSpeed canDependOn Joint.CurrentPosition as dependency1 ; // --- mapping definitions --- ParseLinkState maps byte[] bytes to panda.Linkstate.PandaLinkState {: + TestCounter.INSTANCE.numberParseLinkState += 1; return panda.Linkstate.PandaLinkState.parseFrom(bytes); :} SerializeRobotConfig maps config.Robotconfig.RobotConfig rc to byte[] {: + TestCounter.INSTANCE.numberSerializeRobotConfig += 1; return rc.toByteArray(); :} LinkStateToIntPosition maps panda.Linkstate.PandaLinkState pls to IntPosition {: + TestCounter.INSTANCE.numberLinkStateToIntPosition += 1; panda.Linkstate.PandaLinkState.Position p = pls.getPos(); return IntPosition.of((int) (10 * p.getPositionX()), (int) (10 * p.getPositionY()), (int) (10 * p.getPositionZ())); :} CreateSpeedMessage maps double speed to config.Robotconfig.RobotConfig {: + TestCounter.INSTANCE.numberCreateSpeedMessage += 1; return config.Robotconfig.RobotConfig.newBuilder() .setSpeed(speed) .build(); diff --git a/ros2rag.tests/src/test/java/org/jastadd/ros2rag/tests/ExampleTest.java b/ros2rag.tests/src/test/java/org/jastadd/ros2rag/tests/ExampleTest.java index 7f8abd9..98d8e8b 100644 --- a/ros2rag.tests/src/test/java/org/jastadd/ros2rag/tests/ExampleTest.java +++ b/ros2rag.tests/src/test/java/org/jastadd/ros2rag/tests/ExampleTest.java @@ -4,6 +4,7 @@ import com.google.protobuf.InvalidProtocolBufferException; import config.Robotconfig.RobotConfig; import example.ast.*; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import panda.Linkstate; @@ -30,6 +31,11 @@ public class ExampleTest extends AbstractMqttTest { private MqttUpdater handler; private ReceiverData data; + @BeforeEach + public void resetTestCounter() { + TestCounter.reset(); + } + @AfterEach public void closeConnections() { if (handler != null) { @@ -52,6 +58,11 @@ public class ExampleTest extends AbstractMqttTest { // joint is currently within the safety zone, so speed should be low TestUtils.waitForMqtt(); + assertEquals(0, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(0, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(1, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(1, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(1, TestCounter.INSTANCE.numberSerializeRobotConfig); assertEquals(1, data.numberOfConfigs); assertFalse(data.failedLastConversion); assertEquals(robotArm.speedLow(), data.lastConfig.getSpeed(), TestUtils.DELTA); @@ -62,6 +73,11 @@ public class ExampleTest extends AbstractMqttTest { // still in safety zone, so no update should have been sent TestUtils.waitForMqtt(); assertEquals(makePosition(2, 2, 2), joint1.getCurrentPosition()); + assertEquals(1, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(1, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(2, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(2, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(2, TestCounter.INSTANCE.numberSerializeRobotConfig); assertEquals(1, data.numberOfConfigs); assertFalse(data.failedLastConversion); assertEquals(robotArm.speedLow(), data.lastConfig.getSpeed(), TestUtils.DELTA); @@ -71,16 +87,40 @@ public class ExampleTest extends AbstractMqttTest { TestUtils.waitForMqtt(); assertEquals(makePosition(3, 4, 5), joint2.getCurrentPosition()); + assertEquals(2, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(2, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(3, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(3, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(3, TestCounter.INSTANCE.numberSerializeRobotConfig); assertEquals(2, data.numberOfConfigs); assertFalse(data.failedLastConversion); assertEquals(robotArm.speedHigh(), data.lastConfig.getSpeed(), TestUtils.DELTA); + // change position of second joint, no change after mapping + sendData(TOPIC_JOINT2, 0.33f, 0.42f, 0.51f); + + TestUtils.waitForMqtt(); + assertEquals(makePosition(3, 4, 5), joint2.getCurrentPosition()); + assertEquals(3, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(3, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(3, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(3, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(3, TestCounter.INSTANCE.numberSerializeRobotConfig); + assertEquals(2, data.numberOfConfigs); + assertFalse(data.failedLastConversion); + // change position of second joint, still out of the safety zone, no update should be sent sendData(TOPIC_JOINT2, 1.3f, 2.4f, 3.5f); TestUtils.waitForMqtt(); assertEquals(makePosition(13, 24, 35), joint2.getCurrentPosition()); + assertEquals(4, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(4, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(4, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(4, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(4, TestCounter.INSTANCE.numberSerializeRobotConfig); assertEquals(2, data.numberOfConfigs); + assertFalse(data.failedLastConversion); } @Test @@ -90,14 +130,24 @@ public class ExampleTest extends AbstractMqttTest { // no value should have been sent TestUtils.waitForMqtt(); + assertEquals(0, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(0, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(1, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(1, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(1, TestCounter.INSTANCE.numberSerializeRobotConfig); assertEquals(0, data.numberOfConfigs); // change position of the first joint out of the safety zone, second still in sendData(TOPIC_JOINT1, 0.2f, 0.2f, 0.2f); - // still in safety zone, first update should have been sent + // still in safety zone, hence, no value should have been sent TestUtils.waitForMqtt(); assertEquals(makePosition(2, 2, 2), joint1.getCurrentPosition()); + assertEquals(1, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(1, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(2, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(2, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(2, TestCounter.INSTANCE.numberSerializeRobotConfig); assertEquals(0, data.numberOfConfigs); // change position of second joint also out of the safety zone, now speed must be high @@ -105,16 +155,50 @@ public class ExampleTest extends AbstractMqttTest { TestUtils.waitForMqtt(); assertEquals(makePosition(3, 4, 5), joint2.getCurrentPosition()); + assertEquals(2, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(2, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(3, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(3, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(3, TestCounter.INSTANCE.numberSerializeRobotConfig); assertEquals(1, data.numberOfConfigs); assertFalse(data.failedLastConversion); assertEquals(robotArm.speedHigh(), data.lastConfig.getSpeed(), TestUtils.DELTA); + // change position of second joint, no change after mapping + sendData(TOPIC_JOINT2, 0.33f, 0.42f, 0.51f); + + TestUtils.waitForMqtt(); + assertEquals(makePosition(3, 4, 5), joint2.getCurrentPosition()); + assertEquals(3, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(3, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(3, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(3, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(3, TestCounter.INSTANCE.numberSerializeRobotConfig); + assertEquals(1, data.numberOfConfigs); + assertFalse(data.failedLastConversion); + // change position of second joint, still out of the safety zone, no update should be sent sendData(TOPIC_JOINT2, 1.3f, 2.4f, 3.5f); TestUtils.waitForMqtt(); assertEquals(makePosition(13, 24, 35), joint2.getCurrentPosition()); + assertEquals(4, TestCounter.INSTANCE.numberParseLinkState); + assertEquals(4, TestCounter.INSTANCE.numberLinkStateToIntPosition); + assertEquals(4, TestCounter.INSTANCE.numberInSafetyZone); + assertEquals(4, TestCounter.INSTANCE.numberCreateSpeedMessage); + assertEquals(4, TestCounter.INSTANCE.numberSerializeRobotConfig); assertEquals(1, data.numberOfConfigs); + assertFalse(data.failedLastConversion); + } + + @Test + public void testFailedConversion() throws IOException { + createModel(); + setupReceiverAndConnect(false); + + handler.publish(TOPIC_JOINT1, "not-a-pandaLinkState".getBytes()); + assertEquals(0, data.numberOfConfigs); + assertTrue(data.failedLastConversion); } private void sendData(String topic, float x, float y, float z) { -- GitLab