tailcfg: add MapResponse.ControlTime field

And log it when provided in map responses.

The test uses the date on which I joined Tailscale. :)

Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
pull/3963/head
Josh Bleecher Snyder 3 years ago committed by Josh Bleecher Snyder
parent 72d8672ef7
commit 8cf6d0a17b

@ -772,6 +772,9 @@ func (c *Direct) sendMapRequest(ctx context.Context, maxPolls int, cb func(*netm
go answerPing(c.logf, c.httpc, pr)
}
if !resp.ControlTime.IsZero() {
c.logf("netmap: control time is %v", resp.ControlTime.UTC().Format(time.RFC3339Nano))
}
if resp.KeepAlive {
vlogf("netmap: got keep-alive")
} else {

@ -1291,6 +1291,9 @@ type MapResponse struct {
// SSH connections should be handled.
SSHPolicy *SSHPolicy `json:",omitempty"`
// ControlTime, if non-zero, is the current timestamp according to the control server.
ControlTime time.Time `json:",omitempty"`
// Debug is normally nil, except for when the control server
// is setting debug settings on a node.
Debug *Debug `json:",omitempty"`

@ -146,6 +146,27 @@ func TestCollectPanic(t *testing.T) {
}
}
func TestControlTimeLogLine(t *testing.T) {
t.Parallel()
env := newTestEnv(t)
n := newTestNode(t, env)
n.StartDaemon()
n.AwaitResponding()
n.MustUp()
n.AwaitRunning()
if err := tstest.WaitFor(20*time.Second, func() error {
const sub = `netmap: control time is 2020-08-03T00:00:00.000000001Z`
if !n.env.LogCatcher.logsContains(mem.S(sub)) {
return fmt.Errorf("log catcher didn't see %#q; got %s", sub, n.env.LogCatcher.logsString())
}
return nil
}); err != nil {
t.Fatal(err)
}
}
// test Issue 2321: Start with UpdatePrefs should save prefs to disk
func TestStateSavedOnStart(t *testing.T) {
t.Parallel()

@ -731,6 +731,7 @@ func (s *Server) MapResponse(req *tailcfg.MapRequest) (res *tailcfg.MapResponse,
DisableUPnP: "true",
},
DNSConfig: s.DNSConfig,
ControlTime: time.Date(2020, 8, 3, 0, 0, 0, 1, time.UTC),
}
for _, p := range s.AllNodes() {
if p.StableID != node.StableID {

Loading…
Cancel
Save