]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/libs/uuid/test/test_name_generator.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / uuid / test / test_name_generator.cpp
index 13ac115464f3d85014ed149381157125d9a97414..070577a4aadce7d9485e752e1f965338bf82dec9 100644 (file)
 #include <boost/uuid/uuid.hpp>
 #include <boost/uuid/uuid_io.hpp>
 #include <boost/uuid/name_generator.hpp>
+#include <boost/uuid/name_generator_md5.hpp>
+#include <boost/uuid/string_generator.hpp>
 #include <boost/detail/lightweight_test.hpp>
+#include <boost/config.hpp>
 
 int main(int, char*[])
 {
     using namespace boost::uuids;
 
-    uuid dns_namespace_uuid = {{0x6b, 0xa7, 0xb8, 0x10, 0x9d, 0xad, 0x11, 0xd1, 0x80, 0xb4, 0x00, 0xc0, 0x4f, 0xd4, 0x30, 0xc8}};
-    uuid correct = {{0x21, 0xf7, 0xf8, 0xde, 0x80, 0x51, 0x5b, 0x89, 0x86, 0x80, 0x01, 0x95, 0xef, 0x79, 0x8b, 0x6a}};
-    uuid wcorrect = {{0xc3, 0x15, 0x27, 0x0b, 0xa4, 0x66, 0x58, 0x72, 0xac, 0xa4, 0x96, 0x26, 0xce, 0xc0, 0xf4, 0xbe}};
+    // Verify well-known uuid namespaces
+    BOOST_TEST_EQ(ns::dns(),
+                  string_generator()("6ba7b810-9dad-11d1-80b4-00c04fd430c8"));
+    BOOST_TEST_EQ(ns::url(),
+                  string_generator()("6ba7b811-9dad-11d1-80b4-00c04fd430c8"));
+    BOOST_TEST_EQ(ns::oid(),
+                  string_generator()("6ba7b812-9dad-11d1-80b4-00c04fd430c8"));
+    BOOST_TEST_EQ(ns::x500dn(),
+                  string_generator()("6ba7b814-9dad-11d1-80b4-00c04fd430c8"));
 
-    name_generator gen(dns_namespace_uuid);
+    uuid correct_sha1  = {{0x21, 0xf7, 0xf8, 0xde, 0x80, 0x51, 0x5b, 0x89, 0x86, 0x80, 0x01, 0x95, 0xef, 0x79, 0x8b, 0x6a}};
+    uuid wcorrect_sha1 = {{0xc3, 0x15, 0x27, 0x0b, 0xa4, 0x66, 0x58, 0x72, 0xac, 0xa4, 0x96, 0x26, 0xce, 0xc0, 0xf4, 0xbe}};
+    uuid correct_md5   = {{0xec, 0x5c, 0x20, 0x06, 0x0e, 0x00, 0x3b, 0x25, 0xa0, 0xa8, 0xbc, 0xe8, 0x4e, 0x24, 0xb8, 0x5a}};
+
+    name_generator_sha1 gen(ns::dns());
 
     uuid u = gen("www.widgets.com");
-    BOOST_TEST_EQ(u, correct);
+    BOOST_TEST_EQ(u, correct_sha1);
     BOOST_TEST_EQ(u.variant(), boost::uuids::uuid::variant_rfc_4122);
+    BOOST_TEST_EQ(u.version(), boost::uuids::uuid::version_name_based_sha1);
 
-    u = gen(L"www.widgets.com");
-    BOOST_TEST_EQ(u, wcorrect);
+    // RFC 4122 Section 4.3 Bullet 1, same name in same namespace makes the same UUID
+    u = gen(std::string("www.widgets.com"));
+    BOOST_TEST_EQ(u, correct_sha1);
     BOOST_TEST_EQ(u.variant(), boost::uuids::uuid::variant_rfc_4122);
 
-    u = gen(std::string("www.widgets.com"));
-    BOOST_TEST_EQ(u, correct);
+    // RFC 4122 Section 4.3 Bullet 2, two names in the same namespace makes a different UUID
+    uuid u2 = gen("www.wonka.com");
+    BOOST_TEST_NE(u, u2);
+    BOOST_TEST_EQ(u.variant(), boost::uuids::uuid::variant_rfc_4122);
+
+    u = gen(L"www.widgets.com");
+    BOOST_TEST_EQ(u, wcorrect_sha1);
     BOOST_TEST_EQ(u.variant(), boost::uuids::uuid::variant_rfc_4122);
 
+#ifndef BOOST_NO_STD_WSTRING
     u = gen(std::wstring(L"www.widgets.com"));
-    BOOST_TEST_EQ(u, wcorrect);
+    BOOST_TEST_EQ(u, wcorrect_sha1);
     BOOST_TEST_EQ(u.variant(), boost::uuids::uuid::variant_rfc_4122);
+#endif
 
     char name[] = "www.widgets.com";
     u = gen(name, 15);
-    BOOST_TEST_EQ(u, correct);
+    BOOST_TEST_EQ(u, correct_sha1);
     BOOST_TEST_EQ(u.variant(), boost::uuids::uuid::variant_rfc_4122);
 
+    // RFC 4122 Section 4.3 Bullet 3, same name in different namespaces makes a different UUID
+    name_generator_sha1 other(ns::url());
+    uuid u3 = other("www.widgets.com");
+    BOOST_TEST_NE(u, u3);
+
+    // used by documentation
+    uuid udoc = gen("boost.org");
+    std::cout << "boost.org uuid in dns namespace: " << udoc << std::endl;
+    // boost.org uuid in dns namespace: 0043f363-bbb4-5369-840a-322df6ec1926
+
+    // deprecated equality check, make sure boost::uuids::name_generator is a sha1 generator
+    name_generator other2(ns::url());
+    uuid u4 = other2("www.widgets.com");
+    BOOST_TEST_EQ(u3, u4);
+
+    // MD5 generator
+    name_generator_md5 mdgen(ns::url());
+    uuid md = mdgen("www.widgets.com");
+    BOOST_TEST_NE(u3, md);
+    BOOST_TEST_EQ(md.variant(), boost::uuids::uuid::variant_rfc_4122);
+    BOOST_TEST_EQ(md.version(), boost::uuids::uuid::version_name_based_md5);
+    BOOST_TEST_EQ(md, correct_md5);
+
+    // latest generator is SHA1 (test will break on change, which is good)
+    name_generator_latest latestgen(ns::dns());
+    uuid latest = latestgen("www.widgets.com");
+    BOOST_TEST_EQ(latest, correct_sha1);
+
     return boost::report_errors();
 }