package registry import ( "encoding/json" "math/rand" "strings" "testing" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/stretchr/testify/require" ) func BenchmarkObjectInfoMarshal(b *testing.B) { obj := randomObjectInfo() b.Run("json", func(b *testing.B) { for i := 0; i < b.N; i++ { _, err := json.Marshal(obj) if err != nil { b.FailNow() } } }) b.Run("native", func(b *testing.B) { for i := 0; i < b.N; i++ { _, err := obj.Marshal() if err != nil { b.FailNow() } } }) } func BenchmarkObjectInfoUnmarshal(b *testing.B) { obj := randomObjectInfo() b.Run("json", func(b *testing.B) { data, err := json.Marshal(obj) require.NoError(b, err) for i := 0; i < b.N; i++ { var obj ObjectInfo err := json.Unmarshal(data, &obj) if err != nil { b.FailNow() } } }) b.Run("native", func(b *testing.B) { data, err := obj.Marshal() require.NoError(b, err) for i := 0; i < b.N; i++ { err := obj.Unmarshal(data) if err != nil { b.FailNow() } } }) } func TestObjectInfoMarshal(t *testing.T) { expected := randomObjectInfo() data, err := expected.Marshal() require.NoError(t, err) var actual ObjectInfo require.NoError(t, actual.Unmarshal(data)) require.Equal(t, expected, actual) } func TestObjectInfoEncodeBinary(t *testing.T) { expected := randomObjectInfo() w := io.NewBufBinWriter() expected.EncodeBinary(w.BinWriter) require.NoError(t, w.Err) data := w.Bytes() r := io.NewBinReaderFromBuf(data) var actual ObjectInfo actual.DecodeBinary(r) require.NoError(t, r.Err) require.Equal(t, expected, actual) } func randomObjectInfo() ObjectInfo { return ObjectInfo{ Id: rand.Uint64(), CreatedAt: int64(rand.Uint64()), CID: randString(32), OID: randString(32), S3Bucket: randString(32), S3Key: randString(32), Status: "created", PayloadHash: randString(64), } } func randString(n int) string { var sb strings.Builder for i := 0; i < n; i++ { sb.WriteRune('a' + rune(rand.Int())%('z'-'a'+1)) } return sb.String() }