Transaction queue: send transaction fully tested

This commit is contained in:
Victor Farazdagi 2016-08-07 23:09:13 +03:00
parent 231cd55c47
commit 4635ced174
5 changed files with 80 additions and 15 deletions

View File

@ -0,0 +1,3 @@
[
"enode://1bd9b8a8063810e91cd1ebcf2995ac867542d5c90dc74a6f2ada7ecd399da356d18abf3af4c84788808abde8891a75bcde4ace5a741a2ba9efe9b59dd09d5b33@46.101.97.80:30303"
]

1
src/data/test-account.pk Normal file
View File

@ -0,0 +1 @@
{"address":"89b50b2b26947ccad43accaef76c21d175ad85f4","crypto":{"cipher":"aes-128-ctr","ciphertext":"cc8f600a59f8c5ac3d6ab849722a6602f61de0adc5c9617a1cd014d3d9638a95","cipherparams":{"iv":"836bb6b5df64c29a84f95e7628510e71"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"4cc1f86eaa707ee37dc3b686712f09be49b7175a2046c63cfd1d7a3e7ebee8ab"},"mac":"164f2e53c67b5c85267b79e4fc8b2f9117a66b5e0546933403d85d52fffa1f52"},"id":"3ade037d-722b-467a-ad8e-2bcae28b9642","version":3,"whisperenabled":true}

View File

