1package uuid 2 3import ( 4 "crypto/rand" 5 "io" 6 "reflect" 7 "regexp" 8 "testing" 9) 10 11func TestGenerateUUID(t *testing.T) { 12 prev, err := GenerateUUID() 13 if err != nil { 14 t.Fatal(err) 15 } 16 for i := 0; i < 100; i++ { 17 id, err := GenerateUUID() 18 if err != nil { 19 t.Fatal(err) 20 } 21 if prev == id { 22 t.Fatalf("Should get a new ID!") 23 } 24 25 matched, err := regexp.MatchString( 26 "[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}", id) 27 if !matched || err != nil { 28 t.Fatalf("expected match %s %v %s", id, matched, err) 29 } 30 } 31} 32 33func TestGenerateUUIDWithReader(t *testing.T) { 34 var nilReader io.Reader 35 str, err := GenerateUUIDWithReader(nilReader) 36 if err == nil { 37 t.Fatalf("should get an error with a nilReader") 38 } 39 if str != "" { 40 t.Fatalf("should get an empty string") 41 } 42 43 prev, err := GenerateUUIDWithReader(rand.Reader) 44 if err != nil { 45 t.Fatal(err) 46 } 47 48 id, err := GenerateUUIDWithReader(rand.Reader) 49 if err != nil { 50 t.Fatal(err) 51 } 52 if prev == id { 53 t.Fatalf("Should get a new ID!") 54 } 55 56 matched, err := regexp.MatchString( 57 "[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}", id) 58 if !matched || err != nil { 59 t.Fatalf("expected match %s %v %s", id, matched, err) 60 } 61} 62 63func TestParseUUID(t *testing.T) { 64 buf := make([]byte, 16) 65 if _, err := rand.Read(buf); err != nil { 66 t.Fatalf("failed to read random bytes: %v", err) 67 } 68 69 uuidStr, err := FormatUUID(buf) 70 if err != nil { 71 t.Fatal(err) 72 } 73 74 parsedStr, err := ParseUUID(uuidStr) 75 if err != nil { 76 t.Fatal(err) 77 } 78 79 if !reflect.DeepEqual(parsedStr, buf) { 80 t.Fatalf("mismatched buffers") 81 } 82} 83 84func BenchmarkGenerateUUID(b *testing.B) { 85 for n := 0; n < b.N; n++ { 86 _, _ = GenerateUUID() 87 } 88} 89 90func BenchmarkGenerateUUIDWithReader(b *testing.B) { 91 for n := 0; n < b.N; n++ { 92 _, _ = GenerateUUIDWithReader(rand.Reader) 93 } 94} 95