github.com/rudderlabs/rudder-go-kit@v0.30.0/uuid/uuid_test.go (about) 1 package uuid_test 2 3 import ( 4 "crypto/md5" 5 "testing" 6 7 gofrsuuid "github.com/gofrs/uuid" 8 gluuid "github.com/google/uuid" 9 "github.com/stretchr/testify/require" 10 11 "github.com/rudderlabs/rudder-go-kit/uuid" 12 ) 13 14 var ( 15 uuidGOOGLE gluuid.UUID 16 uuidGOFRS gofrsuuid.UUID 17 ) 18 19 func init() { 20 gluuid.EnableRandPool() 21 } 22 23 func FuzzGetMD5UUID(f *testing.F) { 24 f.Add("hello") 25 f.Add("") 26 f.Add(gluuid.New().String()) 27 28 f.Fuzz(func(t *testing.T, data string) { 29 googleMd5, err := uuid.GetMD5UUID(data) 30 require.NoError(t, err) 31 32 md5Sum := md5.Sum([]byte(data)) 33 gofrsMd5, err := gofrsuuid.FromBytes(md5Sum[:]) 34 require.NoError(t, err) 35 gofrsMd5.SetVersion(gofrsuuid.V4) 36 gofrsMd5.SetVariant(gofrsuuid.VariantRFC4122) 37 38 require.Equal(t, gofrsMd5.String(), googleMd5.String()) 39 }) 40 } 41 42 func Test_fastUUID(t *testing.T) { 43 t.Run("test google conversion gofrs", func(t *testing.T) { 44 uuidGOOGLE = gluuid.New() 45 b, err := uuidGOOGLE.MarshalBinary() 46 require.NoError(t, err) 47 uuidGOFRS = gofrsuuid.FromBytesOrNil(b) 48 require.Equal(t, uuidGOOGLE.String(), uuidGOFRS.String()) 49 }) 50 } 51 52 func BenchmarkUUID(t *testing.B) { 53 t.Run("google uuid", func(b *testing.B) { 54 for i := 0; i < b.N; i++ { 55 uuidGOOGLE = gluuid.New() 56 } 57 }) 58 59 t.Run("google uuid str gofrs", func(b *testing.B) { 60 for i := 0; i < b.N; i++ { 61 uuidGOFRS = gofrsuuid.FromStringOrNil(gluuid.New().String()) 62 } 63 }) 64 65 t.Run("google uuid bin gofrs", func(b *testing.B) { 66 for i := 0; i < b.N; i++ { 67 b, _ := gluuid.New().MarshalBinary() 68 uuidGOFRS = gofrsuuid.FromBytesOrNil(b) 69 } 70 }) 71 72 t.Run("gofrs uuid", func(b *testing.B) { 73 for i := 0; i < b.N; i++ { 74 uuidGOFRS = gofrsuuid.Must(gofrsuuid.NewV4()) 75 } 76 }) 77 }