Limit repeater GPS acquisition and repair CI tests

This commit is contained in:
mikecarper committed 2026-09-16 21:27:15 -07:00
1 parent 9610cc4245
commit cdd84bdb9f
8 files changed
+84 -9

No files matched your search

@@ -18,6 +18,9 @@ public:
void setLocationAccessAvailable(bool available) {
setTelemetryLocationAccessAvailable(available);
}
void setStopAfterFix(bool enabled) {
setGpsTelemetryStopAfterFix(enabled);
}
void service(unsigned long now) { loopGpsTelemetry(now); }
bool receiverRequired(unsigned long now) const {
return gpsTelemetryReceiverRequired(now);
@@ -103,6 +106,29 @@ TEST(GpsTransportOwnership, UserOffCancelsTelemetryAcquisitionAndHold) {
EXPECT_EQ(1, sensors.starts);
}
TEST(GpsTransportOwnership, RepeaterTelemetryStopsAfterFirstFix) {
resetArduinoMock();
TestGpsSensorManager sensors;
CayenneLPP telemetry(64);
sensors.setStopAfterFix(true);
EXPECT_FALSE(sensors.queryLocation(telemetry));
ASSERT_TRUE(sensors.active);
ASSERT_TRUE(sensors.receiverRequired(millis()));
sensors.acceptFix(47.61f, -122.33f, 125.0f, millis());
EXPECT_FALSE(sensors.active);
EXPECT_FALSE(sensors.receiverRequired(millis()));
EXPECT_EQ(1, sensors.starts);
EXPECT_EQ(1, sensors.stops);
// The next request receives the cached fix without another GPS wake.
EXPECT_TRUE(sensors.queryLocation(telemetry));
EXPECT_EQ(1, telemetry.gps_count);
EXPECT_FALSE(sensors.active);
EXPECT_EQ(1, sensors.starts);
}
TEST(GpsTransportOwnership, LastGoodCacheSurvivesTemporaryUartOwnership) {
resetArduinoMock();
TestGpsSensorManager sensors;
@@ -112,6 +138,9 @@ TEST(GpsTransportOwnership, LastGoodCacheSurvivesTemporaryUartOwnership) {
sensors.acceptFix(47.61f, -122.33f, 125.0f, millis());
g_mock_millis += 31000;
sensors.acceptFix(47.61f, -122.33f, 125.0f, millis());
// Non-repeater roles retain the normal two-hour request hold.
EXPECT_TRUE(sensors.active);
EXPECT_TRUE(sensors.receiverRequired(millis()));
ASSERT_TRUE(sensors.queryLocation(telemetry));
ASSERT_EQ(1, telemetry.gps_count);
+5 -1
View File
@@ -196,8 +196,12 @@ TEST(ManagementRouting, FloodForwardingDoesNotNeedAKeyAndStillHonorsFilters) {
mesh.forwardFloods = true;
mesh::Packet p;
p.header = (PAYLOAD_TYPE_GRP_DATA << PH_TYPE_SHIFT) | ROUTE_TYPE_FLOOD;
p.setPathHashSizeAndCount(1, 0); memcpy(p.payload, "MGR1", 4); p.payload[79] = 1;
p.setPathHashSizeAndCount(1, 0);
p.payload_len = mesh::management::floodSize(mesh::management::HEADER + mesh::management::TAG);
memset(p.payload, 0, p.payload_len);
memcpy(p.payload, "MGR1", 4);
p.payload[79] = 1; // one page containing zero ACL entries
ASSERT_TRUE(mesh::management::validPage(p.payload, p.payload_len, true));
EXPECT_NE(ACTION_RELEASE, mesh.receivePacket(&p));
EXPECT_FALSE(mesh.groupPacketObserved); // never delivered as decrypted channel data
mesh.rejectFloods = true;