package webconnectivity_test import ( "context" "net" "net/url" "testing" "github.com/google/go-cmp/cmp" "github.com/ooni/probe-cli/v3/internal/engine/experiment/urlgetter" "github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity" ) func TestDNSLookup(t *testing.T) { if testing.Short() { t.Skip("skip test in short mode") } config := webconnectivity.DNSLookupConfig{ Session: newsession(t, true), URL: &url.URL{Host: "dns.google"}, } out := webconnectivity.DNSLookup(context.Background(), config) if out.Failure != nil { t.Fatal(*out.Failure) } if len(out.Addrs) < 1 { t.Fatal("no addresses?!") } for addr, asn := range out.Addrs { if net.ParseIP(addr) == nil { t.Fatal("invalid addr") } if asn != 15169 { t.Fatal("invalid asn") } } if len(out.TestKeys.NetworkEvents) < 1 { t.Fatal("no network events?!") } if len(out.TestKeys.Queries) < 1 { t.Fatal("no queries?!") } } func TestDNSLookupResult_Addresses(t *testing.T) { type fields struct { Addrs map[string]int64 Failure *string TestKeys urlgetter.TestKeys } tests := []struct { name string fields fields wantOut []string }{{ name: "with no entries", fields: fields{}, wantOut: []string{}, }, { name: "with some entries", fields: fields{ Addrs: map[string]int64{"1.1.1.1": 1, "2001:4860:4860::8844": 2}, }, wantOut: []string{"1.1.1.1", "2001:4860:4860::8844"}, }} for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { r := webconnectivity.DNSLookupResult{ Addrs: tt.fields.Addrs, Failure: tt.fields.Failure, TestKeys: tt.fields.TestKeys, } gotOut := r.Addresses() if diff := cmp.Diff(tt.wantOut, gotOut); diff != "" { t.Fatal(diff) } }) } }