From 42701fd7d5ee690d9c33afd4b1c486df6b59065b Mon Sep 17 00:00:00 2001 From: Lukas Heppel Date: Wed, 23 Apr 2025 22:06:03 +0200 Subject: [PATCH 1/9] add methods (and headers) for wildcard handling including the tests --- include/up-cpp/datamodel/validator/UUri.h | 25 +++++++++++++ src/datamodel/validator/UUri.cpp | 35 ++++++++++-------- test/coverage/datamodel/UUriValidatorTest.cpp | 36 +++++++++++++++++++ 3 files changed, 81 insertions(+), 15 deletions(-) diff --git a/include/up-cpp/datamodel/validator/UUri.h b/include/up-cpp/datamodel/validator/UUri.h index 840b543fd..8451ac98b 100644 --- a/include/up-cpp/datamodel/validator/UUri.h +++ b/include/up-cpp/datamodel/validator/UUri.h @@ -150,6 +150,31 @@ isValidDefaultSource(const v1::UUri&); /// This is just a check for a zero-length authority name string. [[nodiscard]] bool isLocal(const v1::UUri&); +/// @brief Checks if a UUri has a wildcard authority name. +/// +/// Checks if a UUri has a wildcard authority name, returns true if yes. +[[nodiscard]] bool has_wildcard_authority(const v1::UUri& uuri); + +/// @brief Checks if a UUri has a wildcard service id. +/// +/// Checks if a UUri has a wildcard service id, returns true if yes. +[[nodiscard]] bool has_wildcard_service_id(const v1::UUri& uuri); + +/// @brief Checks if a UUri has a wildcard service instance id. +/// +/// Checks if a UUri has a wildcard service instance id, returns true if yes. +[[nodiscard]] bool has_wildcard_service_instance_id(const v1::UUri& uuri); + +/// @brief Checks if a UUri has a wildcard version. +/// +/// Checks if a UUri has a wildcard version, returns true if yes. +[[nodiscard]] bool has_wildcard_version(const v1::UUri& uuri); + +/// @brief Checks if a UUri has a wildcard resoruce id. +/// +/// Checks if a UUri has a wildcard resoruce id, returns true if yes. +[[nodiscard]] bool has_wildcard_resource_id(const v1::UUri& uuri); + /// @brief Checks if a UUri uses wildcards /// /// Checks for all types of wildcards, returns true if any are found. diff --git a/src/datamodel/validator/UUri.cpp b/src/datamodel/validator/UUri.cpp index cdd7d1dfb..cdeafebb4 100644 --- a/src/datamodel/validator/UUri.cpp +++ b/src/datamodel/validator/UUri.cpp @@ -67,22 +67,27 @@ std::string_view message(Reason reason) { } } +bool has_wildcard_authority(const v1::UUri& uuri){ + return false; +} + +bool has_wildcard_service_id(const v1::UUri& uuri){ + return false; +} + +bool has_wildcard_service_instance_id(const v1::UUri& uuri){ + return false; +} + +bool has_wildcard_version(const v1::UUri& uuri){ + return false; +} + +bool has_wildcard_resource_id(const v1::UUri& uuri){ + return false; +} + bool uses_wildcards(const v1::UUri& uuri) { - if (uuri.authority_name().find("*") != std::string::npos) { - return true; - } - if ((uuri.ue_id() & 0xFFFF) == 0xFFFF) { // service ID - return true; - } - if ((uuri.ue_id() & 0xFFFF0000) == 0xFFFF0000) { // service instance ID - return true; - } - if (uuri.ue_version_major() == 0xFF) { - return true; - } - if (uuri.resource_id() == 0xFFFF) { - return true; - } return false; } diff --git a/test/coverage/datamodel/UUriValidatorTest.cpp b/test/coverage/datamodel/UUriValidatorTest.cpp index b8acca4e8..e725a5872 100644 --- a/test/coverage/datamodel/UUriValidatorTest.cpp +++ b/test/coverage/datamodel/UUriValidatorTest.cpp @@ -97,6 +97,7 @@ TEST_F(TestUUriValidator, Valid) { { auto uuri = getUuri(); uuri.set_resource_id(0xFFFF); + EXPECT_TRUE(has_wildcard_resource_id(uuri)); EXPECT_TRUE(uses_wildcards(uuri)); auto [valid, reason] = isValid(uuri); @@ -117,18 +118,25 @@ TEST_F(TestUUriValidator, Wildcards) { { // Check for no wildcards auto uuri = getUuri(); + EXPECT_FALSE(has_wildcard_authority(uuri)); + EXPECT_FALSE(has_wildcard_service_id(uuri)); + EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); + EXPECT_FALSE(has_wildcard_version(uuri)); + EXPECT_FALSE(has_wildcard_resource_id(uuri)); EXPECT_FALSE(uses_wildcards(uuri)); } { // Change Authority name to "hello*" (Any) auto uuri = getUuri(); uuri.set_authority_name("hello*"); + EXPECT_TRUE(has_wildcard_authority(uuri)); EXPECT_TRUE(uses_wildcards(uuri)); } { // Set Service ID to FFFF (Any) and Instance ID to 1 auto uuri = getUuri(); uuri.set_ue_id(0x0001FFFF); + EXPECT_TRUE(has_wildcard_service_id(uuri)); EXPECT_TRUE(uses_wildcards(uuri)); } @@ -136,18 +144,21 @@ TEST_F(TestUUriValidator, Wildcards) { // This changed in 581291f in up-spec auto uuri = getUuri(); uuri.set_ue_id(0xFFFF0001); + EXPECT_TRUE(has_wildcard_service_instance_id(uuri)); EXPECT_TRUE(uses_wildcards(uuri)); } { // Set major version to FF (Any) auto uuri = getUuri(); uuri.set_ue_version_major(0xFF); + EXPECT_TRUE(has_wildcard_version(uuri)); EXPECT_TRUE(uses_wildcards(uuri)); } { // Set Resource ID to FFFF (any) auto uuri = getUuri(); uuri.set_resource_id(0xFFFF); + EXPECT_TRUE(has_wildcard_resource_id(uuri)); EXPECT_TRUE(uses_wildcards(uuri)); } } @@ -174,6 +185,11 @@ TEST_F(TestUUriValidator, ValidRpcMethod) { auto [valid, reason] = isValidRpcMethod(uuri); EXPECT_TRUE(valid); EXPECT_FALSE(reason.has_value()); + EXPECT_FALSE(has_wildcard_authority(uuri)); + EXPECT_FALSE(has_wildcard_service_id(uuri)); + EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); + EXPECT_FALSE(has_wildcard_version(uuri)); + EXPECT_FALSE(has_wildcard_resource_id(uuri)); EXPECT_FALSE(uses_wildcards(uuri)); } @@ -274,6 +290,11 @@ TEST_F(TestUUriValidator, ValidPublishTopic) { auto [valid, reason] = isValidPublishTopic(uuri); EXPECT_TRUE(valid); EXPECT_FALSE(reason.has_value()); + EXPECT_FALSE(has_wildcard_authority(uuri)); + EXPECT_FALSE(has_wildcard_service_id(uuri)); + EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); + EXPECT_FALSE(has_wildcard_version(uuri)); + EXPECT_FALSE(has_wildcard_resource_id(uuri)); EXPECT_FALSE(uses_wildcards(uuri)); } @@ -332,6 +353,11 @@ TEST_F(TestUUriValidator, ValidNotificationSource) { auto [valid, reason] = isValidNotificationSource(uuri); EXPECT_TRUE(valid); EXPECT_FALSE(reason.has_value()); + EXPECT_FALSE(has_wildcard_authority(uuri)); + EXPECT_FALSE(has_wildcard_service_id(uuri)); + EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); + EXPECT_FALSE(has_wildcard_version(uuri)); + EXPECT_FALSE(has_wildcard_resource_id(uuri)); EXPECT_FALSE(uses_wildcards(uuri)); } @@ -390,6 +416,11 @@ TEST_F(TestUUriValidator, ValidNotificationSink) { auto [valid, reason] = isValidNotificationSink(uuri); EXPECT_TRUE(valid); EXPECT_FALSE(reason.has_value()); + EXPECT_FALSE(has_wildcard_authority(uuri)); + EXPECT_FALSE(has_wildcard_service_id(uuri)); + EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); + EXPECT_FALSE(has_wildcard_version(uuri)); + EXPECT_FALSE(has_wildcard_resource_id(uuri)); EXPECT_FALSE(uses_wildcards(uuri)); } @@ -433,6 +464,11 @@ TEST_F(TestUUriValidator, ValidSubscription) { auto [valid, reason] = isValidSubscription(uuri); EXPECT_TRUE(valid); EXPECT_FALSE(reason.has_value()); + EXPECT_FALSE(has_wildcard_authority(uuri)); + EXPECT_FALSE(has_wildcard_service_id(uuri)); + EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); + EXPECT_FALSE(has_wildcard_version(uuri)); + EXPECT_FALSE(has_wildcard_resource_id(uuri)); EXPECT_FALSE(uses_wildcards(uuri)); } From e4e3587ec2d75f373dc85ba7f2cb585c3abf94e0 Mon Sep 17 00:00:00 2001 From: Lukas Heppel Date: Wed, 23 Apr 2025 22:28:49 +0200 Subject: [PATCH 2/9] add method bodies for wildcard handling --- src/datamodel/validator/UUri.cpp | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/datamodel/validator/UUri.cpp b/src/datamodel/validator/UUri.cpp index 145356787..683ea9c5f 100644 --- a/src/datamodel/validator/UUri.cpp +++ b/src/datamodel/validator/UUri.cpp @@ -73,26 +73,62 @@ std::string_view message(Reason reason) { } bool has_wildcard_authority(const v1::UUri& uuri){ + if (uuri.authority_name().find_first_of('*') != std::string::npos) { + return true; + } return false; } bool has_wildcard_service_id(const v1::UUri& uuri){ + constexpr auto LOWER_16_BIT_MASK = 0xFFFF; + if ((uuri.ue_id() & LOWER_16_BIT_MASK) == + LOWER_16_BIT_MASK) { // service ID + return true; + } return false; } bool has_wildcard_service_instance_id(const v1::UUri& uuri){ + constexpr auto UPPER_16_BIT_MASK = 0xFFFF0000; + if ((uuri.ue_id() & UPPER_16_BIT_MASK) == + UPPER_16_BIT_MASK) { // service instance ID + return true; +} return false; } bool has_wildcard_version(const v1::UUri& uuri){ + constexpr auto LOWER_8_BIT_MASK = 0xFF; + if (uuri.ue_version_major() == LOWER_8_BIT_MASK) { + return true; + } return false; } bool has_wildcard_resource_id(const v1::UUri& uuri){ + constexpr auto LOWER_16_BIT_MASK = 0xFFFF; + if (uuri.resource_id() == LOWER_16_BIT_MASK) { + return true; + } return false; } bool uses_wildcards(const v1::UUri& uuri) { + if (has_wildcard_authority(uuri)) { + return true; + } + if (has_wildcard_service_id(uuri)) { // service ID + return true; + } + if (has_wildcard_service_instance_id(uuri)) { // service instance ID + return true; + } + if (has_wildcard_version(uuri)) { + return true; + } + if (has_wildcard_resource_id(uuri)) { + return true; + } return false; } From b6e53ac32bec6c548e9cf65c627e8ee384e0e461 Mon Sep 17 00:00:00 2001 From: Lukas Heppel Date: Wed, 23 Apr 2025 22:40:50 +0200 Subject: [PATCH 3/9] fix linter warnings --- src/datamodel/validator/UUri.cpp | 48 +++++++------------------------- 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/src/datamodel/validator/UUri.cpp b/src/datamodel/validator/UUri.cpp index 683ea9c5f..41fc1fcab 100644 --- a/src/datamodel/validator/UUri.cpp +++ b/src/datamodel/validator/UUri.cpp @@ -73,63 +73,35 @@ std::string_view message(Reason reason) { } bool has_wildcard_authority(const v1::UUri& uuri){ - if (uuri.authority_name().find_first_of('*') != std::string::npos) { - return true; - } - return false; + return uuri.authority_name().find_first_of('*') != std::string::npos; } bool has_wildcard_service_id(const v1::UUri& uuri){ constexpr auto LOWER_16_BIT_MASK = 0xFFFF; - if ((uuri.ue_id() & LOWER_16_BIT_MASK) == - LOWER_16_BIT_MASK) { // service ID - return true; - } - return false; + return (uuri.ue_id() & LOWER_16_BIT_MASK) == LOWER_16_BIT_MASK; } bool has_wildcard_service_instance_id(const v1::UUri& uuri){ constexpr auto UPPER_16_BIT_MASK = 0xFFFF0000; - if ((uuri.ue_id() & UPPER_16_BIT_MASK) == - UPPER_16_BIT_MASK) { // service instance ID - return true; -} - return false; + return (uuri.ue_id() & UPPER_16_BIT_MASK) == UPPER_16_BIT_MASK; } bool has_wildcard_version(const v1::UUri& uuri){ constexpr auto LOWER_8_BIT_MASK = 0xFF; - if (uuri.ue_version_major() == LOWER_8_BIT_MASK) { - return true; - } - return false; + return uuri.ue_version_major() == LOWER_8_BIT_MASK; } bool has_wildcard_resource_id(const v1::UUri& uuri){ constexpr auto LOWER_16_BIT_MASK = 0xFFFF; - if (uuri.resource_id() == LOWER_16_BIT_MASK) { - return true; - } - return false; + return uuri.resource_id() == LOWER_16_BIT_MASK; } bool uses_wildcards(const v1::UUri& uuri) { - if (has_wildcard_authority(uuri)) { - return true; - } - if (has_wildcard_service_id(uuri)) { // service ID - return true; - } - if (has_wildcard_service_instance_id(uuri)) { // service instance ID - return true; - } - if (has_wildcard_version(uuri)) { - return true; - } - if (has_wildcard_resource_id(uuri)) { - return true; - } - return false; + return has_wildcard_authority(uuri) || + has_wildcard_service_id(uuri) || + has_wildcard_service_instance_id(uuri) || + has_wildcard_version(uuri) || + has_wildcard_resource_id(uuri); } ValidationResult isValid(const v1::UUri& uuri) { From 9c19a7db6b104589505f8edc90fae899ee4430ab Mon Sep 17 00:00:00 2001 From: Lukas Heppel Date: Wed, 23 Apr 2025 22:47:10 +0200 Subject: [PATCH 4/9] fix linting --- src/datamodel/validator/UUri.cpp | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/datamodel/validator/UUri.cpp b/src/datamodel/validator/UUri.cpp index 41fc1fcab..565519739 100644 --- a/src/datamodel/validator/UUri.cpp +++ b/src/datamodel/validator/UUri.cpp @@ -72,36 +72,34 @@ std::string_view message(Reason reason) { } } -bool has_wildcard_authority(const v1::UUri& uuri){ - return uuri.authority_name().find_first_of('*') != std::string::npos; +bool has_wildcard_authority(const v1::UUri& uuri) { + return uuri.authority_name().find_first_of('*') != std::string::npos; } -bool has_wildcard_service_id(const v1::UUri& uuri){ +bool has_wildcard_service_id(const v1::UUri& uuri) { constexpr auto LOWER_16_BIT_MASK = 0xFFFF; - return (uuri.ue_id() & LOWER_16_BIT_MASK) == LOWER_16_BIT_MASK; + return (uuri.ue_id() & LOWER_16_BIT_MASK) == LOWER_16_BIT_MASK; } -bool has_wildcard_service_instance_id(const v1::UUri& uuri){ +bool has_wildcard_service_instance_id(const v1::UUri& uuri) { constexpr auto UPPER_16_BIT_MASK = 0xFFFF0000; - return (uuri.ue_id() & UPPER_16_BIT_MASK) == UPPER_16_BIT_MASK; + return (uuri.ue_id() & UPPER_16_BIT_MASK) == UPPER_16_BIT_MASK; } -bool has_wildcard_version(const v1::UUri& uuri){ +bool has_wildcard_version(const v1::UUri& uuri) { constexpr auto LOWER_8_BIT_MASK = 0xFF; - return uuri.ue_version_major() == LOWER_8_BIT_MASK; + return uuri.ue_version_major() == LOWER_8_BIT_MASK; } -bool has_wildcard_resource_id(const v1::UUri& uuri){ +bool has_wildcard_resource_id(const v1::UUri& uuri) { constexpr auto LOWER_16_BIT_MASK = 0xFFFF; - return uuri.resource_id() == LOWER_16_BIT_MASK; + return uuri.resource_id() == LOWER_16_BIT_MASK; } bool uses_wildcards(const v1::UUri& uuri) { - return has_wildcard_authority(uuri) || - has_wildcard_service_id(uuri) || - has_wildcard_service_instance_id(uuri) || - has_wildcard_version(uuri) || - has_wildcard_resource_id(uuri); + return has_wildcard_authority(uuri) || has_wildcard_service_id(uuri) || + has_wildcard_service_instance_id(uuri) || + has_wildcard_version(uuri) || has_wildcard_resource_id(uuri); } ValidationResult isValid(const v1::UUri& uuri) { From ee38198ee4599a58d89f37d9e149d7b9bd119cec Mon Sep 17 00:00:00 2001 From: Lukas Heppel Date: Thu, 24 Apr 2025 22:20:09 +0200 Subject: [PATCH 5/9] addressing Pete's review by providing check for no wildcards --- include/up-cpp/datamodel/validator/UUri.h | 6 ++-- src/datamodel/validator/UUri.cpp | 16 +++++------ test/coverage/datamodel/UUriValidatorTest.cpp | 28 +++++++++---------- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/include/up-cpp/datamodel/validator/UUri.h b/include/up-cpp/datamodel/validator/UUri.h index 337deeb00..958d9a61c 100644 --- a/include/up-cpp/datamodel/validator/UUri.h +++ b/include/up-cpp/datamodel/validator/UUri.h @@ -175,10 +175,10 @@ isValidDefaultSource(const v1::UUri&); /// Checks if a UUri has a wildcard resoruce id, returns true if yes. [[nodiscard]] bool has_wildcard_resource_id(const v1::UUri& uuri); -/// @brief Checks if a UUri uses wildcards +/// @brief Checks if a UUri uses no wildcards /// -/// Checks for all types of wildcards, returns true if any are found. -[[nodiscard]] bool uses_wildcards(const v1::UUri&); +/// Checks for all types of wildcards, returns true if no wildcards are found. +[[nodiscard]] bool verify_no_wildcards(const v1::UUri&); /// @brief This exception indicates that a UUri object was provided that /// did not contain valid UUri data. diff --git a/src/datamodel/validator/UUri.cpp b/src/datamodel/validator/UUri.cpp index 565519739..7bf5dd831 100644 --- a/src/datamodel/validator/UUri.cpp +++ b/src/datamodel/validator/UUri.cpp @@ -96,10 +96,8 @@ bool has_wildcard_resource_id(const v1::UUri& uuri) { return uuri.resource_id() == LOWER_16_BIT_MASK; } -bool uses_wildcards(const v1::UUri& uuri) { - return has_wildcard_authority(uuri) || has_wildcard_service_id(uuri) || - has_wildcard_service_instance_id(uuri) || - has_wildcard_version(uuri) || has_wildcard_resource_id(uuri); +bool verify_no_wildcards(const v1::UUri& uuri){ + return false; } ValidationResult isValid(const v1::UUri& uuri) { @@ -150,7 +148,7 @@ ValidationResult isValidFilter(const v1::UUri& uuri) { ValidationResult isValidRpcMethod(const v1::UUri& uuri) { // disallow wildcards - if (uses_wildcards(uuri)) { + if (!verify_no_wildcards(uuri)) { return {false, Reason::DISALLOWED_WILDCARD}; } @@ -164,7 +162,7 @@ ValidationResult isValidRpcMethod(const v1::UUri& uuri) { ValidationResult isValidRpcResponse(const v1::UUri& uuri) { // disallow wildcards - if (uses_wildcards(uuri)) { + if (!verify_no_wildcards(uuri)) { return {false, Reason::DISALLOWED_WILDCARD}; } @@ -188,7 +186,7 @@ ValidationResult isValidDefaultSource(const v1::UUri& uuri) { ValidationResult isValidPublishTopic(const v1::UUri& uuri) { // disallow wildcards - if (uses_wildcards(uuri)) { + if (!verify_no_wildcards(uuri)) { return {false, Reason::DISALLOWED_WILDCARD}; } @@ -202,7 +200,7 @@ ValidationResult isValidPublishTopic(const v1::UUri& uuri) { ValidationResult isValidNotificationSource(const v1::UUri& uuri) { // disallow wildcards - if (uses_wildcards(uuri)) { + if (!verify_no_wildcards(uuri)) { return {false, Reason::DISALLOWED_WILDCARD}; } @@ -216,7 +214,7 @@ ValidationResult isValidNotificationSource(const v1::UUri& uuri) { ValidationResult isValidNotificationSink(const v1::UUri& uuri) { // disallow wildcards - if (uses_wildcards(uuri)) { + if (!verify_no_wildcards(uuri)) { return {false, Reason::DISALLOWED_WILDCARD}; } diff --git a/test/coverage/datamodel/UUriValidatorTest.cpp b/test/coverage/datamodel/UUriValidatorTest.cpp index fbe8fad6b..075693d0b 100644 --- a/test/coverage/datamodel/UUriValidatorTest.cpp +++ b/test/coverage/datamodel/UUriValidatorTest.cpp @@ -104,7 +104,7 @@ TEST_F(TestUUriValidator, Valid) { // NOLINT auto uuri = get_u_uri(); uuri.set_resource_id(WILDCARD); EXPECT_TRUE(has_wildcard_resource_id(uuri)); - EXPECT_TRUE(uses_wildcards(uuri)); + EXPECT_FALSE(verify_no_wildcards(uuri)); auto [valid, reason] = isValid(uuri); EXPECT_FALSE(valid); @@ -129,14 +129,14 @@ TEST_F(TestUUriValidator, Wildcards) { // NOLINT EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); EXPECT_FALSE(has_wildcard_version(uuri)); EXPECT_FALSE(has_wildcard_resource_id(uuri)); - EXPECT_FALSE(uses_wildcards(uuri)); + EXPECT_TRUE(verify_no_wildcards(uuri)); } { // Change Authority name to "hello*" (Any) auto uuri = get_u_uri(); - uuri.set_authority_name("hello*"); + uuri.set_authority_name("*"); EXPECT_TRUE(has_wildcard_authority(uuri)); - EXPECT_TRUE(uses_wildcards(uuri)); + EXPECT_FALSE(verify_no_wildcards(uuri)); } { // Set Service ID to FFFF (Any) and Instance ID to 1 @@ -144,7 +144,7 @@ TEST_F(TestUUriValidator, Wildcards) { // NOLINT auto uuri = get_u_uri(); uuri.set_ue_id(WILDCARD_SERVICE_UE_ID); EXPECT_TRUE(has_wildcard_service_id(uuri)); - EXPECT_TRUE(uses_wildcards(uuri)); + EXPECT_FALSE(verify_no_wildcards(uuri)); } { // Set Service ID to 1 and Instance ID to FFFF (Any) @@ -152,7 +152,7 @@ TEST_F(TestUUriValidator, Wildcards) { // NOLINT auto uuri = get_u_uri(); uuri.set_ue_id(WILDCARD_INSTANCE_UE_ID); EXPECT_TRUE(has_wildcard_service_instance_id(uuri)); - EXPECT_TRUE(uses_wildcards(uuri)); + EXPECT_FALSE(verify_no_wildcards(uuri)); } { // Set major version to FF (Any) @@ -160,14 +160,14 @@ TEST_F(TestUUriValidator, Wildcards) { // NOLINT auto uuri = get_u_uri(); uuri.set_ue_version_major(WILDCARD_VERSION_MAJOR); EXPECT_TRUE(has_wildcard_version(uuri)); - EXPECT_TRUE(uses_wildcards(uuri)); + EXPECT_FALSE(verify_no_wildcards(uuri)); } { // Set Resource ID to FFFF (any) auto uuri = get_u_uri(); uuri.set_resource_id(WILDCARD); EXPECT_TRUE(has_wildcard_resource_id(uuri)); - EXPECT_TRUE(uses_wildcards(uuri)); + EXPECT_FALSE(verify_no_wildcards(uuri)); } } @@ -198,7 +198,7 @@ TEST_F(TestUUriValidator, ValidRpcMethod) { // NOLINT EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); EXPECT_FALSE(has_wildcard_version(uuri)); EXPECT_FALSE(has_wildcard_resource_id(uuri)); - EXPECT_FALSE(uses_wildcards(uuri)); + EXPECT_TRUE(verify_no_wildcards(uuri)); } { @@ -249,7 +249,7 @@ TEST_F(TestUUriValidator, ValidRpcResponse) { // NOLINT auto [valid, reason] = isValidRpcResponse(uuri); EXPECT_TRUE(valid); EXPECT_FALSE(reason.has_value()); - EXPECT_FALSE(uses_wildcards(uuri)); + EXPECT_TRUE(verify_no_wildcards(uuri)); } { @@ -305,7 +305,7 @@ TEST_F(TestUUriValidator, ValidPublishTopic) { // NOLINT EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); EXPECT_FALSE(has_wildcard_version(uuri)); EXPECT_FALSE(has_wildcard_resource_id(uuri)); - EXPECT_FALSE(uses_wildcards(uuri)); + EXPECT_TRUE(verify_no_wildcards(uuri)); } { @@ -370,7 +370,7 @@ TEST_F(TestUUriValidator, ValidNotificationSource) { // NOLINT EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); EXPECT_FALSE(has_wildcard_version(uuri)); EXPECT_FALSE(has_wildcard_resource_id(uuri)); - EXPECT_FALSE(uses_wildcards(uuri)); + EXPECT_TRUE(verify_no_wildcards(uuri)); } { @@ -434,7 +434,7 @@ TEST_F(TestUUriValidator, ValidNotificationSink) { // NOLINT EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); EXPECT_FALSE(has_wildcard_version(uuri)); EXPECT_FALSE(has_wildcard_resource_id(uuri)); - EXPECT_FALSE(uses_wildcards(uuri)); + EXPECT_TRUE(verify_no_wildcards(uuri)); } { @@ -483,7 +483,7 @@ TEST_F(TestUUriValidator, ValidSubscription) { // NOLINT EXPECT_FALSE(has_wildcard_service_instance_id(uuri)); EXPECT_FALSE(has_wildcard_version(uuri)); EXPECT_FALSE(has_wildcard_resource_id(uuri)); - EXPECT_FALSE(uses_wildcards(uuri)); + EXPECT_TRUE(verify_no_wildcards(uuri)); } { From 1a5b2db82eb8b181e2fec70e7cdbba0f4aa94e4f Mon Sep 17 00:00:00 2001 From: Lukas Heppel Date: Thu, 24 Apr 2025 22:24:02 +0200 Subject: [PATCH 6/9] fix tests and linting --- src/datamodel/validator/UUri.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/datamodel/validator/UUri.cpp b/src/datamodel/validator/UUri.cpp index 7bf5dd831..891e41260 100644 --- a/src/datamodel/validator/UUri.cpp +++ b/src/datamodel/validator/UUri.cpp @@ -96,8 +96,10 @@ bool has_wildcard_resource_id(const v1::UUri& uuri) { return uuri.resource_id() == LOWER_16_BIT_MASK; } -bool verify_no_wildcards(const v1::UUri& uuri){ - return false; +bool verify_no_wildcards(const v1::UUri& uuri) { + return !has_wildcard_authority(uuri) && !has_wildcard_service_id(uuri) && + !has_wildcard_service_instance_id(uuri) && + !has_wildcard_version(uuri) && !has_wildcard_resource_id(uuri); } ValidationResult isValid(const v1::UUri& uuri) { From 11266842d425eee765a8527fe68fdde5bf9020b2 Mon Sep 17 00:00:00 2001 From: Lukas Heppel Date: Tue, 29 Apr 2025 07:40:10 +0200 Subject: [PATCH 7/9] equality compaison for authority name --- src/datamodel/validator/UUri.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/datamodel/validator/UUri.cpp b/src/datamodel/validator/UUri.cpp index 891e41260..4444f5ef7 100644 --- a/src/datamodel/validator/UUri.cpp +++ b/src/datamodel/validator/UUri.cpp @@ -73,7 +73,7 @@ std::string_view message(Reason reason) { } bool has_wildcard_authority(const v1::UUri& uuri) { - return uuri.authority_name().find_first_of('*') != std::string::npos; + return uuri.authority_name()== "*"; } bool has_wildcard_service_id(const v1::UUri& uuri) { From 0c117f3a28896da5bb3563bb992a1f3870099d12 Mon Sep 17 00:00:00 2001 From: Lukas Heppel Date: Tue, 29 Apr 2025 07:47:07 +0200 Subject: [PATCH 8/9] fix format --- src/datamodel/validator/UUri.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/datamodel/validator/UUri.cpp b/src/datamodel/validator/UUri.cpp index 4444f5ef7..0a9e1e117 100644 --- a/src/datamodel/validator/UUri.cpp +++ b/src/datamodel/validator/UUri.cpp @@ -73,7 +73,7 @@ std::string_view message(Reason reason) { } bool has_wildcard_authority(const v1::UUri& uuri) { - return uuri.authority_name()== "*"; + return uuri.authority_name() == "*"; } bool has_wildcard_service_id(const v1::UUri& uuri) { From a0805a96dc43a2f8c52035a029e8c23970abeee8 Mon Sep 17 00:00:00 2001 From: Pete LeVasseur Date: Tue, 29 Apr 2025 08:54:01 -0400 Subject: [PATCH 9/9] Update comment to reflect wildcard is only "*" --- test/coverage/datamodel/UUriValidatorTest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/coverage/datamodel/UUriValidatorTest.cpp b/test/coverage/datamodel/UUriValidatorTest.cpp index 075693d0b..c55b13ece 100644 --- a/test/coverage/datamodel/UUriValidatorTest.cpp +++ b/test/coverage/datamodel/UUriValidatorTest.cpp @@ -132,7 +132,7 @@ TEST_F(TestUUriValidator, Wildcards) { // NOLINT EXPECT_TRUE(verify_no_wildcards(uuri)); } - { // Change Authority name to "hello*" (Any) + { // Change Authority name to "*" (Any) auto uuri = get_u_uri(); uuri.set_authority_name("*"); EXPECT_TRUE(has_wildcard_authority(uuri));