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 }