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) 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 { if resp.KeepAlive {
vlogf("netmap: got keep-alive") vlogf("netmap: got keep-alive")
} else { } else {

@ -1291,6 +1291,9 @@ type MapResponse struct {
// SSH connections should be handled. // SSH connections should be handled.
SSHPolicy *SSHPolicy `json:",omitempty"` 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 // Debug is normally nil, except for when the control server
// is setting debug settings on a node. // is setting debug settings on a node.
Debug *Debug `json:",omitempty"` 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 // test Issue 2321: Start with UpdatePrefs should save prefs to disk
func TestStateSavedOnStart(t *testing.T) { func TestStateSavedOnStart(t *testing.T) {
t.Parallel() t.Parallel()

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

Loading…
Cancel
Save