blob: edfd5a8f62f13ca0ba47f3814af23bd56f0026cc [file] [log] [blame]
Austin Schuh4385b142021-03-14 21:31:13 -07001#include "aos/uuid.h"
Austin Schuh64fab802020-09-09 22:47:47 -07002
Austin Schuh99f7c6a2024-06-25 22:07:44 -07003#include "absl/log/check.h"
4#include "absl/log/log.h"
Austin Schuh64fab802020-09-09 22:47:47 -07005#include "gtest/gtest.h"
6
Stephan Pleinesf63bde82024-01-13 15:59:33 -08007namespace aos::testing {
Austin Schuh64fab802020-09-09 22:47:47 -07008
9// Tests that random UUIDs are actually random, and we can convert them to a
10// string. Not very exhaustive, but it is a good smoke test.
11TEST(UUIDTest, GetOne) {
Austin Schuh5e2bfb82021-03-13 22:46:55 -080012 LOG(INFO) << UUID::Random();
13
14 UUID r = UUID::Random();
15
16 std::stringstream ss;
17 ss << r;
18
19 UUID r2 = UUID::FromString(ss.str());
20 EXPECT_EQ(r2, r);
Austin Schuh64fab802020-09-09 22:47:47 -070021
22 EXPECT_NE(UUID::Random(), UUID::Random());
Brian Silverman1f345222020-09-24 21:14:48 -070023 EXPECT_NE(UUID::Random(), UUID::Zero());
24 EXPECT_EQ(UUID::Zero(), UUID::Zero());
Austin Schuh64fab802020-09-09 22:47:47 -070025}
26
Austin Schuh5e2bfb82021-03-13 22:46:55 -080027// Tests that converting to and from various formats produces the same UUID.
Alexei Strots72060d62022-10-10 19:23:53 -070028TEST(UUIDTest, FromStringOrSpan) {
Austin Schuh5e2bfb82021-03-13 22:46:55 -080029 std::string_view str = "4b88ab00-556a-455b-a395-17d1a0c6f906";
30 std::array<uint8_t, UUID::kDataSize> data = {
31 0x4b, 0x88, 0xab, 0x00, 0x55, 0x6a, 0x45, 0x5b,
32 0xa3, 0x95, 0x17, 0xd1, 0xa0, 0xc6, 0xf9, 0x06};
33
Alexei Strots72060d62022-10-10 19:23:53 -070034 const UUID u_str = UUID::FromString(str);
35 const UUID u_span = UUID::FromSpan({data.data(), data.size()});
Austin Schuh5e2bfb82021-03-13 22:46:55 -080036
Alexei Strots72060d62022-10-10 19:23:53 -070037 EXPECT_EQ(u_str.span(), absl::Span<uint8_t>(data.data(), data.size()));
38 EXPECT_EQ(u_span.span(), absl::Span<uint8_t>(data.data(), data.size()));
39 EXPECT_EQ(u_str.ToString(), str);
40 EXPECT_EQ(u_span.ToString(), str);
Austin Schuh5e2bfb82021-03-13 22:46:55 -080041
42 flatbuffers::FlatBufferBuilder fbb;
43 flatbuffers::Offset<flatbuffers::Vector<uint8_t>> data_offset =
44 fbb.CreateVector(data.data(), data.size());
45
46 const flatbuffers::Vector<uint8_t> *data_vector =
47 flatbuffers::GetTemporaryPointer(fbb, data_offset);
48
49 const UUID u2 = UUID::FromVector(data_vector);
50
Alexei Strots72060d62022-10-10 19:23:53 -070051 EXPECT_EQ(u_str, u2);
52 EXPECT_EQ(u_span, u2);
Austin Schuh5e2bfb82021-03-13 22:46:55 -080053}
54
Stephan Pleinesf63bde82024-01-13 15:59:33 -080055} // namespace aos::testing