github.com/okex/exchain@v1.8.0/libs/tendermint/delta/redis-cgi/cgi_test.go (about) 1 package redis_cgi 2 3 import ( 4 "github.com/alicebob/miniredis/v2" 5 "github.com/okex/exchain/libs/tendermint/libs/log" 6 "github.com/stretchr/testify/require" 7 "testing" 8 "time" 9 ) 10 11 const ( 12 ConstDeltaBytes = "delta-bytes" 13 ConstTestHeight = 1 14 ) 15 16 func getRedisClient(t *testing.T) (*RedisClient, *miniredis.Miniredis) { 17 s := miniredis.RunT(t) 18 logger := log.TestingLogger() 19 ss := NewRedisClient(s.Addr(), "", time.Minute, 0, logger) 20 return ss, s 21 } 22 23 func TestRedisClient_SetGetDeltas(t *testing.T) { 24 r, _ := getRedisClient(t) 25 require.True(t, r != nil, r) 26 27 height := int64(ConstTestHeight) 28 // delta is empty 29 re, err, _ := r.GetDeltas(height) 30 require.True(t, re == nil, re) 31 require.True(t, err != nil, err) 32 33 // set delta 34 bytes := []byte(ConstDeltaBytes) 35 err = r.SetDeltas(height, bytes) 36 require.Nil(t, err) 37 38 // get delta 39 re, err, _ = r.GetDeltas(height) 40 require.True(t, re != nil, re) 41 require.True(t, err == nil, err) 42 43 // get wrong key 44 fakeKey := height + 1 45 noResult, err, _ := r.GetDeltas(fakeKey) 46 require.True(t, noResult == nil, noResult) 47 require.True(t, err != nil, err) 48 } 49 50 func TestRedisClient_ResetLatestHeightAfterUpload(t *testing.T) { 51 r, _ := getRedisClient(t) 52 require.True(t, r != nil, r) 53 uploadSuccess := func(int64) bool { return true } 54 uploadFailed := func(int64) bool { return false } 55 h := int64(ConstTestHeight) 56 type args struct { 57 height int64 58 upload func(int64) bool 59 } 60 tests := []struct { 61 name string 62 args args 63 want bool 64 }{ 65 {"upload failed", args{h, uploadFailed}, false}, 66 {"first time set", args{h, uploadSuccess}, true}, 67 {"height<latestHeight", args{h - 1, uploadSuccess}, false}, 68 {"height==latestHeight", args{h, uploadSuccess}, false}, 69 {"height>latestHeight", args{h + 1, uploadSuccess}, true}, 70 } 71 for _, tt := range tests { 72 t.Run(tt.name, func(t *testing.T) { 73 got, _, _ := r.ResetMostRecentHeightAfterUpload(tt.args.height, tt.args.upload) 74 if got != tt.want { 75 t.Errorf("ResetLatestHeightAfterUpload() = %v, want %v", got, tt.want) 76 } 77 }) 78 } 79 } 80 81 func TestRedisClient_GetReleaseLocker(t *testing.T) { 82 r, s := getRedisClient(t) 83 require.True(t, r != nil, r) 84 85 // first time lock 86 locker := r.GetLocker() 87 require.True(t, locker, locker) 88 89 // already locked 90 locker = r.GetLocker() 91 require.True(t, !locker, locker) 92 93 // release locker 94 r.ReleaseLocker() 95 locker = r.GetLocker() 96 require.True(t, locker, locker) 97 98 // when locker expire time, locker release itself 99 s.FastForward(lockerExpire) 100 locker = r.GetLocker() 101 require.True(t, locker, locker) 102 }