Move uuid to //aos:uuid

It is getting usage significantly further outside the logger.  Time to
promote it somewhere better.  I only see it getting used more.

Change-Id: I754739347212f5a3154f68c7b7fc84b9a9074d90
diff --git a/aos/uuid_test.cc b/aos/uuid_test.cc
new file mode 100644
index 0000000..33ec6ef
--- /dev/null
+++ b/aos/uuid_test.cc
@@ -0,0 +1,52 @@
+#include "aos/uuid.h"
+
+#include "glog/logging.h"
+#include "gtest/gtest.h"
+
+namespace aos {
+namespace testing {
+
+// 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();
+
+  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