tailscale/tstest/integration/vms/dns_tester.go

57 lines
1.1 KiB
Go
Raw Permalink Normal View History

// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build ignore
// +build ignore
// Command dns_tester exists in order to perform tests of our DNS
// configuration stack. This was written because the state of DNS
// in our target environments is so diverse that we need a little tool
// to do this test for us.
package main
import (
"context"
"encoding/json"
"flag"
"net"
"os"
"time"
)
func main() {
flag.Parse()
target := flag.Arg(0)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
errCount := 0
wait := 25 * time.Millisecond
for range make([]struct{}, 5) {
err := lookup(ctx, target)
if err != nil {
errCount++
time.Sleep(wait)
wait = wait * 2
continue
}
break
}
}
func lookup(ctx context.Context, target string) error {
ctx, cancel := context.WithTimeout(ctx, time.Second)
defer cancel()
hosts, err := net.LookupHost(target)
if err != nil {
return err
}
json.NewEncoder(os.Stdout).Encode(hosts)
return nil
}