github.com/cosmos/cosmos-sdk@v0.50.10/types/simulation/collections_test.go (about) 1 package simulation 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 "cosmossdk.io/collections" 9 "cosmossdk.io/collections/colltest" 10 11 "github.com/cosmos/cosmos-sdk/types/kv" 12 ) 13 14 func TestNewStoreDecoderFuncFromCollectionsSchema(t *testing.T) { 15 store, _ := colltest.MockStore() 16 sb := collections.NewSchemaBuilder(store) 17 18 prefixM1 := collections.NewPrefix("map_1") 19 prefixM2 := collections.NewPrefix("map_2") 20 21 m1 := collections.NewMap(sb, prefixM1, "map_1", collections.StringKey, collections.StringValue) 22 m2 := collections.NewMap(sb, prefixM2, "map_2", collections.Int32Key, collections.Int32Value) 23 24 schema, err := sb.Build() 25 require.NoError(t, err) 26 27 // create a new store decoder function from the schema 28 dec := NewStoreDecoderFuncFromCollectionsSchema(schema) 29 30 key1M1, err := collections.EncodeKeyWithPrefix(prefixM1, m1.KeyCodec(), "key_1") 31 require.NoError(t, err) 32 key2M1, err := collections.EncodeKeyWithPrefix(prefixM1, m1.KeyCodec(), "key_2") 33 require.NoError(t, err) 34 key1M2, err := collections.EncodeKeyWithPrefix(prefixM2, m2.KeyCodec(), int32(1)) 35 require.NoError(t, err) 36 key2M2, err := collections.EncodeKeyWithPrefix(prefixM2, m2.KeyCodec(), int32(2)) 37 require.NoError(t, err) 38 39 storeDec1 := dec(kv.Pair{ 40 Key: key1M1, 41 Value: []byte("value_1"), 42 }, kv.Pair{ 43 Key: key2M1, 44 Value: []byte("value_2"), 45 }) 46 require.Equal(t, "value_1\nvalue_2", storeDec1) 47 48 storeDec2 := dec(kv.Pair{ 49 Key: key1M2, 50 Value: []byte{0, 0, 0, 1}, 51 }, kv.Pair{ 52 Key: key2M2, 53 Value: []byte{0, 0, 0, 2}, 54 }) 55 56 require.Equal(t, "-2147483647\n-2147483646", storeDec2) 57 58 // test key conflict 59 60 require.Panics(t, func() { 61 dec( 62 kv.Pair{Key: append(prefixM1.Bytes(), 0x1)}, 63 kv.Pair{Key: append(prefixM2.Bytes(), 0x1)}, 64 ) 65 }, "must panic when keys do not have the same prefix") 66 67 require.Panics(t, func() { 68 dec( 69 kv.Pair{Key: []byte("unknown_1")}, 70 kv.Pair{Key: []byte("unknown_2")}, 71 ) 72 }, "must panic on unknown prefixes") 73 }