Add uuid methods to create canonical representation

To enable UUIDs to be printed in canonical form, this commit adds
functions to generate a canonical string from UUID octets in either
standard octet order or GUID octet order.

Signed-off-by: Julian Hall <julian.hall@arm.com>
Change-Id: I43fb5cf82c11cb092ce8497568d6b84cdffaae9b
diff --git a/components/common/uuid/test/uuid_tests.cpp b/components/common/uuid/test/uuid_tests.cpp
index 9a278a6..a568a88 100644
--- a/components/common/uuid/test/uuid_tests.cpp
+++ b/components/common/uuid/test/uuid_tests.cpp
@@ -156,4 +156,26 @@
 
 	uuid_guid_octets_from_canonical(&uuid, "00000000-0000-0000-0000-000000000003");
 	CHECK_FALSE(uuid_is_nil(uuid.octets));
+}
+
+TEST(UuidTests, roundTrip) {
+
+	/* A valid UUID using lower-case */
+	const char *uuid_text = "d9df52d5-16a2-4bb2-9aa4-d26d3b84e8c0";
+	CHECK_TRUE(uuid_is_valid(uuid_text));
+
+	struct uuid_octets uuid;
+	struct uuid_canonical canonical_uuid;
+
+	/* Round trip using standard octet order */
+	uuid_octets_from_canonical(&uuid, uuid_text);
+	uuid_canonical_from_octets(&canonical_uuid, &uuid);
+
+	MEMCMP_EQUAL(uuid_text, canonical_uuid.characters, sizeof(canonical_uuid.characters));
+
+	/* Round trip using GUID octet order */
+	uuid_guid_octets_from_canonical(&uuid, uuid_text);
+	uuid_canonical_from_guid_octets(&canonical_uuid, &uuid);
+
+	MEMCMP_EQUAL(uuid_text, canonical_uuid.characters, sizeof(canonical_uuid.characters));
 }
\ No newline at end of file