Files
mqtt5/test/unit/string_validation.cpp
Korina Šimičević 2f6751d162 Separate tests into unit & integration
Summary:
- Separate tests into unit & integration

- Update paths in workflows

- Cut test execution time

Reviewers: ivica

Reviewed By: ivica

Subscribers: miljen, iljazovic

Differential Revision: https://repo.mireo.local/D27374
2024-01-16 11:45:23 +01:00

127 lines
6.4 KiB
C++

#include <boost/test/unit_test.hpp>
#include <string>
#include <async_mqtt5/detail/topic_validation.hpp>
#include <async_mqtt5/detail/utf8_mqtt.hpp>
BOOST_AUTO_TEST_SUITE(utf8_mqtt/*, *boost::unit_test::disabled()*/)
std::string to_str(int utf8ch) {
if (utf8ch < 0x80)
return { char(utf8ch) };
if (utf8ch < 0x800)
return {
char((utf8ch >> 6) | 0xC0),
char((utf8ch & 0x3F) | 0x80)
};
if (utf8ch < 0xFFFF)
return {
char((utf8ch >> 12) | 0xE0),
char(((utf8ch >> 6) & 0x3F) | 0x80),
char((utf8ch & 0x3F) | 0x80)
};
return {
char((utf8ch >> 18) | 0xF0),
char(((utf8ch >> 12) & 0x3F) | 0x80),
char(((utf8ch >> 6) & 0x3F) | 0x80),
char((utf8ch & 0x3F) | 0x80)
};
}
BOOST_AUTO_TEST_CASE(utf8_string_validation) {
using namespace async_mqtt5::detail;
BOOST_CHECK(validate_mqtt_utf8("stringy") == validation_result::valid);
BOOST_CHECK(validate_mqtt_utf8("") == validation_result::valid);
BOOST_CHECK(validate_mqtt_utf8(std::string(75000, 'a')) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0x1)) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0x1F)) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0x20)) == validation_result::valid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0x7E)) == validation_result::valid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0x7F)) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0x9F)) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0xA0)) == validation_result::valid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0xD800)) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0xDFFF)) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0xFDD0)) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0xFDEF)) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0xFDF0)) == validation_result::valid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0x1FFFE)) == validation_result::invalid);
BOOST_CHECK(validate_mqtt_utf8(to_str(0x1FFFF)) == validation_result::invalid);
}
BOOST_AUTO_TEST_CASE(topic_filter_validation) {
using namespace async_mqtt5::detail;
BOOST_CHECK(validate_topic_filter("") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("topic") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("topic/subtopic") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("#") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("#sport") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("sport#") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("sport/#/tennis") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("#/sport") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("spo#rt/#") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("sport/#") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("sport/tennis/#") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("sport/tennis#") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("+") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("+/") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("/+") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("+/+") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("+/+/+") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("+sport") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("sport+") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("sport+/player1") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("sport/+player1") == validation_result::invalid);
BOOST_CHECK(validate_topic_filter("sport/+") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("sport/+/player1") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("+/sport/+/player1/+") == validation_result::valid);
BOOST_CHECK(validate_topic_filter("+/tennis/#") == validation_result::valid);
}
BOOST_AUTO_TEST_CASE(topic_name_validation) {
using namespace async_mqtt5::detail;
BOOST_CHECK(validate_topic_name("") == validation_result::invalid);
BOOST_CHECK(validate_topic_name("topic") == validation_result::valid);
BOOST_CHECK(validate_topic_name("topic/subtopic") == validation_result::valid);
BOOST_CHECK(validate_topic_name("#") == validation_result::has_wildcard_character);
BOOST_CHECK(validate_topic_name("sport#") == validation_result::has_wildcard_character);
BOOST_CHECK(validate_topic_name("sport/#") == validation_result::has_wildcard_character);
BOOST_CHECK(validate_topic_name("+") == validation_result::has_wildcard_character);
BOOST_CHECK(validate_topic_name("+sport") == validation_result::has_wildcard_character);
BOOST_CHECK(validate_topic_name("sport+") == validation_result::has_wildcard_character);
BOOST_CHECK(validate_topic_name("sport/+/player1") == validation_result::has_wildcard_character);
BOOST_CHECK(validate_topic_name("+/tennis/#") == validation_result::has_wildcard_character);
}
BOOST_AUTO_TEST_CASE(shared_topic_filter_validation) {
using namespace async_mqtt5::detail;
BOOST_CHECK(validate_shared_topic_filter("") == validation_result::invalid);
BOOST_CHECK(validate_shared_topic_filter("$shared/grp/topic") == validation_result::invalid);
BOOST_CHECK(validate_shared_topic_filter("$share//grp/topic") == validation_result::invalid);
BOOST_CHECK(validate_shared_topic_filter("$share/grp+/topic") == validation_result::invalid);
BOOST_CHECK(validate_shared_topic_filter("$share/#grp/topic") == validation_result::invalid);
BOOST_CHECK(validate_shared_topic_filter("$share/grp/topic") == validation_result::valid);
BOOST_CHECK(validate_shared_topic_filter("$share/grp/topic/#") == validation_result::valid);
BOOST_CHECK(validate_shared_topic_filter("$share/grp/+/topic/#") == validation_result::valid);
BOOST_CHECK(validate_shared_topic_filter("$share/grp/topic/+") == validation_result::valid);
BOOST_CHECK(validate_shared_topic_filter("$share/grp/topic/#", false) == validation_result::has_wildcard_character);
BOOST_CHECK(validate_shared_topic_filter("$share/grp/+/topic/#", false) == validation_result::has_wildcard_character);
BOOST_CHECK(validate_shared_topic_filter("$share/grp/topic/+", false) == validation_result::has_wildcard_character);
}
BOOST_AUTO_TEST_SUITE_END();