Store UUIDs as 16 bytes of data
This makes them much more efficient to write over shared memory to solve
the boot UUID logging problem when we add them.
Change-Id: Idf361d6b096bfa52cbc98f555c90bf1f6b90d3e0
diff --git a/aos/events/logging/uuid_test.cc b/aos/events/logging/uuid_test.cc
index 4ea351c..5ec8f83 100644
--- a/aos/events/logging/uuid_test.cc
+++ b/aos/events/logging/uuid_test.cc
@@ -9,12 +9,44 @@
// Tests that random UUIDs are actually random, and we can convert them to a
// string. Not very exhaustive, but it is a good smoke test.
TEST(UUIDTest, GetOne) {
- LOG(INFO) << UUID::Random().string_view();
+ LOG(INFO) << UUID::Random();
+
+ UUID r = UUID::Random();
+
+ std::stringstream ss;
+ ss << r;
+
+ UUID r2 = UUID::FromString(ss.str());
+ EXPECT_EQ(r2, r);
EXPECT_NE(UUID::Random(), UUID::Random());
EXPECT_NE(UUID::Random(), UUID::Zero());
EXPECT_EQ(UUID::Zero(), UUID::Zero());
}
+// Tests that converting to and from various formats produces the same UUID.
+TEST(UUIDTest, FromString) {
+ std::string_view str = "4b88ab00-556a-455b-a395-17d1a0c6f906";
+ std::array<uint8_t, UUID::kDataSize> data = {
+ 0x4b, 0x88, 0xab, 0x00, 0x55, 0x6a, 0x45, 0x5b,
+ 0xa3, 0x95, 0x17, 0xd1, 0xa0, 0xc6, 0xf9, 0x06};
+
+ const UUID u = UUID::FromString(str);
+
+ EXPECT_EQ(u.span(), absl::Span<uint8_t>(data.data(), data.size()));
+ EXPECT_EQ(u.ToString(), str);
+
+ flatbuffers::FlatBufferBuilder fbb;
+ flatbuffers::Offset<flatbuffers::Vector<uint8_t>> data_offset =
+ fbb.CreateVector(data.data(), data.size());
+
+ const flatbuffers::Vector<uint8_t> *data_vector =
+ flatbuffers::GetTemporaryPointer(fbb, data_offset);
+
+ const UUID u2 = UUID::FromVector(data_vector);
+
+ EXPECT_EQ(u, u2);
+}
+
} // namespace testing
} // namespace aos