From fc1d83750150c617114c3c059f01ffccfb9dbd77 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Thu, 29 Oct 2015 15:47:11 +0000 Subject: [PATCH] Extend unit test to cover mixed-case hostnames and daisy-chained gossip; reduce mock gossip timer to 2 seconds to trigger more often during tests. --- nameserver/nameserver_test.go | 23 +++++++++++++++++++++-- testing/gossip/mocks.go | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/nameserver/nameserver_test.go b/nameserver/nameserver_test.go index 581fe321..5b518ad8 100644 --- a/nameserver/nameserver_test.go +++ b/nameserver/nameserver_test.go @@ -83,6 +83,10 @@ func testNameservers(t *testing.T) { lookupTimeout := 10 // ms nameservers, grouter := makeNetwork(50) defer stopNetwork(nameservers, grouter) + // This subset will sometimes lose touch with some of the others + badNameservers := nameservers[45:] + // This subset will remain well-connected, and we will deal mainly with them + nameservers = nameservers[:45] nameserversByName := map[router.PeerName]*Nameserver{} for _, n := range nameservers { nameserversByName[n.ourName] = n @@ -106,7 +110,13 @@ func testNameservers(t *testing.T) { addMapping := func() { nameserver := nameservers[rand.Intn(len(nameservers))] addr := address.Address(rand.Int31()) - hostname := fmt.Sprintf("hostname%d", rand.Int63()) + // Create a hostname which has some upper and lowercase letters, + // and a unique number so we don't have to check if we allocated it already + randomBits := rand.Int63() + firstLetter := 'H' + (randomBits&1)*32 + secondLetter := 'O' + (randomBits&2)*16 + randomBits = randomBits >> 2 + hostname := fmt.Sprintf("%c%cstname%d", firstLetter, secondLetter, randomBits) mapping := mapping{hostname, []pair{{nameserver.ourName, addr}}} mappings = append(mappings, mapping) @@ -129,6 +139,12 @@ func testNameservers(t *testing.T) { check(nameserver, mapping) } + loseConnection := func() { + nameserver1 := badNameservers[rand.Intn(len(badNameservers))] + nameserver2 := nameservers[rand.Intn(len(nameservers))] + nameserver1.PeerGone(&router.Peer{Name: nameserver2.ourName}) + } + deleteMapping := func() { if len(mappings) <= 0 { return @@ -191,7 +207,10 @@ func testNameservers(t *testing.T) { case 0.2 <= r && r < 0.3: deleteMapping() - case 0.3 <= r && r < 0.9: + case 0.3 <= r && r < 0.35: + loseConnection() + + case 0.35 <= r && r < 0.9: doLookup() case 0.9 <= r: diff --git a/testing/gossip/mocks.go b/testing/gossip/mocks.go index ebc63242..ae5791f1 100644 --- a/testing/gossip/mocks.go +++ b/testing/gossip/mocks.go @@ -97,7 +97,7 @@ type TestRouterClient struct { } func (grouter *TestRouter) run(sender router.PeerName, gossiper router.Gossiper, gossipChan chan interface{}) { - gossipTimer := time.Tick(10 * time.Second) + gossipTimer := time.Tick(2 * time.Second) for { select { case gossip := <-gossipChan: