Просмотр исходного кода

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 <[email protected]>
Josh Bleecher Snyder 4 лет назад
Родитель
Сommit
8cf6d0a17b

+ 3 - 0
control/controlclient/direct.go

@@ -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 {

+ 3 - 0
tailcfg/tailcfg.go

@@ -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"`

+ 21 - 0
tstest/integration/integration_test.go

@@ -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()

+ 2 - 1
tstest/integration/testcontrol/testcontrol.go

@@ -730,7 +730,8 @@ func (s *Server) MapResponse(req *tailcfg.MapRequest) (res *tailcfg.MapResponse,
 		Debug: &tailcfg.Debug{
 			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() {
 		if p.StableID != node.StableID {