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  }