neo-go/pkg/services/oracle/neofs/neofs_test.go

93 lines
2.3 KiB
Go
Raw Normal View History

2020-10-16 09:51:43 +00:00
package neofs
import (
"errors"
"net/url"
"testing"
cid "github.com/nspcc-dev/neofs-api-go/pkg/container/id"
2020-10-16 09:51:43 +00:00
"github.com/nspcc-dev/neofs-api-go/pkg/object"
"github.com/stretchr/testify/require"
)
func TestParseRange(t *testing.T) {
t.Run("valid", func(t *testing.T) {
r, err := parseRange("13|87")
require.NoError(t, err)
require.Equal(t, uint64(13), r.GetOffset())
require.Equal(t, uint64(87), r.GetLength())
})
t.Run("missing offset", func(t *testing.T) {
_, err := parseRange("|87")
require.Error(t, err)
})
t.Run("missing length", func(t *testing.T) {
_, err := parseRange("13|")
require.Error(t, err)
})
t.Run("missing separator", func(t *testing.T) {
_, err := parseRange("1387")
require.Error(t, err)
})
t.Run("invalid number", func(t *testing.T) {
_, err := parseRange("ab|87")
require.Error(t, err)
})
}
func TestParseNeoFSURL(t *testing.T) {
cStr := "C3swfg8MiMJ9bXbeFG6dWJTCoHp9hAEZkHezvbSwK1Cc"
containerID := cid.New()
require.NoError(t, containerID.Parse(cStr))
2020-10-16 09:51:43 +00:00
oStr := "3nQH1L8u3eM9jt2mZCs6MyjzdjerdSzBkXCYYj4M4Znk"
oid := object.NewID()
require.NoError(t, oid.Parse(oStr))
validPrefix := "neofs:" + cStr + "/" + oStr
2020-10-16 09:51:43 +00:00
objectAddr := object.NewAddress()
objectAddr.SetContainerID(containerID)
2020-10-16 09:51:43 +00:00
objectAddr.SetObjectID(oid)
testCases := []struct {
url string
params []string
err error
}{
{validPrefix, nil, nil},
{validPrefix + "/", []string{""}, nil},
{validPrefix + "/range/1|2", []string{"range", "1|2"}, nil},
{"neoffs:" + cStr + "/" + oStr, nil, ErrInvalidScheme},
{"neofs:" + cStr, nil, ErrMissingObject},
{"neofs:" + cStr + "ooo/" + oStr, nil, ErrInvalidContainer},
{"neofs:" + cStr + "/ooo" + oStr, nil, ErrInvalidObject},
2020-10-16 09:51:43 +00:00
}
for _, tc := range testCases {
t.Run(tc.url, func(t *testing.T) {
u, err := url.Parse(tc.url)
require.NoError(t, err)
oa, ps, err := parseNeoFSURL(u)
if tc.err != nil {
require.True(t, errors.Is(err, tc.err), "got: %#v", err)
return
}
require.NoError(t, err)
require.Equal(t, objectAddr, oa)
require.Equal(t, len(tc.params), len(ps))
if len(ps) != 0 {
require.Equal(t, tc.params, ps)
}
})
}
}
func Test_checkUTF8(t *testing.T) {
_, err := checkUTF8([]byte{0xFF})
require.Error(t, err)
a := []byte{1, 2, 3}
b, err := checkUTF8(a)
require.NoError(t, err)
require.Equal(t, a, b)
}