From b5ac9172fd7749fe3dc9be79946ffdec4b6b1a8e Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Sat, 12 Nov 2022 13:55:43 -0800 Subject: [PATCH] cmd/tailscale/cli: move earlier shell test to its own files (I should've done this to start with.) Updates tailscale/corp#7515 Change-Id: I7fb88cf95772790fd415ecf28fc52bde95507641 Signed-off-by: Brad Fitzpatrick --- cmd/tailscale/cli/cli_test.go | 48 ----------------------------- cmd/tailscale/cli/serve.go | 14 +++++++++ cmd/tailscale/cli/serve_test.go | 53 +++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 48 deletions(-) create mode 100644 cmd/tailscale/cli/serve.go create mode 100644 cmd/tailscale/cli/serve_test.go diff --git a/cmd/tailscale/cli/cli_test.go b/cmd/tailscale/cli/cli_test.go index f929f9688..57cd9303a 100644 --- a/cmd/tailscale/cli/cli_test.go +++ b/cmd/tailscale/cli/cli_test.go @@ -11,7 +11,6 @@ import ( "fmt" "net/netip" "reflect" - "runtime" "strings" "testing" @@ -1157,50 +1156,3 @@ func TestUpWorthWarning(t *testing.T) { t.Errorf("want false for other misc errors") } } - -func TestServeConfigMutations(t *testing.T) { - // Stateful mutations, starting from an empty config. - type step struct { - command []string // serve args - reset bool // if true, reset all ServeConfig state - want *ipn.ServeConfig - wantErr string - line int // line number of addStep call, for error messages - } - var steps []step - add := func(s step) { - _, _, s.line, _ = runtime.Caller(1) - steps = append(steps, s) - } - add(step{reset: true}) - add(step{ - want: nil, - }) - var current *ipn.ServeConfig - for i, st := range steps { - t.Logf("Executing step #%d (line %v) ... ", i, st.line) - if st.reset { - t.Logf("(resetting state)") - current = nil - } - newState, err := applyServeMutation(current, st.command) - var gotErr string - if err != nil { - gotErr = err.Error() - } - if gotErr != st.wantErr { - t.Fatalf("[%d] %v: got error %q, want %q", i, st.command, gotErr, st.wantErr) - } - if !reflect.DeepEqual(newState, st.want) { - t.Fatalf("[%d] %v: bad state. got:\n%s\n\nwant:\n%s\n", - i, st.command, asJSON(newState), asJSON(st.want)) - } - } -} - -func applyServeMutation(current *ipn.ServeConfig, command []string) (*ipn.ServeConfig, error) { - if len(command) == 0 { - return current, nil - } - panic("TODO") // in cli/serve.go, not here in tests -} diff --git a/cmd/tailscale/cli/serve.go b/cmd/tailscale/cli/serve.go new file mode 100644 index 000000000..ae9a6c8f1 --- /dev/null +++ b/cmd/tailscale/cli/serve.go @@ -0,0 +1,14 @@ +// Copyright (c) 2022 Tailscale Inc & AUTHORS All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cli + +import "tailscale.com/ipn" + +func applyServeMutation(current *ipn.ServeConfig, command []string) (*ipn.ServeConfig, error) { + if len(command) == 0 { + return current, nil + } + panic("TODO") +} diff --git a/cmd/tailscale/cli/serve_test.go b/cmd/tailscale/cli/serve_test.go new file mode 100644 index 000000000..220a0f76e --- /dev/null +++ b/cmd/tailscale/cli/serve_test.go @@ -0,0 +1,53 @@ +// Copyright (c) 2022 Tailscale Inc & AUTHORS All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cli + +import ( + "reflect" + "runtime" + "testing" + + "tailscale.com/ipn" +) + +func TestServeConfigMutations(t *testing.T) { + // Stateful mutations, starting from an empty config. + type step struct { + command []string // serve args + reset bool // if true, reset all ServeConfig state + want *ipn.ServeConfig + wantErr string + line int // line number of addStep call, for error messages + } + var steps []step + add := func(s step) { + _, _, s.line, _ = runtime.Caller(1) + steps = append(steps, s) + } + add(step{reset: true}) + add(step{ + want: nil, + }) + var current *ipn.ServeConfig + for i, st := range steps { + t.Logf("Executing step #%d (line %v) ... ", i, st.line) + if st.reset { + t.Logf("(resetting state)") + current = nil + } + newState, err := applyServeMutation(current, st.command) + var gotErr string + if err != nil { + gotErr = err.Error() + } + if gotErr != st.wantErr { + t.Fatalf("[%d] %v: got error %q, want %q", i, st.command, gotErr, st.wantErr) + } + if !reflect.DeepEqual(newState, st.want) { + t.Fatalf("[%d] %v: bad state. got:\n%s\n\nwant:\n%s\n", + i, st.command, asJSON(newState), asJSON(st.want)) + } + } +}