@ -15,6 +15,13 @@ import (
"github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/whisper" "github.com/ethereum/go-ethereum/whisper"
"math/big" "math/big"
"path/filepath"
)
const (
testDataDir = ".ethereumtest"
testAddress = "0x89b50b2b26947ccad43accaef76c21d175ad85f4"
testAddressPassword = "asdf"
) )
// TestAccountBindings makes sure we can create an account and subsequently // TestAccountBindings makes sure we can create an account and subsequently
@ -22,9 +29,14 @@ import (
func TestAccountBindings(t *testing.T) { func TestAccountBindings(t *testing.T) {
rpcport = 8546 // in order to avoid conflicts with running react-native app rpcport = 8546 // in order to avoid conflicts with running react-native app
dataDir, err := preprocessDataDir(testDataDir)
if err != nil {
glog.V(logger.Warn).Infoln("make node failed:", err)
}
// start geth node and wait for it to initialize // start geth node and wait for it to initialize
go createAndStartNode(".ethereumtest") go createAndStartNode(dataDir)
time.Sleep(5 * time.Second) time.Sleep(120 * time.Second) // LES syncs headers, so that we are up do date when it is done
if currentNode == nil { if currentNode == nil {
t.Error("Test failed: could not start geth node") t.Error("Test failed: could not start geth node")
} }
@ -68,15 +80,16 @@ func TestAccountBindings(t *testing.T) {
t.Errorf("Test failed: Could not post to whisper: %v", err) t.Errorf("Test failed: Could not post to whisper: %v", err)
} }
// create another account // import test account (with test ether on it)
address1, _, err := createAccount("badpassword") err = copyFile(filepath.Join(testDataDir, "testnet", "keystore", "test-account.pk"), filepath.Join("data", "test-account.pk"))
if err != nil { if err != nil {
fmt.Println(err.Error()) t.Errorf("Test failed: cannot copy test account PK: %v", err)
t.Error("Test failed: could not create account") return
} }
time.Sleep(2 * time.Second)
// unlock the created account // unlock test account (to send ether from it)
err = unlockAccount(address1, "badpassword", 3) err = unlockAccount(testAddress, testAddressPassword, 300)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
t.Error("Test failed: could not unlock account") t.Error("Test failed: could not unlock account")
@ -93,7 +106,7 @@ func TestAccountBindings(t *testing.T) {
// replace transaction notification hanlder // replace transaction notification hanlder
sentinel := 0 sentinel := 0
backend.SetTransactionQueueHandler(func(queuedTx les.QueuedTx) { backend.SetTransactionQueueHandler(func(queuedTx les.QueuedTx) {
glog.V(logger.Info).Infof("[STATUS-GO] Tx queue value: %v\n", queuedTx.Hash.Hex()) glog.V(logger.Info).Infof("Queued transaction hash: %v\n", queuedTx.Hash.Hex())
if err := completeTransaction(queuedTx.Hash.Hex()); err != nil { if err := completeTransaction(queuedTx.Hash.Hex()); err != nil {
t.Errorf("Test failed: cannot complete queued transation[%s]: %v", queuedTx.Hash.Hex(), err) t.Errorf("Test failed: cannot complete queued transation[%s]: %v", queuedTx.Hash.Hex(), err)
} }
@ -106,7 +119,7 @@ func TestAccountBindings(t *testing.T) {
} }
// send normal transaction // send normal transaction
from, err := utils.MakeAddress(accountManager, address1) from, err := utils.MakeAddress(accountManager, testAddress)
if err != nil { if err != nil {
t.Errorf("Test failed: Could not retrieve account from address: %v", err) t.Errorf("Test failed: Could not retrieve account from address: %v", err)
} }
@ -125,7 +138,7 @@ func TestAccountBindings(t *testing.T) {
t.Errorf("Test failed: cannot send transaction: %v", err) t.Errorf("Test failed: cannot send transaction: %v", err)
} }
time.Sleep(5 * time.Second) time.Sleep(10 * time.Second)
if sentinel != 1 { if sentinel != 1 {
t.Error("Test failed: transaction was never queued or completed") t.Error("Test failed: transaction was never queued or completed")
} }

View File

@ -1,10 +1,9 @@
package main package main
import ( import (
"errors"
"flag" "flag"
"fmt" "fmt"
"runtime"
"github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
@ -18,6 +17,11 @@ import (
"github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/whisper" "github.com/ethereum/go-ethereum/whisper"
"gopkg.in/urfave/cli.v1" "gopkg.in/urfave/cli.v1"
"io"
"os"
"path"
"path/filepath"
"runtime"
) )
const ( const (
@ -44,6 +48,10 @@ var (
client rpc.Client client rpc.Client
) )
var (
ErrDataDirPreprocessingFailed = errors.New("Failed to pre-process data directory")
)
func main() { func main() {
// Placeholder for anything we want to run by default // Placeholder for anything we want to run by default
@ -54,7 +62,7 @@ func main() {
// MakeNode create a geth node entity // MakeNode create a geth node entity
func MakeNode(inputDir string) *node.Node { func MakeNode(inputDir string) *node.Node {
datadir = inputDir datadir := inputDir
// TODO remove admin rpcapi flag // TODO remove admin rpcapi flag
set := flag.NewFlagSet("test", 0) set := flag.NewFlagSet("test", 0)
@ -127,3 +135,43 @@ func makeDefaultExtra() []byte {
} }
return extra return extra
} }
func preprocessDataDir(dataDir string) (string, error) {
testDataDir := path.Join(dataDir, "testnet")
if _, err := os.Stat(testDataDir); os.IsNotExist(err) {
if err := os.MkdirAll(testDataDir, 0755); err != nil {
return dataDir, ErrDataDirPreprocessingFailed
}
}
// copy over static peer nodes list (LES auto-discovery is not stable yet)
dst := filepath.Join(testDataDir, "static-nodes.json")
if _, err := os.Stat(dst); os.IsNotExist(err) {
src := filepath.Join("data", "static-nodes.json")
if err := copyFile(dst, src); err != nil {
return dataDir, err
}
}
return dataDir, nil
}
func copyFile(dst, src string) error {
s, err := os.Open(src)
if err != nil {
return err
}
defer s.Close()
d, err := os.Create(dst)
if err != nil {
return err
}
defer d.Close()
if _, err := io.Copy(d, s); err != nil {
return err
}
return nil
}

View File

@ -108,7 +108,7 @@ func (b *StatusBackend) CompleteQueuedTransaction(hash QueuedTxHash) error {
return err return err
} }
_, err = b.txapi.CompleteQueuedTransaction(queuedTx.Context, ethapi.SendTxArgs(queuedTx.Args)) _, err = b.txapi.CompleteQueuedTransaction(context.Background(), ethapi.SendTxArgs(queuedTx.Args))
return err return err
} }