github.com/status-im/status-go@v1.1.0/protocol/messenger_wallet_test.go (about)

     1  package protocol
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/status-im/status-go/constants"
     7  	"github.com/status-im/status-go/eth-node/types"
     8  	"github.com/status-im/status-go/multiaccounts/accounts"
     9  
    10  	"github.com/stretchr/testify/suite"
    11  )
    12  
    13  func TestWalletSuite(t *testing.T) {
    14  	suite.Run(t, new(WalletSuite))
    15  }
    16  
    17  type WalletSuite struct {
    18  	MessengerBaseTestSuite
    19  }
    20  
    21  func (s *WalletSuite) TestRemainingCapacity() {
    22  	profileKeypair := accounts.GetProfileKeypairForTest(true, true, true)
    23  	seedImportedKeypair := accounts.GetSeedImportedKeypair1ForTest()
    24  	woAccounts := accounts.GetWatchOnlyAccountsForTest()
    25  
    26  	// Empty DB
    27  	capacity, err := s.m.RemainingAccountCapacity()
    28  	s.Require().NoError(err)
    29  	s.Require().Equal(constants.MaxNumberOfAccounts, capacity)
    30  
    31  	capacity, err = s.m.RemainingKeypairCapacity()
    32  	s.Require().NoError(err)
    33  	s.Require().Equal(constants.MaxNumberOfKeypairs, capacity)
    34  
    35  	capacity, err = s.m.RemainingWatchOnlyAccountCapacity()
    36  	s.Require().NoError(err)
    37  	s.Require().Equal(constants.MaxNumberOfWatchOnlyAccounts, capacity)
    38  
    39  	// profile keypair with chat account, default wallet account and 2 more derived accounts added
    40  	err = s.m.SaveOrUpdateKeypair(profileKeypair)
    41  	s.Require().NoError(err)
    42  
    43  	capacity, err = s.m.RemainingAccountCapacity()
    44  	s.Require().NoError(err)
    45  	s.Require().Equal(constants.MaxNumberOfAccounts-3, capacity)
    46  
    47  	capacity, err = s.m.RemainingKeypairCapacity()
    48  	s.Require().NoError(err)
    49  	s.Require().Equal(constants.MaxNumberOfKeypairs-1, capacity)
    50  
    51  	capacity, err = s.m.RemainingWatchOnlyAccountCapacity()
    52  	s.Require().NoError(err)
    53  	s.Require().Equal(constants.MaxNumberOfWatchOnlyAccounts, capacity)
    54  
    55  	// seed keypair with 2 derived accounts added
    56  	err = s.m.SaveOrUpdateKeypair(seedImportedKeypair)
    57  	s.Require().NoError(err)
    58  
    59  	capacity, err = s.m.RemainingAccountCapacity()
    60  	s.Require().NoError(err)
    61  	s.Require().Equal(constants.MaxNumberOfAccounts-(3+2), capacity)
    62  
    63  	capacity, err = s.m.RemainingKeypairCapacity()
    64  	s.Require().NoError(err)
    65  	s.Require().Equal(constants.MaxNumberOfKeypairs-(1+1), capacity)
    66  
    67  	capacity, err = s.m.RemainingWatchOnlyAccountCapacity()
    68  	s.Require().NoError(err)
    69  	s.Require().Equal(constants.MaxNumberOfWatchOnlyAccounts, capacity)
    70  
    71  	// 1 Watch only accounts added
    72  	err = s.m.SaveOrUpdateAccount(woAccounts[0])
    73  	s.Require().NoError(err)
    74  
    75  	capacity, err = s.m.RemainingAccountCapacity()
    76  	s.Require().NoError(err)
    77  	s.Require().Equal(constants.MaxNumberOfAccounts-(3+2+1), capacity)
    78  
    79  	capacity, err = s.m.RemainingKeypairCapacity()
    80  	s.Require().NoError(err)
    81  	s.Require().Equal(constants.MaxNumberOfKeypairs-(1+1), capacity)
    82  
    83  	capacity, err = s.m.RemainingWatchOnlyAccountCapacity()
    84  	s.Require().NoError(err)
    85  	s.Require().Equal(constants.MaxNumberOfWatchOnlyAccounts-1, capacity)
    86  
    87  	// try to add 3 more keypairs
    88  	seedImportedKeypair2 := accounts.GetSeedImportedKeypair2ForTest()
    89  	seedImportedKeypair2.KeyUID = "0000000000000000000000000000000000000000000000000000000000000091"
    90  	seedImportedKeypair2.Accounts[0].Address = types.Address{0x91}
    91  	seedImportedKeypair2.Accounts[0].KeyUID = seedImportedKeypair2.KeyUID
    92  	seedImportedKeypair2.Accounts[1].Address = types.Address{0x92}
    93  	seedImportedKeypair2.Accounts[1].KeyUID = seedImportedKeypair2.KeyUID
    94  
    95  	err = s.m.SaveOrUpdateKeypair(seedImportedKeypair2)
    96  	s.Require().NoError(err)
    97  
    98  	seedImportedKeypair3 := accounts.GetSeedImportedKeypair2ForTest()
    99  	seedImportedKeypair3.KeyUID = "0000000000000000000000000000000000000000000000000000000000000093"
   100  	seedImportedKeypair3.Accounts[0].Address = types.Address{0x93}
   101  	seedImportedKeypair3.Accounts[0].KeyUID = seedImportedKeypair3.KeyUID
   102  	seedImportedKeypair3.Accounts[1].Address = types.Address{0x94}
   103  	seedImportedKeypair3.Accounts[1].KeyUID = seedImportedKeypair3.KeyUID
   104  
   105  	err = s.m.SaveOrUpdateKeypair(seedImportedKeypair3)
   106  	s.Require().NoError(err)
   107  
   108  	seedImportedKeypair4 := accounts.GetSeedImportedKeypair2ForTest()
   109  	seedImportedKeypair4.KeyUID = "0000000000000000000000000000000000000000000000000000000000000095"
   110  	seedImportedKeypair4.Accounts[0].Address = types.Address{0x95}
   111  	seedImportedKeypair4.Accounts[0].KeyUID = seedImportedKeypair4.KeyUID
   112  	seedImportedKeypair4.Accounts[1].Address = types.Address{0x96}
   113  	seedImportedKeypair4.Accounts[1].KeyUID = seedImportedKeypair4.KeyUID
   114  
   115  	err = s.m.SaveOrUpdateKeypair(seedImportedKeypair4)
   116  	s.Require().NoError(err)
   117  
   118  	// check the capacity after adding 3 more keypairs
   119  	capacity, err = s.m.RemainingAccountCapacity()
   120  	s.Require().NoError(err)
   121  	s.Require().Equal(constants.MaxNumberOfAccounts-(3+2+1+3*2), capacity)
   122  
   123  	capacity, err = s.m.RemainingKeypairCapacity()
   124  	s.Require().Error(err)
   125  	s.Require().Equal("no more keypairs can be added", err.Error())
   126  	s.Require().Equal(0, capacity)
   127  
   128  	capacity, err = s.m.RemainingWatchOnlyAccountCapacity()
   129  	s.Require().NoError(err)
   130  	s.Require().Equal(constants.MaxNumberOfWatchOnlyAccounts-1, capacity)
   131  
   132  	// add 2 more watch only accounts
   133  	err = s.m.SaveOrUpdateAccount(woAccounts[1])
   134  	s.Require().NoError(err)
   135  	err = s.m.SaveOrUpdateAccount(woAccounts[2])
   136  	s.Require().NoError(err)
   137  
   138  	// check the capacity after adding 8 more watch only accounts
   139  	capacity, err = s.m.RemainingAccountCapacity()
   140  	s.Require().NoError(err)
   141  	s.Require().Equal(constants.MaxNumberOfAccounts-(3+2+3+3*2), capacity)
   142  
   143  	capacity, err = s.m.RemainingKeypairCapacity()
   144  	s.Require().Error(err)
   145  	s.Require().Equal("no more keypairs can be added", err.Error())
   146  	s.Require().Equal(0, capacity)
   147  
   148  	capacity, err = s.m.RemainingWatchOnlyAccountCapacity()
   149  	s.Require().Error(err)
   150  	s.Require().Equal("no more watch-only accounts can be added", err.Error())
   151  	s.Require().Equal(0, capacity)
   152  
   153  	// add 6 accounts more
   154  	seedImportedKeypair4.Accounts[0].Address = types.Address{0x81}
   155  	err = s.m.SaveOrUpdateAccount(seedImportedKeypair4.Accounts[0])
   156  	s.Require().NoError(err)
   157  
   158  	seedImportedKeypair4.Accounts[0].Address = types.Address{0x82}
   159  	err = s.m.SaveOrUpdateAccount(seedImportedKeypair4.Accounts[0])
   160  	s.Require().NoError(err)
   161  
   162  	seedImportedKeypair4.Accounts[0].Address = types.Address{0x83}
   163  	err = s.m.SaveOrUpdateAccount(seedImportedKeypair4.Accounts[0])
   164  	s.Require().NoError(err)
   165  
   166  	seedImportedKeypair4.Accounts[0].Address = types.Address{0x84}
   167  	err = s.m.SaveOrUpdateAccount(seedImportedKeypair4.Accounts[0])
   168  	s.Require().NoError(err)
   169  
   170  	seedImportedKeypair4.Accounts[0].Address = types.Address{0x85}
   171  	err = s.m.SaveOrUpdateAccount(seedImportedKeypair4.Accounts[0])
   172  	s.Require().NoError(err)
   173  
   174  	seedImportedKeypair4.Accounts[0].Address = types.Address{0x86}
   175  	err = s.m.SaveOrUpdateAccount(seedImportedKeypair4.Accounts[0])
   176  	s.Require().NoError(err)
   177  
   178  	// check the capacity after adding 8 more watch only accounts
   179  	capacity, err = s.m.RemainingAccountCapacity()
   180  	s.Require().Error(err)
   181  	s.Require().Equal("no more accounts can be added", err.Error())
   182  	s.Require().Equal(0, capacity)
   183  
   184  	capacity, err = s.m.RemainingKeypairCapacity()
   185  	s.Require().Error(err)
   186  	s.Require().Equal("no more keypairs can be added", err.Error())
   187  	s.Require().Equal(0, capacity)
   188  
   189  	capacity, err = s.m.RemainingWatchOnlyAccountCapacity()
   190  	s.Require().Error(err)
   191  	s.Require().Equal("no more watch-only accounts can be added", err.Error())
   192  	s.Require().Equal(0, capacity)
   193  }