package merkle import ( // it is ok to use math/rand here: we do not need a cryptographically secure random // number generator here and we can run the tests a bit faster "math/rand" "testing" "github.com/stretchr/testify/require" ) func TestKeyPath(t *testing.T) { var path KeyPath keys := make([][]byte, 10) alphanum := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" for d := 0; d < 1e4; d++ { path = nil for i := range keys { enc := keyEncoding(rand.Intn(int(KeyEncodingMax))) keys[i] = make([]byte, rand.Uint32()%20) switch enc { case KeyEncodingURL: for j := range keys[i] { keys[i][j] = alphanum[rand.Intn(len(alphanum))] } case KeyEncodingHex: rand.Read(keys[i]) default: panic("Unexpected encoding") } path = path.AppendKey(keys[i], enc) } res, err := KeyPathToKeys(path.String()) require.Nil(t, err) require.Equal(t, len(keys), len(res)) for i, key := range keys { require.Equal(t, key, res[i]) } } }