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  }