github.com/avahowell/sia@v0.5.1-beta.0.20160524050156-83dcc3d37c94/modules/transactionpool/transactionpool_test.go (about)

     1  package transactionpool
     2  
     3  import (
     4  	"crypto/rand"
     5  	"path/filepath"
     6  	"testing"
     7  
     8  	"github.com/NebulousLabs/Sia/build"
     9  	"github.com/NebulousLabs/Sia/crypto"
    10  	"github.com/NebulousLabs/Sia/modules"
    11  	"github.com/NebulousLabs/Sia/modules/consensus"
    12  	"github.com/NebulousLabs/Sia/modules/gateway"
    13  	"github.com/NebulousLabs/Sia/modules/miner"
    14  	"github.com/NebulousLabs/Sia/modules/wallet"
    15  	"github.com/NebulousLabs/Sia/types"
    16  )
    17  
    18  // A tpoolTester is used during testing to initialize a transaction pool and
    19  // useful helper modules.
    20  type tpoolTester struct {
    21  	cs        modules.ConsensusSet
    22  	gateway   modules.Gateway
    23  	tpool     *TransactionPool
    24  	miner     modules.TestMiner
    25  	wallet    modules.Wallet
    26  	walletKey crypto.TwofishKey
    27  
    28  	persistDir string
    29  }
    30  
    31  // createTpoolTester returns a ready-to-use tpool tester, with all modules
    32  // initialized.
    33  func createTpoolTester(name string) (*tpoolTester, error) {
    34  	// Initialize the modules.
    35  	testdir := build.TempDir(modules.TransactionPoolDir, name)
    36  	g, err := gateway.New("localhost:0", filepath.Join(testdir, modules.GatewayDir))
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  	cs, err := consensus.New(g, filepath.Join(testdir, modules.ConsensusDir))
    41  	if err != nil {
    42  		return nil, err
    43  	}
    44  	tp, err := New(cs, g, filepath.Join(testdir, modules.TransactionPoolDir))
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  	w, err := wallet.New(cs, tp, filepath.Join(testdir, modules.WalletDir))
    49  	if err != nil {
    50  		return nil, err
    51  	}
    52  	var key crypto.TwofishKey
    53  	_, err = rand.Read(key[:])
    54  	if err != nil {
    55  		return nil, err
    56  	}
    57  	_, err = w.Encrypt(key)
    58  	if err != nil {
    59  		return nil, err
    60  	}
    61  	err = w.Unlock(key)
    62  	if err != nil {
    63  		return nil, err
    64  	}
    65  	m, err := miner.New(cs, tp, w, filepath.Join(testdir, modules.MinerDir))
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  
    70  	// Assebmle all of the objects in to a tpoolTester
    71  	tpt := &tpoolTester{
    72  		cs:        cs,
    73  		gateway:   g,
    74  		tpool:     tp,
    75  		miner:     m,
    76  		wallet:    w,
    77  		walletKey: key,
    78  
    79  		persistDir: testdir,
    80  	}
    81  
    82  	// Mine blocks until there is money in the wallet.
    83  	for i := types.BlockHeight(0); i <= types.MaturityDelay; i++ {
    84  		b, _ := tpt.miner.FindBlock()
    85  		err = tpt.cs.AcceptBlock(b)
    86  		if err != nil {
    87  			return nil, err
    88  		}
    89  	}
    90  
    91  	return tpt, nil
    92  }
    93  
    94  // TestIntegrationNewNilInputs tries to trigger a panic with nil inputs.
    95  func TestIntegrationNewNilInputs(t *testing.T) {
    96  	// Create a gateway and consensus set.
    97  	testdir := build.TempDir(modules.TransactionPoolDir, "TestNewNilInputs")
    98  	g, err := gateway.New("localhost:0", filepath.Join(testdir, modules.GatewayDir))
    99  	if err != nil {
   100  		t.Fatal(err)
   101  	}
   102  	cs, err := consensus.New(g, filepath.Join(testdir, modules.ConsensusDir))
   103  	if err != nil {
   104  		t.Fatal(err)
   105  	}
   106  	tpDir := filepath.Join(testdir, modules.TransactionPoolDir)
   107  
   108  	// Try all combinations of nil inputs.
   109  	_, err = New(nil, nil, tpDir)
   110  	if err == nil {
   111  		t.Error(err)
   112  	}
   113  	_, err = New(nil, g, tpDir)
   114  	if err != errNilCS {
   115  		t.Error(err)
   116  	}
   117  	_, err = New(cs, nil, tpDir)
   118  	if err != errNilGateway {
   119  		t.Error(err)
   120  	}
   121  	_, err = New(cs, g, tpDir)
   122  	if err != nil {
   123  		t.Error(err)
   124  	}
   125  }