gopkg.in/dedis/onet.v2@v2.0.0-20181115163211-c8f3724038a7/simulation_test.go (about) 1 package onet 2 3 import ( 4 "errors" 5 "io/ioutil" 6 "os" 7 "strconv" 8 "strings" 9 "testing" 10 "time" 11 12 "github.com/stretchr/testify/require" 13 "gopkg.in/dedis/onet.v2/log" 14 ) 15 16 func TestSimulationBF(t *testing.T) { 17 sc, _, err := createBFTree(7, 2, false, []string{"test1", "test2"}) 18 if err != nil { 19 t.Fatal(err) 20 } 21 addresses := []string{ 22 "test1:2000", 23 "test2:2000", 24 "test1:2002", 25 "test2:2002", 26 "test1:2004", 27 "test2:2004", 28 "test1:2006", 29 } 30 31 for i, a := range sc.Roster.List { 32 if !strings.Contains(string(a.Address), addresses[i]) { 33 t.Fatal("Address", string(a.Address), "should be", addresses[i]) 34 } 35 } 36 if !sc.Tree.IsBinary(sc.Tree.Root) { 37 t.Fatal("Created tree is not binary") 38 } 39 40 sc, _, err = createBFTree(13, 3, false, []string{"test1", "test2"}) 41 if err != nil { 42 t.Fatal(err) 43 } 44 if len(sc.Tree.Root.Children) != 3 { 45 t.Fatal("Branching-factor 3 tree has not 3 children") 46 } 47 if !sc.Tree.IsNary(sc.Tree.Root, 3) { 48 t.Fatal("Created tree is not binary") 49 } 50 } 51 52 func TestSimulationBigTree(t *testing.T) { 53 if testing.Short() { 54 t.Skip() 55 } 56 for i := uint(4); i < 8; i++ { 57 _, _, err := createBFTree(1<<i-1, 2, false, []string{"test1", "test2"}) 58 require.Nil(t, err) 59 } 60 } 61 62 func TestSimulationLoadSave(t *testing.T) { 63 sc, _, err := createBFTree(7, 2, false, []string{"127.0.0.1", "127.0.0.2"}) 64 if err != nil { 65 t.Fatal(err) 66 } 67 dir, err := ioutil.TempDir("", "example") 68 log.ErrFatal(err) 69 defer os.RemoveAll(dir) 70 sc.Save(dir) 71 sc2, err := LoadSimulationConfig("Ed25519", dir, sc.Roster.List[0].Address.NetworkAddress()) 72 if err != nil { 73 t.Fatal(err) 74 } 75 if !sc2[0].Tree.ID.Equal(sc.Tree.ID) { 76 t.Fatal("Tree-id is not correct") 77 } 78 closeAll(sc2) 79 } 80 81 func TestSimulationMultipleInstances(t *testing.T) { 82 sc, _, err := createBFTree(7, 2, false, []string{"127.0.0.1", "127.0.0.2"}) 83 if err != nil { 84 t.Fatal(err) 85 } 86 dir, err := ioutil.TempDir("", "example") 87 log.ErrFatal(err) 88 defer os.RemoveAll(dir) 89 sc.Save(dir) 90 sc2, err := LoadSimulationConfig("Ed25519", dir, sc.Roster.List[0].Address.Host()) 91 if err != nil { 92 t.Fatal(err) 93 } 94 defer closeAll(sc2) 95 if len(sc2) != 4 { 96 t.Fatal("We should have 4 local1-hosts but have", len(sc2)) 97 } 98 if sc2[0].Server.ServerIdentity.ID.Equal(sc2[1].Server.ServerIdentity.ID) { 99 t.Fatal("Hosts are not copies") 100 } 101 } 102 103 func closeAll(scs []*SimulationConfig) { 104 for _, s := range scs { 105 if err := s.Server.Close(); err != nil { 106 log.Error("Error closing host", s.Server.ServerIdentity, err) 107 } 108 109 for s.Server.Router.Listening() { 110 log.Lvl2("Sleeping while waiting for router to be closed") 111 time.Sleep(20 * time.Millisecond) 112 } 113 } 114 } 115 116 func createBFTree(hosts, bf int, tls bool, addresses []string) (*SimulationConfig, *SimulationBFTree, error) { 117 sc := &SimulationConfig{} 118 sb := &SimulationBFTree{ 119 Hosts: hosts, 120 BF: bf, 121 Suite: "Ed25519", 122 TLS: tls, 123 } 124 sb.CreateRoster(sc, addresses, 2000) 125 if len(sc.Roster.List) != hosts { 126 return nil, nil, errors.New("Didn't get correct number of entities") 127 } 128 err := sb.CreateTree(sc) 129 if err != nil { 130 return nil, nil, err 131 } 132 if !sc.Tree.IsNary(sc.Tree.Root, bf) { 133 return nil, nil, errors.New("Tree isn't " + strconv.Itoa(bf) + "-ary") 134 } 135 136 return sc, sb, nil 137 }