github.com/dmmcquay/sia@v1.3.1-0.20180712220038-9f8d535311b9/siatest/testgroup_test.go (about)

     1  package siatest
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/NebulousLabs/Sia/build"
     7  	"github.com/NebulousLabs/Sia/node"
     8  )
     9  
    10  // TestCreateTestGroup tests the behavior of NewGroup.
    11  func TestNewGroup(t *testing.T) {
    12  	if testing.Short() {
    13  		t.SkipNow()
    14  	}
    15  	// Specify the parameters for the group
    16  	groupParams := GroupParams{
    17  		Hosts:   5,
    18  		Renters: 2,
    19  		Miners:  2,
    20  	}
    21  	// Create the group
    22  	tg, err := NewGroupFromTemplate(groupParams)
    23  	if err != nil {
    24  		t.Fatal("Failed to create group: ", err)
    25  	}
    26  	defer func() {
    27  		if err := tg.Close(); err != nil {
    28  			t.Fatal(err)
    29  		}
    30  	}()
    31  
    32  	// Check if the correct number of nodes was created
    33  	if len(tg.Hosts()) != groupParams.Hosts {
    34  		t.Error("Wrong number of hosts")
    35  	}
    36  	if len(tg.Renters()) != groupParams.Renters {
    37  		t.Error("Wrong number of renters")
    38  	}
    39  	if len(tg.Miners()) != groupParams.Miners {
    40  		t.Error("Wrong number of miners")
    41  	}
    42  	if len(tg.Nodes()) != groupParams.Hosts+groupParams.Renters+groupParams.Miners {
    43  		t.Error("Wrong number of nodes")
    44  	}
    45  
    46  	// Check if nodes are funded
    47  	cg, err := tg.Nodes()[0].ConsensusGet()
    48  	if err != nil {
    49  		t.Fatal("Failed to get consensus: ", err)
    50  	}
    51  	for _, node := range tg.Nodes() {
    52  		wtg, err := node.WalletTransactionsGet(0, cg.Height)
    53  		if err != nil {
    54  			t.Fatal(err)
    55  		}
    56  		if len(wtg.ConfirmedTransactions) == 0 {
    57  			t.Errorf("Node has 0 confirmed funds")
    58  		}
    59  	}
    60  }
    61  
    62  // TestCreateTestGroup tests NewGroup without a miner
    63  func TestNewGroupNoMiner(t *testing.T) {
    64  	if testing.Short() || !build.VLONG {
    65  		t.SkipNow()
    66  	}
    67  	// Try to create a group without miners
    68  	groupParams := GroupParams{
    69  		Hosts:   5,
    70  		Renters: 2,
    71  		Miners:  0,
    72  	}
    73  	// Create the group
    74  	_, err := NewGroupFromTemplate(groupParams)
    75  	if err == nil {
    76  		t.Fatal("Creating a group without miners should fail: ", err)
    77  	}
    78  }
    79  
    80  // TestCreateTestGroup tests NewGroup with no renter or host
    81  func TestNewGroupNoRenterHost(t *testing.T) {
    82  	if testing.Short() || !build.VLONG {
    83  		t.SkipNow()
    84  	}
    85  	// Create a group with nothing but miners
    86  	groupParams := GroupParams{
    87  		Hosts:   0,
    88  		Renters: 0,
    89  		Miners:  5,
    90  	}
    91  	// Create the group
    92  	tg, err := NewGroupFromTemplate(groupParams)
    93  	if err != nil {
    94  		t.Fatal("Failed to create group: ", err)
    95  	}
    96  	func() {
    97  		if err := tg.Close(); err != nil {
    98  			t.Fatal(err)
    99  		}
   100  	}()
   101  }
   102  
   103  // TestAddNewNode tests that the added node is returned when AddNodes is called
   104  func TestAddNewNode(t *testing.T) {
   105  	if testing.Short() {
   106  		t.SkipNow()
   107  	}
   108  
   109  	// Create a group
   110  	groupParams := GroupParams{
   111  		Renters: 2,
   112  		Miners:  1,
   113  	}
   114  	tg, err := NewGroupFromTemplate(groupParams)
   115  	if err != nil {
   116  		t.Fatal("Failed to create group: ", err)
   117  	}
   118  	defer func() {
   119  		if err := tg.Close(); err != nil {
   120  			t.Fatal(err)
   121  		}
   122  	}()
   123  
   124  	// Record current nodes
   125  	oldRenters := tg.Renters()
   126  
   127  	// Test adding a node
   128  	testDir, err := TestDir(t.Name())
   129  	if err != nil {
   130  		t.Fatal(err)
   131  	}
   132  	renterTemplate := node.Renter(testDir + "/renter")
   133  	nodes, err := tg.AddNodes(renterTemplate)
   134  	if err != nil {
   135  		t.Fatal(err)
   136  	}
   137  	if len(nodes) != 1 {
   138  		t.Fatalf("More nodes returned than expected; expected 1 got %v", len(nodes))
   139  	}
   140  	renter := nodes[0]
   141  	for _, oldRenter := range oldRenters {
   142  		if oldRenter.primarySeed == renter.primarySeed {
   143  			t.Fatal("Returned renter is not the new renter")
   144  		}
   145  	}
   146  }