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 }