Commit 7ab07b46 authored by acud's avatar acud Committed by GitHub

hive: clean up tests, allow for unordered response (#516)

* hive: clean up tests, allow for unordered response
parent 4e19ab31
...@@ -10,8 +10,7 @@ import ( ...@@ -10,8 +10,7 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"math/rand" "math/rand"
"reflect" "runtime/debug"
"sort"
"strconv" "strconv"
"testing" "testing"
"time" "time"
...@@ -72,7 +71,12 @@ func TestBroadcastPeers(t *testing.T) { ...@@ -72,7 +71,12 @@ func TestBroadcastPeers(t *testing.T) {
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
wantMsgs[i/hive.MaxBatchSize].Peers = append(wantMsgs[i/hive.MaxBatchSize].Peers, &pb.BzzAddress{Overlay: bzzAddresses[i].Overlay.Bytes(), Underlay: bzzAddresses[i].Underlay.Bytes(), Signature: bzzAddresses[i].Signature})
wantMsgs[i/hive.MaxBatchSize].Peers = append(wantMsgs[i/hive.MaxBatchSize].Peers, &pb.BzzAddress{
Overlay: bzzAddresses[i].Overlay.Bytes(),
Underlay: bzzAddresses[i].Underlay.Bytes(),
Signature: bzzAddresses[i].Signature,
})
} }
testCases := map[string]struct { testCases := map[string]struct {
...@@ -175,65 +179,86 @@ func TestBroadcastPeers(t *testing.T) { ...@@ -175,65 +179,86 @@ func TestBroadcastPeers(t *testing.T) {
} }
func expectOverlaysEventually(t *testing.T, exporter ab.Interface, wantOverlays []swarm.Address) { func expectOverlaysEventually(t *testing.T, exporter ab.Interface, wantOverlays []swarm.Address) {
var (
overlays []swarm.Address
err error
isIn = func(a swarm.Address, addrs []swarm.Address) bool {
for _, v := range addrs {
if a.Equal(v) {
return true
}
}
return false
}
)
for i := 0; i < 100; i++ { for i := 0; i < 100; i++ {
var stringOverlays []string time.Sleep(50 * time.Millisecond)
var stringWantOverlays []string overlays, err = exporter.Overlays()
o, err := exporter.Overlays()
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
for _, k := range o {
stringOverlays = append(stringOverlays, k.String())
}
for _, k := range wantOverlays { if len(overlays) == len(wantOverlays) {
stringWantOverlays = append(stringWantOverlays, k.String()) break
} }
}
if len(overlays) != len(wantOverlays) {
debug.PrintStack()
t.Fatal("timed out waiting for overlays")
}
sort.Strings(stringOverlays) for _, v := range wantOverlays {
sort.Strings(stringWantOverlays) if !isIn(v, overlays) {
if reflect.DeepEqual(stringOverlays, stringWantOverlays) { t.Errorf("overlay %s expected but not found", v.String())
return
} }
time.Sleep(10 * time.Millisecond)
} }
o, err := exporter.Overlays() if t.Failed() {
if err != nil { t.Errorf("overlays got %v, want %v", overlays, wantOverlays)
t.Fatal(err)
} }
t.Errorf("Overlays got %v, want %v", o, wantOverlays)
} }
func expectBzzAddresessEventually(t *testing.T, exporter ab.Interface, wantBzzAddresses []bzz.Address) { func expectBzzAddresessEventually(t *testing.T, exporter ab.Interface, wantBzzAddresses []bzz.Address) {
var (
addresses []bzz.Address
err error
isIn = func(a bzz.Address, addrs []bzz.Address) bool {
for _, v := range addrs {
if a.Equal(&v) {
return true
}
}
return false
}
)
for i := 0; i < 100; i++ { for i := 0; i < 100; i++ {
time.Sleep(50 * time.Millisecond) time.Sleep(50 * time.Millisecond)
addresses, err := exporter.Addresses() addresses, err = exporter.Addresses()
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
if len(addresses) != len(wantBzzAddresses) { if len(addresses) == len(wantBzzAddresses) {
continue break
} }
}
if len(addresses) != len(wantBzzAddresses) {
debug.PrintStack()
t.Fatal("timed out waiting for bzz addresses")
}
for i, v := range addresses { for _, v := range wantBzzAddresses {
if !v.Equal(&wantBzzAddresses[i]) { if !isIn(v, addresses) {
continue t.Errorf("address %s expected but not found", v.Overlay.String())
}
} }
return
} }
m, err := exporter.Addresses() if t.Failed() {
if err != nil { t.Errorf("bzz addresses got %v, want %v", addresses, wantBzzAddresses)
t.Fatal(err)
} }
t.Errorf("Bzz addresses got %v, want %v", m, wantBzzAddresses)
} }
func readAndAssertPeersMsgs(in []byte, expectedLen int) ([]pb.Peers, error) { func readAndAssertPeersMsgs(in []byte, expectedLen int) ([]pb.Peers, error) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment