From bb644ee0874a6e75219fe4f615ed76a739408b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dario=20R=C3=B6thlisberger?= Date: Thu, 5 Oct 2017 11:19:35 +0200 Subject: [PATCH] unittests: add versioning test --- src/firmware/posix/sitl_tests.cmake | 1 + src/systemcmds/tests/CMakeLists.txt | 1 + src/systemcmds/tests/test_versioning.cpp | 117 +++++++++++++++++++++++ src/systemcmds/tests/tests_main.c | 1 + src/systemcmds/tests/tests_main.h | 1 + 5 files changed, 121 insertions(+) create mode 100644 src/systemcmds/tests/test_versioning.cpp diff --git a/src/firmware/posix/sitl_tests.cmake b/src/firmware/posix/sitl_tests.cmake index 3154a6878d..b0804e6a24 100644 --- a/src/firmware/posix/sitl_tests.cmake +++ b/src/firmware/posix/sitl_tests.cmake @@ -29,6 +29,7 @@ set(tests sf0x sleep uorb + versioning ) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") diff --git a/src/systemcmds/tests/CMakeLists.txt b/src/systemcmds/tests/CMakeLists.txt index d646544720..74cb863c77 100644 --- a/src/systemcmds/tests/CMakeLists.txt +++ b/src/systemcmds/tests/CMakeLists.txt @@ -63,6 +63,7 @@ set(srcs test_uart_console.c test_uart_loopback.c test_uart_send.c + test_versioning.cpp tests_main.c ) diff --git a/src/systemcmds/tests/test_versioning.cpp b/src/systemcmds/tests/test_versioning.cpp new file mode 100644 index 0000000000..ef7fe658e5 --- /dev/null +++ b/src/systemcmds/tests/test_versioning.cpp @@ -0,0 +1,117 @@ +#include +#include + +class VersioningTest : public UnitTest +{ +public: + virtual bool run_tests(); + +private: + bool _is_correct_version_tag(const char *version_tag, uint32_t result_goal); + bool _is_correct_version_tag_vendor(const char *version_tag, uint32_t result_goal); + + bool _test_flight_version(); + bool _test_vendor_version(); +}; + +bool VersioningTest::_is_correct_version_tag(const char *version_tag, uint32_t result_goal) +{ + uint32_t result = version_tag_to_number(version_tag); + + if (result == result_goal) { + return true; + + } else { + PX4_ERR("Wrong version: tag: %s, got: 0x%x, expected: 0x%x", version_tag, result, result_goal); + return false; + } +} + +bool VersioningTest::_is_correct_version_tag_vendor(const char *version_tag, uint32_t result_goal) +{ + uint32_t result = version_tag_to_vendor_version_number(version_tag); + + if (result == result_goal) { + return true; + + } else { + PX4_ERR("Wrong version: tag: %s, got: 0x%x, expected: 0x%x", version_tag, result, result_goal); + return false; + } +} + +bool VersioningTest::run_tests() +{ + ut_run_test(_test_flight_version); + ut_run_test(_test_vendor_version); + + return (_tests_failed == 0); +} + +bool VersioningTest::_test_flight_version() +{ + ut_assert_true(_is_correct_version_tag("v11.45.99-1.2.3", 0xB2D63ff)); + ut_assert_true(_is_correct_version_tag("v1.2.3", 0x010203ff)); + ut_assert_true(_is_correct_version_tag("v255.255.255", 0xffffffff)); + ut_assert_true(_is_correct_version_tag("v255.255.255-11", 0xffffff00)); + ut_assert_true(_is_correct_version_tag("v1.2.3-111", 0x01020300)); + ut_assert_true(_is_correct_version_tag("v1.2.3-11-abababab", 0x01020300)); + ut_assert_true(_is_correct_version_tag("11.45.99-1.2.3", 0x0B2D63ff)); + ut_assert_true(_is_correct_version_tag("v11.45.99-1.2.3rc3-7-g7e282f57", 0x0B2D6300)); + ut_assert_true(_is_correct_version_tag("v11.45.99-1.2.3rc4", 0x0B2D63C0)); + ut_assert_true(_is_correct_version_tag("v11.45.99-1.2.3alpha3-7-g7e282f57", 0x0B2D6300)); + ut_assert_true(_is_correct_version_tag("v11.45.99-1.2.3alpha4", 0x0B2D6340)); + ut_assert_true(_is_correct_version_tag("v11.45.99-1.2.3beta3-7-g7e282f57", 0x0B2D6300)); + ut_assert_true(_is_correct_version_tag("v11.45.99-1.2.3beta4", 0x0B2D6380)); + ut_assert_true(_is_correct_version_tag("v11.45.99-1.2.3dev4", 0x0B2D6300)); + ut_assert_true(_is_correct_version_tag("v11.45.99-1.2.3dev3-7-g7e282f57", 0xB2D6300)); + ut_assert_true(_is_correct_version_tag("0.45.99-1.2.3beta4", 0x002D6380)); + ut_assert_true(_is_correct_version_tag("0.0.0-1.2.3beta4", 0x00000080)); + ut_assert_true(_is_correct_version_tag("0.0.0-1.2.3dev4", 0x00000000)); + ut_assert_true(_is_correct_version_tag("v1.6.2-1.0.0", 0x010602ff)); + ut_assert_true(_is_correct_version_tag("v1.6.2-1.0.0rc2", 0x010602C0)); + ut_assert_true(_is_correct_version_tag("v1.6.2-1.0.0-rc2", 0x010602C0)); + ut_assert_true(_is_correct_version_tag("v1.6.2-1.0.0-rc2-abababab", 0x01060200)); + ut_assert_true(_is_correct_version_tag("v1.6.2-rc2", 0x010602C0)); + ut_assert_true(_is_correct_version_tag("v1.6.2rc1", 0x010602C0)); + ut_assert_true(_is_correct_version_tag("v1.6.10-100-g890c415", 0x01060A00)); + ut_assert_true(_is_correct_version_tag("v1.6.2-0.8.7-67-g1d5e979", 0x01060200)); + + return true; +} + +bool VersioningTest::_test_vendor_version() +{ + ut_assert_true(_is_correct_version_tag_vendor("alpha", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("alpha23", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("v11.45.99-34.56.88", 0x223858)); + ut_assert_true(_is_correct_version_tag_vendor("v11.45.99-1.2.3", 0x010203)); + ut_assert_true(_is_correct_version_tag_vendor("1.2.3-11.45.99", 0x0B2D63)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-1.0.0", 0x010000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-255.255.255", 0xFFFFFF)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-255.255.255-11", 0xFFFFFF)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-rc2", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11-abababab", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99rc3-7-g7e282f57", 0x0B2D63)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99rc4", 0x0B2D63)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99alpha3-7-g7e282f57", 0x0B2D63)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99alpha4", 0x0B2D63)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99beta3-7-g7e282f57", 0x0B2D63)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99beta4", 0x0B2D63)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99dev4", 0x0B2D63)); + ut_assert_true(_is_correct_version_tag_vendor("v1.2.3-11.45.99dev3-7-g7e282f57", 0x0B2D63)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-1.0.0-rc2-abababab", 0x010000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-1.0.0-rc2-23-abababab", 0x010000)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.2-0.8.7-67-g1d5e979", 0x000807)); + ut_assert_true(_is_correct_version_tag_vendor("v1.6.0-100-g890c415", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("1.2.3-0.45.99beta4", 0x002D63)); + ut_assert_true(_is_correct_version_tag_vendor("1.2.3-0.0.0beta4", 0x000000)); + ut_assert_true(_is_correct_version_tag_vendor("1.2.3-0.0.0dev4", 0x000000)); + + return true; +} + +ut_declare_test_c(test_versioning, VersioningTest); diff --git a/src/systemcmds/tests/tests_main.c b/src/systemcmds/tests/tests_main.c index 7c5cfacc01..7ffca840a5 100644 --- a/src/systemcmds/tests/tests_main.c +++ b/src/systemcmds/tests/tests_main.c @@ -125,6 +125,7 @@ const struct { {"tone", test_tone, 0}, {"uart_loopback", test_uart_loopback, OPT_NOJIGTEST | OPT_NOALLTEST}, {"uart_send", test_uart_send, OPT_NOJIGTEST | OPT_NOALLTEST}, + {"versioning", test_versioning, 0}, {NULL, NULL, 0} }; diff --git a/src/systemcmds/tests/tests_main.h b/src/systemcmds/tests/tests_main.h index cf2aecefb0..44b4ecff8a 100644 --- a/src/systemcmds/tests/tests_main.h +++ b/src/systemcmds/tests/tests_main.h @@ -87,6 +87,7 @@ extern int test_uart_console(int argc, char *argv[]); extern int test_uart_loopback(int argc, char *argv[]); extern int test_uart_send(int argc, char *argv[]); extern int test_parameters(int argc, char *argv[]); +extern int test_versioning(int argc, char *argv[]); /* external */ extern int commander_tests_main(int argc, char *argv[]);