1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
3 #include "base/utility.hpp"
5 #include <BoostTestTargetConfig.h>
7 using namespace icinga;
9 BOOST_AUTO_TEST_SUITE(base_utility)
11 BOOST_AUTO_TEST_CASE(comparepasswords_works)
13 BOOST_CHECK(Utility::ComparePasswords("", ""));
15 BOOST_CHECK(!Utility::ComparePasswords("x", ""));
16 BOOST_CHECK(!Utility::ComparePasswords("", "x"));
18 BOOST_CHECK(Utility::ComparePasswords("x", "x"));
19 BOOST_CHECK(!Utility::ComparePasswords("x", "y"));
21 BOOST_CHECK(Utility::ComparePasswords("abcd", "abcd"));
22 BOOST_CHECK(!Utility::ComparePasswords("abc", "abcd"));
23 BOOST_CHECK(!Utility::ComparePasswords("abcde", "abcd"));
26 BOOST_AUTO_TEST_CASE(comparepasswords_issafe)
28 using std::chrono::duration_cast;
29 using std::chrono::microseconds;
30 using std::chrono::steady_clock;
34 a.Append(200000001, 'a');
35 b.Append(200000002, 'b');
37 auto start1 (steady_clock::now());
39 Utility::ComparePasswords(a, a);
41 auto duration1 (steady_clock::now() - start1);
43 auto start2 (steady_clock::now());
45 Utility::ComparePasswords(a, b);
47 auto duration2 (steady_clock::now() - start2);
49 double diff = (double)duration_cast<microseconds>(duration1).count() / (double)duration_cast<microseconds>(duration2).count();
50 BOOST_WARN(0.9 <= diff && diff <= 1.1);
53 BOOST_AUTO_TEST_CASE(validateutf8)
55 BOOST_CHECK(Utility::ValidateUTF8("") == "");
56 BOOST_CHECK(Utility::ValidateUTF8("a") == "a");
57 BOOST_CHECK(Utility::ValidateUTF8("\xC3") == "\xEF\xBF\xBD");
58 BOOST_CHECK(Utility::ValidateUTF8("\xC3\xA4") == "\xC3\xA4");
61 BOOST_AUTO_TEST_SUITE_END()