• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mavlink / MAVSDK / 21655944854

04 Feb 2026 02:24AM UTC coverage: 49.009% (+0.05%) from 48.959%
21655944854

Pull #2762

github

web-flow
Merge ed8aa51a8 into b84eae3a5
Pull Request #2762: core: fix MAVLink message sequence

34 of 35 new or added lines in 2 files covered. (97.14%)

1 existing line in 1 file now uncovered.

18350 of 37442 relevant lines covered (49.01%)

672.55 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.97
/src/system_tests/mavlink_seq.cpp
1
#include "log.h"
2
#include "mavsdk.h"
3
#include <chrono>
4
#include <thread>
5
#include <mutex>
6
#include <vector>
7
#include <gtest/gtest.h>
8

9
using namespace mavsdk;
10

11
TEST(SystemTest, MavlinkSeqSequential)
4✔
12
{
13
    Mavsdk mavsdk_autopilot{Mavsdk::Configuration{ComponentType::Autopilot}};
1✔
14
    Mavsdk mavsdk_groundstation{Mavsdk::Configuration{ComponentType::GroundStation}};
1✔
15

16
    ASSERT_EQ(
1✔
17
        mavsdk_groundstation.add_any_connection("udpin://0.0.0.0:17012"),
18
        ConnectionResult::Success);
1✔
19
    ASSERT_EQ(
1✔
20
        mavsdk_autopilot.add_any_connection("udpout://127.0.0.1:17012"), ConnectionResult::Success);
1✔
21

22
    auto maybe_system = mavsdk_groundstation.first_autopilot(10.0);
1✔
23
    ASSERT_TRUE(maybe_system);
1✔
24

25
    std::mutex seq_mutex;
1✔
26
    std::vector<uint8_t> seq_numbers;
1✔
27

28
    constexpr unsigned num_messages = 10;
1✔
29

30
    // Intercept all incoming messages on the ground station and record
31
    // sequence numbers from the autopilot system (sysid 1, compid 1).
32
    mavsdk_groundstation.intercept_incoming_messages_async([&](mavlink_message_t& message) -> bool {
12✔
33
        if (message.sysid == 1 && message.compid == MAV_COMP_ID_AUTOPILOT1) {
11✔
34
            std::lock_guard<std::mutex> lock(seq_mutex);
11✔
35
            seq_numbers.push_back(message.seq);
11✔
36
        }
11✔
37
        return true;
11✔
38
    });
39

40
    // Collect messages (heartbeats at 1 Hz plus any other traffic).
41
    for (unsigned i = 0; i < 150; ++i) {
51✔
42
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
51✔
43
        std::lock_guard<std::mutex> lock(seq_mutex);
51✔
44
        if (seq_numbers.size() >= num_messages) {
51✔
45
            break;
1✔
46
        }
47
    }
51✔
48

49
    // Stop intercepting.
50
    mavsdk_groundstation.intercept_incoming_messages_async(nullptr);
1✔
51

52
    std::lock_guard<std::mutex> lock(seq_mutex);
1✔
53
    ASSERT_GE(seq_numbers.size(), num_messages);
1✔
54

55
    // Verify that all messages from the autopilot component have strictly
56
    // sequential seq numbers (incrementing by 1 with uint8_t wrapping).
57
    for (unsigned i = 1; i < num_messages; ++i) {
10✔
58
        uint8_t expected = static_cast<uint8_t>(seq_numbers[i - 1] + 1);
9✔
59
        EXPECT_EQ(seq_numbers[i], expected)
9✔
NEW
60
            << "seq[" << i - 1 << "]=" << static_cast<int>(seq_numbers[i - 1]) << " seq[" << i
×
61
            << "]=" << static_cast<int>(seq_numbers[i]);
9✔
62
    }
63
}
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc