github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/services/oracle/neofs/neofs_test.go (about)

     1  package neofs
     2  
     3  import (
     4  	"net/url"
     5  	"testing"
     6  
     7  	oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func TestParseRange(t *testing.T) {
    12  	t.Run("valid", func(t *testing.T) {
    13  		r, err := parseRange("13|87")
    14  		require.NoError(t, err)
    15  		require.Equal(t, uint64(13), r.GetOffset())
    16  		require.Equal(t, uint64(87), r.GetLength())
    17  	})
    18  	t.Run("missing offset", func(t *testing.T) {
    19  		_, err := parseRange("|87")
    20  		require.Error(t, err)
    21  	})
    22  	t.Run("missing length", func(t *testing.T) {
    23  		_, err := parseRange("13|")
    24  		require.Error(t, err)
    25  	})
    26  	t.Run("missing separator", func(t *testing.T) {
    27  		_, err := parseRange("1387")
    28  		require.Error(t, err)
    29  	})
    30  	t.Run("invalid number", func(t *testing.T) {
    31  		_, err := parseRange("ab|87")
    32  		require.Error(t, err)
    33  	})
    34  }
    35  
    36  func TestParseNeoFSURL(t *testing.T) {
    37  	cStr := "C3swfg8MiMJ9bXbeFG6dWJTCoHp9hAEZkHezvbSwK1Cc"
    38  	oStr := "3nQH1L8u3eM9jt2mZCs6MyjzdjerdSzBkXCYYj4M4Znk"
    39  	var objectAddr oid.Address
    40  	require.NoError(t, objectAddr.DecodeString(cStr+"/"+oStr))
    41  
    42  	validPrefix := "neofs:" + cStr + "/" + oStr
    43  
    44  	testCases := []struct {
    45  		url    string
    46  		params []string
    47  		err    error
    48  	}{
    49  		{validPrefix, nil, nil},
    50  		{validPrefix + "/", []string{""}, nil},
    51  		{validPrefix + "/range/1|2", []string{"range", "1|2"}, nil},
    52  		{"neoffs:" + cStr + "/" + oStr, nil, ErrInvalidScheme},
    53  		{"neofs:" + cStr, nil, ErrMissingObject},
    54  		{"neofs:" + cStr + "ooo/" + oStr, nil, ErrInvalidContainer},
    55  		{"neofs:" + cStr + "/ooo" + oStr, nil, ErrInvalidObject},
    56  	}
    57  	for _, tc := range testCases {
    58  		t.Run(tc.url, func(t *testing.T) {
    59  			u, err := url.Parse(tc.url)
    60  			require.NoError(t, err)
    61  			oa, ps, err := parseNeoFSURL(u)
    62  			if tc.err != nil {
    63  				require.ErrorIs(t, err, tc.err)
    64  				return
    65  			}
    66  			require.NoError(t, err)
    67  			require.Equal(t, objectAddr, *oa)
    68  			require.Equal(t, len(tc.params), len(ps))
    69  			if len(ps) != 0 {
    70  				require.Equal(t, tc.params, ps)
    71  			}
    72  		})
    73  	}
    74  }