Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/main/java/io/mapsmessaging/api/MessageBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public MessageBuilder() {
}

public MessageBuilder(Message previousMessage) {
long now = System.currentTimeMillis();
id = 0;
meta = new LinkedHashMap<>(previousMessage.getMeta());
dataMap = new LinkedHashMap<>(previousMessage.getDataMap());
Expand All @@ -83,7 +84,11 @@ public MessageBuilder(Message previousMessage) {
retain = previousMessage.isRetain();
storeOffline = previousMessage.isStoreOffline();
payloadUTF8 = previousMessage.isUTF8();
expiry = (previousMessage.getExpiry() - System.currentTimeMillis());
delayed = previousMessage.getDelayed() - now;
expiry = previousMessage.getExpiry() - now;
if (expiry > 0 && delayed > 0) {
expiry -= delayed;
}
creation = previousMessage.getCreation();
contentType = previousMessage.getContentType();
responseTopic = previousMessage.getResponseTopic();
Expand All @@ -94,7 +99,6 @@ public MessageBuilder(Message previousMessage) {
correlationData = previousMessage.getCorrelationData();
}
qualityOfService = previousMessage.getQualityOfService();
delayed = (previousMessage.getDelayed() - System.currentTimeMillis() );
schemaId = previousMessage.getSchemaId();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public static ConfigurationProperties toConfigurationProperties(MessageOverrideD
properties.put("priority", config.getPriority());
}
if (config.getQualityOfService() != null) {
properties.put("qos", config.getQualityOfService());
properties.put("qos", config.getQualityOfService().name());
}
if (config.getResponseTopic() != null) {
properties.put("responseTopic", config.getResponseTopic());
Expand Down
40 changes: 40 additions & 0 deletions src/test/java/io/mapsmessaging/api/MessageBuilderTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -164,4 +164,44 @@ void copyConstructor_preservesNullResponseTopic() {

Assertions.assertNull(copy.getResponseTopic());
}

@Test
void copyConstructor_preservesAbsoluteExpiryAndDelay() {
Message original = new MessageBuilder().setExpiry(120_000).setDelayed(2_000).build();

Message copy = new MessageBuilder(original).build();

Assertions.assertTrue(Math.abs(copy.getExpiry() - original.getExpiry()) <= 50);
Assertions.assertTrue(Math.abs(copy.getDelayed() - original.getDelayed()) <= 50);
}

@Test
void copyConstructor_preservesAbsoluteExpiryWithoutDelay() {
Message original = new MessageBuilder().setExpiry(120_000).build();

Message copy = new MessageBuilder(original).build();

Assertions.assertTrue(Math.abs(copy.getExpiry() - original.getExpiry()) <= 50);
Assertions.assertEquals(0, copy.getDelayed());
}

@Test
void copyConstructor_preservesAbsoluteDelayWithoutExpiry() {
Message original = new MessageBuilder().setDelayed(2_000).build();

Message copy = new MessageBuilder(original).build();

Assertions.assertEquals(0, copy.getExpiry());
Assertions.assertTrue(Math.abs(copy.getDelayed() - original.getDelayed()) <= 50);
}

@Test
void copyConstructor_preservesAbsentExpiryAndDelay() {
Message original = new MessageBuilder().build();

Message copy = new MessageBuilder(original).build();

Assertions.assertEquals(0, copy.getExpiry());
Assertions.assertEquals(0, copy.getDelayed());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ void configurationRoundTrip_preservesCanonicalKeysAndValues() {

Assertions.assertTrue(saved.containsKey("qos"));
Assertions.assertFalse(saved.containsKey("qualityOfService"));
Assertions.assertEquals(QualityOfService.AT_LEAST_ONCE.name(), saved.getProperty("qos", null));
Assertions.assertEquals(5000L, reloaded.getExpiry());
Assertions.assertEquals(QualityOfService.AT_LEAST_ONCE, reloaded.getQualityOfService());
Assertions.assertTrue(reloaded.getStoreOffline());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,22 +130,6 @@ void rejectsUnsupportedMissionItemsAndFields() {
null))))
.valid());

assertFalse(
model
.validateMission(
new MissionPlan(
List.of(
new PlanItem(
PlanItemType.WAYPOINT,
new GeoPosition(59.434079d, 24.747487d, null, null),
null,
null,
null,
null,
10.0d,
null))))
.valid());

assertFalse(
model
.validateMission(
Expand All @@ -163,6 +147,24 @@ void rejectsUnsupportedMissionItemsAndFields() {
.valid());
}

@Test
void acceptsFiniteResolvedAltitude() {
PlanItem waypoint =
new PlanItem(
PlanItemType.WAYPOINT,
new GeoPosition(59.434079d, 24.747487d, null, null),
null,
null,
null,
null,
10.0d,
null);
MissionPlan missionPlan = new MissionPlan(List.of(waypoint));

assertTrue(model.validateMission(missionPlan).valid());
assertEquals(10.0f, item(model.buildMission(CONTEXT, missionPlan), 1).getAltitude());
}

private static PlanItem waypoint(double latitude, double longitude) {
return new PlanItem(PlanItemType.WAYPOINT, new GeoPosition(latitude, longitude, null, null), null, null, null, null, null, null);
}
Expand All @@ -178,4 +180,4 @@ private static PlanItem positionItem(PlanItemType type) {
private static MavlinkMissionItemInt item(UxvModelCommandSet commandSet, int index) {
return (MavlinkMissionItemInt) commandSet.messages().get(index);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,13 @@ void repositionUsesFixedRelativeAltitudeWithoutMutatingSurfacePosition() {

UxvModelCommandSet commandSet = model.reposition(CONTEXT, new RepositionRequest(position, null, null));

assertEquals(3, commandSet.messages().size());

MavlinkCommandInt reposition = assertInstanceOf(MavlinkCommandInt.class, commandSet.messages().get(0));
assertEquals(MavlinkCommandIntFactory.MAV_CMD_DO_REPOSITION, reposition.getCommand());
assertEquals(MavlinkCommandIntFactory.MAV_FRAME_GLOBAL_RELATIVE_ALT_INT, reposition.getFrame());
assertEquals((float) SticklebackArdupilotUsvModel.MAX_ALTITUDE_METERS, reposition.getAltitude());
assertEquals(2, commandSet.messages().size());

MavlinkCommandLong guidedMode = assertInstanceOf(MavlinkCommandLong.class, commandSet.messages().get(1));
MavlinkCommandLong guidedMode = assertInstanceOf(MavlinkCommandLong.class, commandSet.messages().get(0));
assertEquals(MavlinkCommandLongFactory.MAV_CMD_DO_SET_MODE, guidedMode.getCommand());
assertEquals(MavlinkCommandLongFactory.ARDUPLANE_MODE_GUIDED, guidedMode.getParam2());

MavlinkMissionItem guidedWaypoint = assertInstanceOf(MavlinkMissionItem.class, commandSet.messages().get(2));
MavlinkMissionItem guidedWaypoint = assertInstanceOf(MavlinkMissionItem.class, commandSet.messages().get(1));
assertEquals(MavlinkMissionItemFactory.MAV_FRAME_GLOBAL_RELATIVE_ALT, guidedWaypoint.getFrame());
assertEquals((float) SticklebackArdupilotUsvModel.MAX_ALTITUDE_METERS, guidedWaypoint.getAltitude());
assertEquals(2, guidedWaypoint.getCurrent());
Expand All @@ -77,19 +72,16 @@ void repositionUsesFixedRelativeAltitudeWithoutMutatingSurfacePosition() {
}

@Test
void repositionUsesResolvedAltitudeForEveryCommand() {
void repositionUsesResolvedAltitudeForGuidedWaypoint() {
SticklebackArdupilotUsvModel model = new SticklebackArdupilotUsvModel();
GeoPosition position = new GeoPosition(59.4673d, 24.828353d, 123.0d, null);

UxvModelCommandSet commandSet =
model.reposition(
CONTEXT, new RepositionRequest(position, null, null, 7.5d));

MavlinkCommandInt reposition =
assertInstanceOf(MavlinkCommandInt.class, commandSet.messages().get(0));
MavlinkMissionItem guidedWaypoint =
assertInstanceOf(MavlinkMissionItem.class, commandSet.messages().get(2));
assertEquals(7.5f, reposition.getAltitude());
assertInstanceOf(MavlinkMissionItem.class, commandSet.messages().get(1));
assertEquals(7.5f, guidedWaypoint.getAltitude());
assertEquals(123.0d, position.getAltitudeMslMeters());
}
Expand All @@ -116,9 +108,9 @@ void repositionAcceptsNegativeResolvedAltitude() {
model.reposition(
CONTEXT, new RepositionRequest(position, null, null, -10.0d));

MavlinkCommandInt reposition =
assertInstanceOf(MavlinkCommandInt.class, commandSet.messages().get(0));
assertEquals(-10.0f, reposition.getAltitude());
MavlinkMissionItem guidedWaypoint =
assertInstanceOf(MavlinkMissionItem.class, commandSet.messages().get(1));
assertEquals(-10.0f, guidedWaypoint.getAltitude());
}

@Test
Expand Down
Loading