Skip to content

Commit

Permalink
[test] refs fibercrypto#136 - Add test for LocalWallet::Transfer.
Browse files Browse the repository at this point in the history
  • Loading branch information
AntiD2ta committed Nov 8, 2019
1 parent 456d634 commit 7a82d9a
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/coin/skycoin/models/skyapi_mock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,9 @@ func mockSkyApiWalletCreateTransaction(mock *SkycoinApiMock, wreq *api.WalletCre
crtTxn,
nil)
}

func mockSkyApiCreateTransaction(mock *SkycoinApiMock, req *api.CreateTransactionRequest, crtTxn *api.CreateTransactionResponse) {
mock.On("CreateTransaction", *req).Return(
crtTxn,
nil)
}
82 changes: 82 additions & 0 deletions src/coin/skycoin/models/wallet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -918,3 +918,85 @@ func TestTransactionSignInputs(t *testing.T) {
require.Error(t, cipher.VerifyAddressSignedHash(a, signedTxn.txn.Sigs[1], cipher.AddSHA256(h, signedTxn.txn.In[0])))
require.Error(t, cipher.VerifyAddressSignedHash(a2, signedTxn.txn.Sigs[0], cipher.AddSHA256(h, signedTxn.txn.In[1])))
}

func makeLocalWallet(t *testing.T) core.Wallet {
_, kd, err := makeUxOutWithSecret(t)
require.NoError(t, err)
require.NoError(t, err)
wallets := makeLocalWalletsFromKeyData(t, []KeyData{*kd})
wallet := wallets[0]
seed, seckeys, err2 := cipher.GenerateDeterministicKeyPairsSeed([]byte(kd.Mnemonic), kd.AddressIndex+1)
require.NoError(t, err2)
require.Equal(t, kd.SecKey, seckeys[kd.AddressIndex])
_, _, err3 := cipher.GenerateDeterministicKeyPair(seed)
require.NoError(t, err3)
wallet.GenAddresses(core.AccountAddress, uint32(kd.AddressIndex), 2, nil)
return wallet
}

func TestLocalWalletTransfer(t *testing.T) {
CleanGlobalMock()
destinationAddress := testutil.MakeAddress()
sky := 500
wlt := makeLocalWallet(t)

addr := &SkycoinAddress{
address: destinationAddress.String(),
}

loadedAddrs, err := wlt.GetLoadedAddresses()
require.NoError(t, err)
addrs := make([]string, 0)
for loadedAddrs.Next() {
addrs = append(addrs, loadedAddrs.Value().String())
}

opt := NewTransferOptions()
opt.SetValue("BurnFactor", "0.5")
opt.SetValue("CoinHoursSelectionType", "auto")

req := api.CreateTransactionRequest{
IgnoreUnconfirmed: false,
HoursSelection: api.HoursSelection{
Type: "auto",
Mode: "share",
ShareFactor: "0.5",
},
To: []api.Receiver{
api.Receiver{
Address: destinationAddress.String(),
Coins: strconv.Itoa(sky),
},
},
Addresses: addrs,
}

hash := testutil.RandSHA256(t)
txn := coin.Transaction{
Length: 100,
Type: 0,
InnerHash: hash,
}
crtTxn, err := api.NewCreateTransactionResponse(&txn, nil)
require.NoError(t, err)
crtTxn.Transaction.Fee = "500"

mockSkyApiCreateTransaction(global_mock, &req, crtTxn)

quot, err := util.AltcoinQuotient(params.SkycoinTicker)
require.NoError(t, err)

destination := &SkycoinTransactionOutput{
skyOut: readable.TransactionOutput{
Address: addr.address,
Coins: util.FormatCoins(uint64(sky*1e6), quot),
}}

ret, err := wlt.Transfer(destination, opt)
require.NoError(t, err)
require.NotNil(t, ret)
val, err := ret.ComputeFee(CoinHour)
require.NoError(t, err)
require.Equal(t, uint64(sky), val)
require.Equal(t, crtTxn.Transaction.TxID, ret.GetId())
}

0 comments on commit 7a82d9a

Please sign in to comment.