|
|
@@ -46,7 +46,7 @@ func TestContainerBoot(t *testing.T) {
|
|
|
if err := exec.Command("go", "build", "-ldflags", "-X main.testSleepDuration=1ms", "-o", boot, "tailscale.com/cmd/containerboot").Run(); err != nil {
|
|
|
t.Fatalf("Building containerboot: %v", err)
|
|
|
}
|
|
|
- egressStatus := egressSvcStatus("foo", "foo.tailnetxyz.ts.net")
|
|
|
+ egressStatus := egressSvcStatus("foo", "foo.tailnetxyz.ts.net", "100.64.0.2")
|
|
|
|
|
|
metricsURL := func(port int) string {
|
|
|
return fmt.Sprintf("http://127.0.0.1:%d/metrics", port)
|
|
|
@@ -99,7 +99,7 @@ func TestContainerBoot(t *testing.T) {
|
|
|
NetMap: &netmap.NetworkMap{
|
|
|
SelfNode: (&tailcfg.Node{
|
|
|
StableID: tailcfg.StableNodeID("myID"),
|
|
|
- Name: "test-node.test.ts.net",
|
|
|
+ Name: "test-node.test.ts.net.",
|
|
|
Addresses: []netip.Prefix{netip.MustParsePrefix("100.64.0.1/32")},
|
|
|
}).View(),
|
|
|
},
|
|
|
@@ -356,7 +356,7 @@ func TestContainerBoot(t *testing.T) {
|
|
|
return testCase{
|
|
|
Env: map[string]string{
|
|
|
"TS_AUTHKEY": "tskey-key",
|
|
|
- "TS_TAILNET_TARGET_FQDN": "ipv6-node.test.ts.net", // resolves to IPv6 address
|
|
|
+ "TS_TAILNET_TARGET_FQDN": "ipv6-node.test.ts.net.", // resolves to IPv6 address
|
|
|
"TS_USERSPACE": "false",
|
|
|
"TS_TEST_FAKE_NETFILTER_6": "false",
|
|
|
},
|
|
|
@@ -377,13 +377,13 @@ func TestContainerBoot(t *testing.T) {
|
|
|
NetMap: &netmap.NetworkMap{
|
|
|
SelfNode: (&tailcfg.Node{
|
|
|
StableID: tailcfg.StableNodeID("myID"),
|
|
|
- Name: "test-node.test.ts.net",
|
|
|
+ Name: "test-node.test.ts.net.",
|
|
|
Addresses: []netip.Prefix{netip.MustParsePrefix("100.64.0.1/32")},
|
|
|
}).View(),
|
|
|
Peers: []tailcfg.NodeView{
|
|
|
(&tailcfg.Node{
|
|
|
StableID: tailcfg.StableNodeID("ipv6ID"),
|
|
|
- Name: "ipv6-node.test.ts.net",
|
|
|
+ Name: "ipv6-node.test.ts.net.",
|
|
|
Addresses: []netip.Prefix{netip.MustParsePrefix("::1/128")},
|
|
|
}).View(),
|
|
|
},
|
|
|
@@ -481,7 +481,7 @@ func TestContainerBoot(t *testing.T) {
|
|
|
Notify: runningNotify,
|
|
|
WantKubeSecret: map[string]string{
|
|
|
"authkey": "tskey-key",
|
|
|
- "device_fqdn": "test-node.test.ts.net",
|
|
|
+ "device_fqdn": "test-node.test.ts.net.",
|
|
|
"device_id": "myID",
|
|
|
"device_ips": `["100.64.0.1"]`,
|
|
|
kubetypes.KeyCapVer: capver,
|
|
|
@@ -580,7 +580,7 @@ func TestContainerBoot(t *testing.T) {
|
|
|
"/usr/bin/tailscale --socket=/tmp/tailscaled.sock set --accept-dns=false",
|
|
|
},
|
|
|
WantKubeSecret: map[string]string{
|
|
|
- "device_fqdn": "test-node.test.ts.net",
|
|
|
+ "device_fqdn": "test-node.test.ts.net.",
|
|
|
"device_id": "myID",
|
|
|
"device_ips": `["100.64.0.1"]`,
|
|
|
kubetypes.KeyCapVer: capver,
|
|
|
@@ -613,7 +613,7 @@ func TestContainerBoot(t *testing.T) {
|
|
|
Notify: runningNotify,
|
|
|
WantKubeSecret: map[string]string{
|
|
|
"authkey": "tskey-key",
|
|
|
- "device_fqdn": "test-node.test.ts.net",
|
|
|
+ "device_fqdn": "test-node.test.ts.net.",
|
|
|
"device_id": "myID",
|
|
|
"device_ips": `["100.64.0.1"]`,
|
|
|
kubetypes.KeyCapVer: capver,
|
|
|
@@ -625,14 +625,14 @@ func TestContainerBoot(t *testing.T) {
|
|
|
NetMap: &netmap.NetworkMap{
|
|
|
SelfNode: (&tailcfg.Node{
|
|
|
StableID: tailcfg.StableNodeID("newID"),
|
|
|
- Name: "new-name.test.ts.net",
|
|
|
+ Name: "new-name.test.ts.net.",
|
|
|
Addresses: []netip.Prefix{netip.MustParsePrefix("100.64.0.1/32")},
|
|
|
}).View(),
|
|
|
},
|
|
|
},
|
|
|
WantKubeSecret: map[string]string{
|
|
|
"authkey": "tskey-key",
|
|
|
- "device_fqdn": "new-name.test.ts.net",
|
|
|
+ "device_fqdn": "new-name.test.ts.net.",
|
|
|
"device_id": "newID",
|
|
|
"device_ips": `["100.64.0.1"]`,
|
|
|
kubetypes.KeyCapVer: capver,
|
|
|
@@ -927,7 +927,7 @@ func TestContainerBoot(t *testing.T) {
|
|
|
Notify: runningNotify,
|
|
|
WantKubeSecret: map[string]string{
|
|
|
"authkey": "tskey-key",
|
|
|
- "device_fqdn": "test-node.test.ts.net",
|
|
|
+ "device_fqdn": "test-node.test.ts.net.",
|
|
|
"device_id": "myID",
|
|
|
"device_ips": `["100.64.0.1"]`,
|
|
|
"https_endpoint": "no-https",
|
|
|
@@ -963,11 +963,27 @@ func TestContainerBoot(t *testing.T) {
|
|
|
},
|
|
|
},
|
|
|
{
|
|
|
- Notify: runningNotify,
|
|
|
+ Notify: &ipn.Notify{
|
|
|
+ State: ptr.To(ipn.Running),
|
|
|
+ NetMap: &netmap.NetworkMap{
|
|
|
+ SelfNode: (&tailcfg.Node{
|
|
|
+ StableID: tailcfg.StableNodeID("myID"),
|
|
|
+ Name: "test-node.test.ts.net.",
|
|
|
+ Addresses: []netip.Prefix{netip.MustParsePrefix("100.64.0.1/32")},
|
|
|
+ }).View(),
|
|
|
+ Peers: []tailcfg.NodeView{
|
|
|
+ (&tailcfg.Node{
|
|
|
+ StableID: tailcfg.StableNodeID("fooID"),
|
|
|
+ Name: "foo.tailnetxyz.ts.net.",
|
|
|
+ Addresses: []netip.Prefix{netip.MustParsePrefix("100.64.0.2/32")},
|
|
|
+ }).View(),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
WantKubeSecret: map[string]string{
|
|
|
"egress-services": string(mustJSON(t, egressStatus)),
|
|
|
"authkey": "tskey-key",
|
|
|
- "device_fqdn": "test-node.test.ts.net",
|
|
|
+ "device_fqdn": "test-node.test.ts.net.",
|
|
|
"device_id": "myID",
|
|
|
"device_ips": `["100.64.0.1"]`,
|
|
|
kubetypes.KeyCapVer: capver,
|
|
|
@@ -1338,6 +1354,11 @@ func (lc *localAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
|
}
|
|
|
w.Write([]byte("fake metrics"))
|
|
|
return
|
|
|
+ case "/localapi/v0/prefs":
|
|
|
+ if r.Method != "GET" {
|
|
|
+ panic(fmt.Sprintf("unsupported method %q", r.Method))
|
|
|
+ }
|
|
|
+ return
|
|
|
default:
|
|
|
panic(fmt.Sprintf("unsupported path %q", r.URL.Path))
|
|
|
}
|
|
|
@@ -1563,13 +1584,14 @@ func mustJSON(t *testing.T, v any) []byte {
|
|
|
}
|
|
|
|
|
|
// egress services status given one named tailnet target specified by FQDN. As written by the proxy to its state Secret.
|
|
|
-func egressSvcStatus(name, fqdn string) egressservices.Status {
|
|
|
+func egressSvcStatus(name, fqdn, ip string) egressservices.Status {
|
|
|
return egressservices.Status{
|
|
|
Services: map[string]*egressservices.ServiceStatus{
|
|
|
name: {
|
|
|
TailnetTarget: egressservices.TailnetTarget{
|
|
|
FQDN: fqdn,
|
|
|
},
|
|
|
+ TailnetTargetIPs: []netip.Addr{netip.MustParseAddr(ip)},
|
|
|
},
|
|
|
},
|
|
|
}
|