github.com/Finschia/finschia-sdk@v0.48.1/baseapp/accountwgs_test.go (about)

     1  package baseapp
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  
     8  	"github.com/Finschia/finschia-sdk/crypto/keys/secp256k1"
     9  	"github.com/Finschia/finschia-sdk/testutil/testdata"
    10  	sdk "github.com/Finschia/finschia-sdk/types"
    11  )
    12  
    13  func TestConvertByteSliceToString(t *testing.T) {
    14  	b := []byte{65, 66, 67, 0, 65, 66, 67}
    15  	s := string(b)
    16  	require.Equal(t, len(b), len(s))
    17  	require.Equal(t, uint8(0), s[3])
    18  }
    19  
    20  func TestRegister(t *testing.T) {
    21  	app := setupBaseApp(t)
    22  
    23  	privs := newTestPrivKeys(3)
    24  	tx := newTestTx(privs)
    25  
    26  	waits, signals := app.checkAccountWGs.Register(tx)
    27  
    28  	require.Equal(t, 0, len(waits))
    29  	require.Equal(t, 3, len(signals))
    30  
    31  	for _, signal := range signals {
    32  		require.Equal(t, app.checkAccountWGs.wgs[signal.acc], signal.wg)
    33  	}
    34  }
    35  
    36  func TestDontPanicWithNil(t *testing.T) {
    37  	app := setupBaseApp(t)
    38  
    39  	require.NotPanics(t, func() { app.checkAccountWGs.Wait(nil) })
    40  	require.NotPanics(t, func() { app.checkAccountWGs.Done(nil) })
    41  }
    42  
    43  func TestGetUniqSigners(t *testing.T) {
    44  	privs := newTestPrivKeys(3)
    45  
    46  	addrs := getAddrs(privs)
    47  	addrs = append(addrs, addrs[1], addrs[0])
    48  	require.Equal(t, 5, len(addrs))
    49  
    50  	tx := newTestTx(privs)
    51  	signers := getUniqSigners(tx)
    52  
    53  	// length should be reduced because `duplicated` is removed
    54  	require.Less(t, len(signers), len(addrs))
    55  
    56  	// check uniqueness
    57  	for i, iv := range signers {
    58  		for j, jv := range signers {
    59  			if i != j {
    60  				require.True(t, iv != jv)
    61  			}
    62  		}
    63  	}
    64  }
    65  
    66  type AccountLockTestTx struct {
    67  	Msgs []sdk.Msg
    68  }
    69  
    70  var _ sdk.Tx = AccountLockTestTx{}
    71  
    72  func (tx AccountLockTestTx) GetMsgs() []sdk.Msg {
    73  	return tx.Msgs
    74  }
    75  
    76  func (tx AccountLockTestTx) ValidateBasic() error {
    77  	return nil
    78  }
    79  
    80  func newTestPrivKeys(num int) []*secp256k1.PrivKey {
    81  	privs := make([]*secp256k1.PrivKey, 0, num)
    82  	for i := 0; i < num; i++ {
    83  		privs = append(privs, secp256k1.GenPrivKey())
    84  	}
    85  	return privs
    86  }
    87  
    88  func getAddrs(privs []*secp256k1.PrivKey) []sdk.AccAddress {
    89  	addrs := make([]sdk.AccAddress, 0, len(privs))
    90  	for _, priv := range privs {
    91  		addrs = append(addrs, sdk.AccAddress(priv.PubKey().Address()))
    92  	}
    93  	return addrs
    94  }
    95  
    96  func newTestTx(privs []*secp256k1.PrivKey) sdk.Tx {
    97  	addrs := getAddrs(privs)
    98  	msgs := make([]sdk.Msg, len(addrs))
    99  	for i, addr := range addrs {
   100  		msgs[i] = testdata.NewTestMsg(addr)
   101  	}
   102  	return AccountLockTestTx{Msgs: msgs}
   103  }