]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/tests/testRandomUuid.cc
2 * Copyright (C) 1996-2023 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
10 #include "base/RandomUuid.h"
11 #include "compat/cppunit.h"
12 #include "sbuf/SBuf.h"
13 #include "sbuf/Stream.h"
14 #include "unitTestMain.h"
19 class TestRandomUuid
: public CPPUNIT_NS::TestFixture
21 CPPUNIT_TEST_SUITE( TestRandomUuid
);
22 CPPUNIT_TEST( testUniqueness
);
23 CPPUNIT_TEST( testSerialization
);
24 CPPUNIT_TEST( testTextRepresentation
);
25 CPPUNIT_TEST( testInvalidIds
);
26 CPPUNIT_TEST_SUITE_END();
29 void testUniqueness();
30 void testSerialization();
31 void testTextRepresentation();
32 void testInvalidIds();
35 CPPUNIT_TEST_SUITE_REGISTRATION( TestRandomUuid
);
37 typedef std::map
<SBuf
, RandomUuid::Serialized
> RandomIds
;
39 // Generated by https://www.uuidgenerator.net/version4
40 // binary representation of the generated UUID in network byte order
41 static const RandomIds ExternalIds
{
42 { SBuf("bd1b1c07-f7fa-428a-b019-7e390133b0e5"), {{ 0xbd, 0x1b, 0x1c, 0x07, 0xf7, 0xfa, 0x42, 0x8a, 0xb0, 0x19, 0x7e, 0x39, 0x01, 0x33, 0xb0, 0xe5 }} },
43 { SBuf("f63ccd5a-9d25-41a5-a36c-a7b0c6b5c678"), {{ 0xf6, 0x3c, 0xcd, 0x5a, 0x9d, 0x25, 0x41, 0xa5, 0xa3, 0x6c, 0xa7, 0xb0, 0xc6, 0xb5, 0xc6, 0x78 }} },
44 { SBuf("9c8363ac-9c62-44e9-941f-86b7edc25dc7"), {{ 0x9c, 0x83, 0x63, 0xac, 0x9c, 0x62, 0x44, 0xe9, 0x94, 0x1f, 0x86, 0xb7, 0xed, 0xc2, 0x5d, 0xc7 }} }
47 static const RandomIds InvalidIds
{
48 { SBuf("00000000-0000-0000-0000-000000000000"), {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }} },
49 { SBuf("ffffffff-ffff-ffff-ffff-ffffffffffff"), {{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }} }
53 TestRandomUuid::testUniqueness()
55 std::set
<SBuf
> uniqueIds
;
56 while (uniqueIds
.size() < 1000) {
57 const auto inserted
= uniqueIds
.insert(ToSBuf(RandomUuid())).second
;
58 CPPUNIT_ASSERT_MESSAGE("few generated UUIDs are unique", inserted
);
63 TestRandomUuid::testSerialization()
66 CPPUNIT_ASSERT_MESSAGE("original and deserialized UUIDs are equal", uuid
== RandomUuid(uuid
.serialize()));
70 TestRandomUuid::testTextRepresentation()
72 for (const auto &id
: ExternalIds
) {
73 CPPUNIT_ASSERT_MESSAGE("UUID text representation matches the expected one", ToSBuf(RandomUuid(id
.second
)) == id
.first
);
78 TestRandomUuid::testInvalidIds()
80 for (const auto &id
: InvalidIds
) {
82 RandomUuid
uuid(id
.second
);
83 std::cerr
<< std::endl
84 << "FAIL: " << id
.first
85 << Debug::Extra
<< "error: should be rejected" << std::endl
;
86 } catch (const TextException
&e
) {
87 continue; // success, caught a malformed UUID
89 CPPUNIT_FAIL("failed to reject an invalid UUID");