// perform a DNS query and assert the reply code, number or answers, etc func assertExchange(t *testing.T, z string, ty uint16, minAnswers int, maxAnswers int, expErr int) *dns.Msg { c := new(dns.Client) c.UDPSize = testUDPBufSize m := new(dns.Msg) m.RecursionDesired = true m.SetQuestion(z, ty) m.SetEdns0(testUDPBufSize, false) // we don't want to play with truncation here... r, _, err := c.Exchange(m, fmt.Sprintf("127.0.0.1:%d", testPort)) t.Logf("Response:\n%+v\n", r) wt.AssertNoErr(t, err) if minAnswers == 0 && maxAnswers == 0 { wt.AssertStatus(t, r.Rcode, expErr, "DNS response code") } else { wt.AssertStatus(t, r.Rcode, dns.RcodeSuccess, "DNS response code") } answers := len(r.Answer) if minAnswers >= 0 && answers < minAnswers { wt.Fatalf(t, "Number of answers >= %d", minAnswers) } if maxAnswers >= 0 && answers > maxAnswers { wt.Fatalf(t, "Number of answers <= %d", maxAnswers) } return r }
func checkEqualConns(t *testing.T, ourName PeerName, got, wanted map[PeerName]Connection) { checkConns := make(PeerNameSet) for _, conn := range wanted { checkConns[conn.Remote().Name] = void } for _, conn := range got { remoteName := conn.Remote().Name if _, found := checkConns[remoteName]; found { delete(checkConns, remoteName) } else { wt.Fatalf(t, "Unexpected connection from %s to %s", ourName, remoteName) } } if len(checkConns) > 0 { wt.Fatalf(t, "Expected connections not found: from %s to %v", ourName, checkConns) } }
// Check that the peers slice matches the wanted peers and optionally // all of their connections func checkTopologyPeers(t *testing.T, checkConns bool, peers []*Peer, wantedPeers ...*Peer) { check := make(map[PeerName]*Peer) for _, peer := range wantedPeers { check[peer.Name] = peer } for _, peer := range peers { name := peer.Name if wantedPeer, found := check[name]; found { if checkConns { checkEqualConns(t, name, peer.connections, wantedPeer.connections) } delete(check, name) } else { wt.Fatalf(t, "Unexpected peer: %s", name) } } if len(check) > 0 { wt.Fatalf(t, "Expected peers not found: %v", check) } }