status-go/account/generator/path_decoder_test.go

87 lines
2.2 KiB
Go

package generator
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func TestDecodePath(t *testing.T) {
scenarios := []struct {
path string
expectedPath []uint32
expectedStartingPoint startingPoint
err error
}{
{
path: "",
expectedPath: []uint32{},
expectedStartingPoint: startingPointCurrent,
},
{
path: "1",
expectedPath: []uint32{1},
expectedStartingPoint: startingPointCurrent,
},
{
path: "..",
expectedPath: []uint32{},
expectedStartingPoint: startingPointParent,
},
{
path: "m",
expectedPath: []uint32{},
expectedStartingPoint: startingPointMaster,
},
{
path: "m/1",
expectedPath: []uint32{1},
expectedStartingPoint: startingPointMaster,
},
{
path: "m/1/2",
expectedPath: []uint32{1, 2},
expectedStartingPoint: startingPointMaster,
},
{
path: "m/1/2'/3",
expectedPath: []uint32{1, 2147483650, 3},
expectedStartingPoint: startingPointMaster,
},
{
path: "m/",
err: fmt.Errorf("error parsing derivation path m/; at position 2, expected number, got EOF"),
},
{
path: "m/1//2",
err: fmt.Errorf("error parsing derivation path m/1//2; at position 5, expected number, got /"),
},
{
path: "m/1'2",
err: fmt.Errorf("error parsing derivation path m/1'2; at position 5, expected /, got 2"),
},
{
path: "m/'/2",
err: fmt.Errorf("error parsing derivation path m/'/2; at position 3, expected number, got '"),
},
{
path: "m/2147483648",
err: fmt.Errorf("error parsing derivation path m/2147483648; at position 3, index must be lower than 2^31, got 2147483648"),
},
}
for i, s := range scenarios {
t.Run(fmt.Sprintf("scenario %d", i), func(t *testing.T) {
startingP, path, err := decodePath(s.path)
if s.err == nil {
assert.NoError(t, err)
assert.Equal(t, s.expectedStartingPoint, startingP)
assert.Equal(t, s.expectedPath, path)
} else {
assert.Equal(t, s.err, err)
}
})
}
}