tstest/integration: add integration test for Tailnet Lock
This patch adds an integration test for Tailnet Lock, checking that a node can't talk to peers in the tailnet until it becomes signed. This patch also introduces a new package `tstest/tkatest`, which has some helpers for constructing a mock control server that responds to TKA requests. This allows us to reduce boilerplate in the IPN tests. Updates tailscale/corp#33599 Signed-off-by: Alex Chan <alexc@tailscale.com>
This commit is contained in:
@@ -918,7 +918,7 @@ func (n *TestNode) Ping(otherNode *TestNode) error {
|
||||
t := n.env.t
|
||||
ip := otherNode.AwaitIP4().String()
|
||||
t.Logf("Running ping %v (from %v)...", ip, n.AwaitIP4())
|
||||
return n.Tailscale("ping", ip).Run()
|
||||
return n.Tailscale("ping", "--timeout=1s", ip).Run()
|
||||
}
|
||||
|
||||
// AwaitListening waits for the tailscaled to be serving local clients
|
||||
@@ -1077,6 +1077,46 @@ func (n *TestNode) MustStatus() *ipnstate.Status {
|
||||
return st
|
||||
}
|
||||
|
||||
// PublicKey returns the hex-encoded public key of this node,
|
||||
// e.g. `nodekey:123456abc`
|
||||
func (n *TestNode) PublicKey() string {
|
||||
tb := n.env.t
|
||||
tb.Helper()
|
||||
cmd := n.Tailscale("status", "--json")
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
tb.Fatalf("running `tailscale status`: %v, %s", err, out)
|
||||
}
|
||||
|
||||
type Self struct{ PublicKey string }
|
||||
type StatusOutput struct{ Self Self }
|
||||
|
||||
var st StatusOutput
|
||||
if err := json.Unmarshal(out, &st); err != nil {
|
||||
tb.Fatalf("decoding `tailscale status` JSON: %v\njson:\n%s", err, out)
|
||||
}
|
||||
return st.Self.PublicKey
|
||||
}
|
||||
|
||||
// NLPublicKey returns the hex-encoded network lock public key of
|
||||
// this node, e.g. `tlpub:123456abc`
|
||||
func (n *TestNode) NLPublicKey() string {
|
||||
tb := n.env.t
|
||||
tb.Helper()
|
||||
cmd := n.Tailscale("lock", "status", "--json")
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
tb.Fatalf("running `tailscale lock status`: %v, %s", err, out)
|
||||
}
|
||||
st := struct {
|
||||
PublicKey string `json:"PublicKey"`
|
||||
}{}
|
||||
if err := json.Unmarshal(out, &st); err != nil {
|
||||
tb.Fatalf("decoding `tailscale lock status` JSON: %v\njson:\n%s", err, out)
|
||||
}
|
||||
return st.PublicKey
|
||||
}
|
||||
|
||||
// trafficTrap is an HTTP proxy handler to note whether any
|
||||
// HTTP traffic tries to leave localhost from tailscaled. We don't
|
||||
// expect any, so any request triggers a failure.
|
||||
|
||||
Reference in New Issue
Block a user