github.com/lino-network/lino@v0.6.11/x/global/model/storage_test.go (about) 1 package model 2 3 import ( 4 "testing" 5 "time" 6 7 wire "github.com/cosmos/cosmos-sdk/codec" 8 sdk "github.com/cosmos/cosmos-sdk/types" 9 "github.com/stretchr/testify/suite" 10 11 "github.com/lino-network/lino/testsuites" 12 "github.com/lino-network/lino/testutils" 13 linotypes "github.com/lino-network/lino/types" 14 ) 15 16 type testEvent struct { 17 Name string `json:"name"` 18 } 19 20 func regTestCodec(c *wire.Codec) { 21 c.RegisterInterface((*linotypes.Event)(nil), nil) 22 c.RegisterConcrete(testEvent{}, "lino/testevent", nil) 23 } 24 25 func testCodec() *wire.Codec { 26 c := wire.New() 27 regTestCodec(c) 28 return c 29 } 30 31 var ( 32 storeKeyStr = "testGlobalStore" 33 kvStoreKey = sdk.NewKVStoreKey(storeKeyStr) 34 ) 35 36 type storeDumper struct{} 37 38 func (dumper storeDumper) NewDumper() *testutils.Dumper { 39 return NewDumper(NewGlobalStorage(kvStoreKey, testCodec()), regTestCodec) 40 } 41 42 type globalStoreTestSuite struct { 43 testsuites.GoldenTestSuite 44 store GlobalStorage 45 } 46 47 func NewGlobalStoreTestSuite() *globalStoreTestSuite { 48 return &globalStoreTestSuite{ 49 GoldenTestSuite: testsuites.NewGoldenTestSuite(storeDumper{}, kvStoreKey), 50 } 51 } 52 53 func (suite *globalStoreTestSuite) SetupTest() { 54 suite.SetupCtx(0, time.Unix(0, 0), kvStoreKey) 55 suite.store = NewGlobalStorage(kvStoreKey, testCodec()) 56 } 57 58 func TestGlobalStoreSuite(t *testing.T) { 59 suite.Run(t, NewGlobalStoreTestSuite()) 60 } 61 62 func (suite *globalStoreTestSuite) TestGetSetDelTimeEventList() { 63 // empty not nil 64 lst := suite.store.GetTimeEventList(suite.Ctx, 100) 65 suite.NotNil(lst) 66 suite.Equal(0, len(lst.Events)) 67 68 events1 := &linotypes.TimeEventList{ 69 Events: []linotypes.Event{ 70 testEvent{ 71 Name: "event1", 72 }, 73 testEvent{ 74 Name: "event2", 75 }, 76 testEvent{ 77 Name: "event3", 78 }, 79 }, 80 } 81 events2 := &linotypes.TimeEventList{ 82 Events: []linotypes.Event{ 83 testEvent{ 84 Name: "event4", 85 }, 86 }, 87 } 88 events3 := &linotypes.TimeEventList{ 89 Events: []linotypes.Event{ 90 testEvent{ 91 Name: "event6", 92 }, 93 }, 94 } 95 96 suite.store.SetTimeEventList(suite.Ctx, 123, events1) 97 suite.store.SetTimeEventList(suite.Ctx, 456, events2) 98 suite.store.SetTimeEventList(suite.Ctx, 789, events3) 99 100 suite.Equal(events1, suite.store.GetTimeEventList(suite.Ctx, 123)) 101 suite.Equal(events2, suite.store.GetTimeEventList(suite.Ctx, 456)) 102 suite.Equal(events3, suite.store.GetTimeEventList(suite.Ctx, 789)) 103 104 suite.store.RemoveTimeEventList(suite.Ctx, 789) 105 suite.Equal(0, len(suite.store.GetTimeEventList(suite.Ctx, 789).Events)) 106 107 suite.Golden() 108 } 109 110 func (suite *globalStoreTestSuite) TestGetSetGlobalTime() { 111 suite.Panics(func() { 112 suite.store.GetGlobalTime(suite.Ctx) 113 }) 114 115 globalTime := &GlobalTime{ 116 ChainStartTime: 123, 117 LastBlockTime: 234, 118 PastMinutes: 345, 119 } 120 121 suite.store.SetGlobalTime(suite.Ctx, globalTime) 122 suite.Equal(globalTime, suite.store.GetGlobalTime(suite.Ctx)) 123 124 globalTime.PastMinutes = 999 125 suite.store.SetGlobalTime(suite.Ctx, globalTime) 126 suite.Equal(globalTime, suite.store.GetGlobalTime(suite.Ctx)) 127 128 suite.Golden() 129 } 130 131 func (suite *globalStoreTestSuite) TestGetSetEventErrors() { 132 suite.Nil(suite.store.GetEventErrors(suite.Ctx)) 133 134 errs := []EventError{ 135 { 136 Time: 123, 137 Event: testEvent{Name: "lol"}, 138 ErrCode: sdk.CodeType(123), 139 }, 140 } 141 142 suite.store.SetEventErrors(suite.Ctx, errs) 143 suite.Equal(errs, suite.store.GetEventErrors(suite.Ctx)) 144 145 errs = append(errs, EventError{ 146 Time: 456, 147 Event: testEvent{Name: "dota"}, 148 ErrCode: sdk.CodeType(999), 149 }) 150 suite.store.SetEventErrors(suite.Ctx, errs) 151 suite.Equal(errs, suite.store.GetEventErrors(suite.Ctx)) 152 153 suite.Golden() 154 } 155 156 func (suite *globalStoreTestSuite) TestGetSetBCErrors() { 157 suite.Nil(suite.store.GetBCErrors(suite.Ctx)) 158 159 errs := []linotypes.BCEventErr{ 160 { 161 Time: 123, 162 ErrCode: sdk.CodeType(123), 163 ErrCodeSpace: sdk.CodespaceType(789), 164 Reason: "inflation failed", 165 }, 166 } 167 168 suite.store.SetBCErrors(suite.Ctx, errs) 169 suite.Equal(errs, suite.store.GetBCErrors(suite.Ctx)) 170 171 errs = append(errs, linotypes.BCEventErr{ 172 Time: 456, 173 ErrCode: sdk.CodeType(34), 174 ErrCodeSpace: sdk.CodespaceType(1585), 175 Reason: "validator failed", 176 }) 177 suite.store.SetBCErrors(suite.Ctx, errs) 178 suite.Equal(errs, suite.store.GetBCErrors(suite.Ctx)) 179 180 suite.Golden() 181 }