github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/smartcontract/manifest/container_test.go (about) 1 package manifest 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/nspcc-dev/neo-go/internal/random" 8 "github.com/nspcc-dev/neo-go/internal/testserdes" 9 "github.com/nspcc-dev/neo-go/pkg/crypto/keys" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestContainer_Restrict(t *testing.T) { 14 t.Run("string", func(t *testing.T) { 15 c := new(WildStrings) 16 require.True(t, c.IsWildcard()) 17 require.True(t, c.Contains("abc")) 18 c.Restrict() 19 require.False(t, c.IsWildcard()) 20 require.False(t, c.Contains("abc")) 21 require.Equal(t, 0, len(c.Value)) 22 }) 23 24 t.Run("PermissionDesc", func(t *testing.T) { 25 check := func(t *testing.T, u PermissionDesc) { 26 c := new(WildPermissionDescs) 27 require.True(t, c.IsWildcard()) 28 require.True(t, c.Contains(u)) 29 c.Restrict() 30 require.False(t, c.IsWildcard()) 31 require.False(t, c.Contains(u)) 32 require.Equal(t, 0, len(c.Value)) 33 } 34 t.Run("Hash", func(t *testing.T) { 35 check(t, PermissionDesc{ 36 Type: PermissionHash, 37 Value: random.Uint160(), 38 }) 39 }) 40 t.Run("Group", func(t *testing.T) { 41 pk, err := keys.NewPrivateKey() 42 require.NoError(t, err) 43 check(t, PermissionDesc{ 44 Type: PermissionGroup, 45 Value: pk.PublicKey(), 46 }) 47 }) 48 }) 49 } 50 51 func TestContainer_Add(t *testing.T) { 52 t.Run("string", func(t *testing.T) { 53 c := new(WildStrings) 54 require.Equal(t, []string(nil), c.Value) 55 56 c.Add("abc") 57 require.True(t, c.Contains("abc")) 58 require.False(t, c.Contains("aaa")) 59 }) 60 61 t.Run("uint160", func(t *testing.T) { 62 c := new(WildPermissionDescs) 63 require.Equal(t, []PermissionDesc(nil), c.Value) 64 pk, err := keys.NewPrivateKey() 65 require.NoError(t, err) 66 exp := []PermissionDesc{ 67 {Type: PermissionHash, Value: random.Uint160()}, 68 {Type: PermissionGroup, Value: pk.PublicKey()}, 69 } 70 for i := range exp { 71 c.Add(exp[i]) 72 } 73 for i := range exp { 74 require.True(t, c.Contains(exp[i])) 75 } 76 pkRand, err := keys.NewPrivateKey() 77 require.NoError(t, err) 78 require.False(t, c.Contains(PermissionDesc{Type: PermissionHash, Value: random.Uint160()})) 79 require.False(t, c.Contains(PermissionDesc{Type: PermissionGroup, Value: pkRand.PublicKey()})) 80 }) 81 } 82 83 func TestContainer_MarshalJSON(t *testing.T) { 84 t.Run("string", func(t *testing.T) { 85 t.Run("wildcard", func(t *testing.T) { 86 expected := new(WildStrings) 87 testserdes.MarshalUnmarshalJSON(t, expected, new(WildStrings)) 88 }) 89 90 t.Run("empty", func(t *testing.T) { 91 expected := new(WildStrings) 92 expected.Restrict() 93 testserdes.MarshalUnmarshalJSON(t, expected, new(WildStrings)) 94 }) 95 96 t.Run("non-empty", func(t *testing.T) { 97 expected := new(WildStrings) 98 expected.Add("string1") 99 expected.Add("string2") 100 testserdes.MarshalUnmarshalJSON(t, expected, new(WildStrings)) 101 }) 102 103 t.Run("invalid", func(t *testing.T) { 104 js := []byte(`[123]`) 105 c := new(WildStrings) 106 require.Error(t, json.Unmarshal(js, c)) 107 }) 108 }) 109 110 t.Run("PermissionDesc", func(t *testing.T) { 111 t.Run("wildcard", func(t *testing.T) { 112 expected := new(WildPermissionDescs) 113 testserdes.MarshalUnmarshalJSON(t, expected, new(WildPermissionDescs)) 114 }) 115 116 t.Run("empty", func(t *testing.T) { 117 expected := new(WildPermissionDescs) 118 expected.Restrict() 119 testserdes.MarshalUnmarshalJSON(t, expected, new(WildPermissionDescs)) 120 }) 121 122 t.Run("non-empty", func(t *testing.T) { 123 expected := new(WildPermissionDescs) 124 expected.Add(PermissionDesc{ 125 Type: PermissionHash, 126 Value: random.Uint160(), 127 }) 128 testserdes.MarshalUnmarshalJSON(t, expected, new(WildPermissionDescs)) 129 }) 130 131 t.Run("invalid", func(t *testing.T) { 132 js := []byte(`["notahex"]`) 133 c := new(WildPermissionDescs) 134 require.Error(t, json.Unmarshal(js, c)) 135 }) 136 }) 137 }