uuid_test.go 1.8 KB

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