Browse Source

Simplify advert test packet helper

pull/2459/head
Michael Lynch 2 months ago
parent
commit
390a74d661
  1. 38
      test/test_helpers/test_advert_data.cpp

38
test/test_helpers/test_advert_data.cpp

@ -188,8 +188,8 @@ protected:
void onContactResponse(const ContactInfo&, const uint8_t*, uint8_t) override {}
};
mesh::Packet BuildSignedAdvertPacket(const mesh::LocalIdentity& sender, uint32_t timestamp,
const uint8_t* app_data, uint8_t app_data_len) {
mesh::Packet BuildSignedAdvertPacket(uint32_t timestamp, const uint8_t* app_data, uint8_t app_data_len) {
mesh::LocalIdentity sender(kSenderPrivateKeyHex, kSenderPublicKeyHex);
mesh::Packet packet;
// Wire header: flood-routed advert packet with no path hashes yet.
@ -238,21 +238,21 @@ TEST(AdvertData, ParsesNameOnlyFromNetworkPacket) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {};
size_t offset = 0;
constexpr uint32_t advert_timestamp = 1704067201U;
// flags/type byte: chat advert with a trailing name field.
WriteU8(app_data, &offset, ADV_TYPE_CHAT | ADV_NAME_MASK);
// name field: raw bytes for "alice", consuming the rest of app_data.
WriteStringLiteral(app_data, &offset, "alice");
mesh::LocalIdentity sender(kSenderPrivateKeyHex, kSenderPublicKeyHex);
mesh::Packet packet = BuildSignedAdvertPacket(sender, 1704067201U, app_data, offset);
mesh::Packet packet = BuildSignedAdvertPacket(advert_timestamp, app_data, offset);
mesh.recv(&packet);
ASSERT_TRUE(mesh.discovered_contact.has_value());
EXPECT_EQ(ADV_TYPE_CHAT, mesh.discovered_contact->type);
EXPECT_STREQ("alice", mesh.discovered_contact->name);
EXPECT_EQ(1704067201U, mesh.discovered_contact->last_advert_timestamp);
EXPECT_EQ(advert_timestamp, mesh.discovered_contact->last_advert_timestamp);
EXPECT_EQ(1704067200U, mesh.discovered_contact->lastmod);
EXPECT_EQ(0, mesh.discovered_contact->gps_lat);
EXPECT_EQ(0, mesh.discovered_contact->gps_lon);
@ -269,6 +269,7 @@ TEST(AdvertData, ParsesNameAndCoordinatesFromNetworkPacket) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {};
size_t offset = 0;
constexpr uint32_t advert_timestamp = 1704067201U;
// flags/type byte: repeater advert with lat/lon followed by a name.
WriteU8(app_data, &offset, ADV_TYPE_REPEATER | ADV_LATLON_MASK | ADV_NAME_MASK);
@ -279,8 +280,7 @@ TEST(AdvertData, ParsesNameAndCoordinatesFromNetworkPacket) {
// name field: raw bytes for "node" after the coordinate fields.
WriteStringLiteral(app_data, &offset, "node");
mesh::LocalIdentity sender(kSenderPrivateKeyHex, kSenderPublicKeyHex);
mesh::Packet packet = BuildSignedAdvertPacket(sender, 1704067201U, app_data, offset);
mesh::Packet packet = BuildSignedAdvertPacket(advert_timestamp, app_data, offset);
mesh.recv(&packet);
@ -302,6 +302,7 @@ TEST(AdvertData, ParsesCoordinateExtremesFromNetworkPacket) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {};
size_t offset = 0;
constexpr uint32_t advert_timestamp = 1704067201U;
// flags/type byte: sensor advert with both location fields and a name.
WriteU8(app_data, &offset, ADV_TYPE_SENSOR | ADV_LATLON_MASK | ADV_NAME_MASK);
@ -312,8 +313,7 @@ TEST(AdvertData, ParsesCoordinateExtremesFromNetworkPacket) {
// name field: raw bytes for "edge".
WriteStringLiteral(app_data, &offset, "edge");
mesh::LocalIdentity sender(kSenderPrivateKeyHex, kSenderPublicKeyHex);
mesh::Packet packet = BuildSignedAdvertPacket(sender, 1704067201U, app_data, offset);
mesh::Packet packet = BuildSignedAdvertPacket(advert_timestamp, app_data, offset);
mesh.recv(&packet);
@ -335,6 +335,7 @@ TEST(AdvertData, RejectsLongitudeOutsideValidRangeFromNetworkPacket) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {};
size_t offset = 0;
constexpr uint32_t advert_timestamp = 1704067201U;
// flags/type byte: chat advert with location and name fields present.
WriteU8(app_data, &offset, ADV_TYPE_CHAT | ADV_LATLON_MASK | ADV_NAME_MASK);
@ -345,8 +346,7 @@ TEST(AdvertData, RejectsLongitudeOutsideValidRangeFromNetworkPacket) {
// name field: parser should reject before the trailing name matters.
WriteStringLiteral(app_data, &offset, "node");
mesh::LocalIdentity sender(kSenderPrivateKeyHex, kSenderPublicKeyHex);
mesh::Packet packet = BuildSignedAdvertPacket(sender, 1704067201U, app_data, offset);
mesh::Packet packet = BuildSignedAdvertPacket(advert_timestamp, app_data, offset);
mesh.recv(&packet);
@ -364,6 +364,7 @@ TEST(AdvertData, RejectsLongitudeBelowValidRangeFromNetworkPacket) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {};
size_t offset = 0;
constexpr uint32_t advert_timestamp = 1704067201U;
// flags/type byte: chat advert with location and name fields present.
WriteU8(app_data, &offset, ADV_TYPE_CHAT | ADV_LATLON_MASK | ADV_NAME_MASK);
@ -374,8 +375,7 @@ TEST(AdvertData, RejectsLongitudeBelowValidRangeFromNetworkPacket) {
// name field: included to keep the payload shape consistent.
WriteStringLiteral(app_data, &offset, "node");
mesh::LocalIdentity sender(kSenderPrivateKeyHex, kSenderPublicKeyHex);
mesh::Packet packet = BuildSignedAdvertPacket(sender, 1704067201U, app_data, offset);
mesh::Packet packet = BuildSignedAdvertPacket(advert_timestamp, app_data, offset);
mesh.recv(&packet);
@ -393,6 +393,7 @@ TEST(AdvertData, RejectsLatitudeOutsideValidRangeFromNetworkPacket) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {};
size_t offset = 0;
constexpr uint32_t advert_timestamp = 1704067201U;
// flags/type byte: chat advert with location and name fields present.
WriteU8(app_data, &offset, ADV_TYPE_CHAT | ADV_LATLON_MASK | ADV_NAME_MASK);
@ -403,8 +404,7 @@ TEST(AdvertData, RejectsLatitudeOutsideValidRangeFromNetworkPacket) {
// name field: included to keep the payload shape consistent.
WriteStringLiteral(app_data, &offset, "node");
mesh::LocalIdentity sender(kSenderPrivateKeyHex, kSenderPublicKeyHex);
mesh::Packet packet = BuildSignedAdvertPacket(sender, 1704067201U, app_data, offset);
mesh::Packet packet = BuildSignedAdvertPacket(advert_timestamp, app_data, offset);
mesh.recv(&packet);
@ -422,6 +422,7 @@ TEST(AdvertData, RejectsLatitudeBelowValidRangeFromNetworkPacket) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {};
size_t offset = 0;
constexpr uint32_t advert_timestamp = 1704067201U;
// flags/type byte: chat advert with location and name fields present.
WriteU8(app_data, &offset, ADV_TYPE_CHAT | ADV_LATLON_MASK | ADV_NAME_MASK);
@ -432,8 +433,7 @@ TEST(AdvertData, RejectsLatitudeBelowValidRangeFromNetworkPacket) {
// name field: included to keep the payload shape consistent.
WriteStringLiteral(app_data, &offset, "node");
mesh::LocalIdentity sender(kSenderPrivateKeyHex, kSenderPublicKeyHex);
mesh::Packet packet = BuildSignedAdvertPacket(sender, 1704067201U, app_data, offset);
mesh::Packet packet = BuildSignedAdvertPacket(advert_timestamp, app_data, offset);
mesh.recv(&packet);
@ -451,14 +451,14 @@ TEST(AdvertData, RejectsForgedSignatureFromNetworkPacket) {
uint8_t app_data[MAX_ADVERT_DATA_SIZE] = {};
size_t offset = 0;
constexpr uint32_t advert_timestamp = 1704067201U;
// flags/type byte: chat advert with a trailing name field.
WriteU8(app_data, &offset, ADV_TYPE_CHAT | ADV_NAME_MASK);
// name field: raw bytes for "mallory".
WriteStringLiteral(app_data, &offset, "mallory");
mesh::LocalIdentity sender(kSenderPrivateKeyHex, kSenderPublicKeyHex);
mesh::Packet packet = BuildSignedAdvertPacket(sender, 1704067201U, app_data, offset);
mesh::Packet packet = BuildSignedAdvertPacket(advert_timestamp, app_data, offset);
// Corrupt the signature bytes after signing so verification must fail in Mesh::onRecvPacket().
packet.payload[PUB_KEY_SIZE + 4] ^= 0xFF;

Loading…
Cancel
Save