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  }