mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-25 19:15:34 +00:00
6f73f2c15a
The new deepprint package just walks a Go data structure and writes to an io.Writer. It's not pretty like go-spew, etc. We then use it to replace the use of UAPI (which we have a TODO to remove) to generate signatures of data structures to detect whether anything changed (without retaining the old copy). This was necessary because the UAPI conversion ends up trying to do DNS lookups which an upcoming change depends on not happening.
64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package deepprint
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/tailscale/wireguard-go/wgcfg"
|
|
"inet.af/netaddr"
|
|
"tailscale.com/wgengine/router"
|
|
)
|
|
|
|
func TestDeepPrint(t *testing.T) {
|
|
// v contains the types of values we care about for our current callers.
|
|
// Mostly we're just testing that we don't panic on handled types.
|
|
v := getVal()
|
|
|
|
var buf bytes.Buffer
|
|
Print(&buf, v)
|
|
t.Logf("Got: %s", buf.Bytes())
|
|
|
|
hash1 := Hash(v)
|
|
t.Logf("hash: %v", hash1)
|
|
for i := 0; i < 20; i++ {
|
|
hash2 := Hash(getVal())
|
|
if hash1 != hash2 {
|
|
t.Error("second hash didn't match")
|
|
}
|
|
}
|
|
}
|
|
|
|
func getVal() []interface{} {
|
|
return []interface{}{
|
|
&wgcfg.Config{
|
|
Name: "foo",
|
|
Addresses: []wgcfg.CIDR{{Mask: 5, IP: wgcfg.IP{Addr: [16]byte{3: 3}}}},
|
|
ListenPort: 5,
|
|
Peers: []wgcfg.Peer{
|
|
{
|
|
Endpoints: []wgcfg.Endpoint{
|
|
{
|
|
Host: "foo",
|
|
Port: 5,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
&router.Config{
|
|
DNS: []netaddr.IP{netaddr.IPv4(8, 8, 8, 8)},
|
|
},
|
|
map[string]string{
|
|
"key1": "val1",
|
|
"key2": "val2",
|
|
"key3": "val3",
|
|
"key4": "val4",
|
|
"key5": "val5",
|
|
"key6": "val6",
|
|
"key7": "val7",
|
|
"key8": "val8",
|
|
"key9": "val9",
|
|
},
|
|
}
|
|
}
|