mirror of https://github.com/tailscale/tailscale/
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
2.6 KiB
Go
118 lines
2.6 KiB
Go
3 years ago
|
// Copyright (c) 2021 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 (
|
||
|
"flag"
|
||
|
"testing"
|
||
|
|
||
|
"tailscale.com/ipn"
|
||
|
)
|
||
|
|
||
|
// Test that checkForAccidentalSettingReverts's updateMaskedPrefsFromUpFlag can handle
|
||
|
// all flags. This will panic if a new flag creeps in that's unhandled.
|
||
|
func TestUpdateMaskedPrefsFromUpFlag(t *testing.T) {
|
||
|
mp := new(ipn.MaskedPrefs)
|
||
|
upFlagSet.VisitAll(func(f *flag.Flag) {
|
||
|
updateMaskedPrefsFromUpFlag(mp, f.Name)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func TestCheckForAccidentalSettingReverts(t *testing.T) {
|
||
|
f := func(flags ...string) map[string]bool {
|
||
|
m := make(map[string]bool)
|
||
|
for _, f := range flags {
|
||
|
m[f] = true
|
||
|
}
|
||
|
return m
|
||
|
}
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
flagSet map[string]bool
|
||
|
curPrefs *ipn.Prefs
|
||
|
mp *ipn.MaskedPrefs
|
||
|
want string
|
||
|
}{
|
||
|
{
|
||
|
name: "bare_up_means_up",
|
||
|
flagSet: f(),
|
||
|
curPrefs: &ipn.Prefs{
|
||
|
WantRunning: false,
|
||
|
Hostname: "foo",
|
||
|
},
|
||
|
mp: &ipn.MaskedPrefs{
|
||
|
Prefs: ipn.Prefs{
|
||
|
WantRunning: true,
|
||
|
},
|
||
|
WantRunningSet: true,
|
||
|
},
|
||
|
want: "",
|
||
|
},
|
||
|
{
|
||
|
name: "losing_hostname",
|
||
|
flagSet: f("accept-dns"),
|
||
|
curPrefs: &ipn.Prefs{
|
||
|
WantRunning: false,
|
||
|
Hostname: "foo",
|
||
|
CorpDNS: true,
|
||
|
},
|
||
|
mp: &ipn.MaskedPrefs{
|
||
|
Prefs: ipn.Prefs{
|
||
|
WantRunning: true,
|
||
|
CorpDNS: true,
|
||
|
},
|
||
|
WantRunningSet: true,
|
||
|
CorpDNSSet: true,
|
||
|
},
|
||
|
want: `'tailscale up' without --reset requires all preferences with changing values to be explicitly mentioned; --hostname is not specified but its default value of "" differs from current value "foo"`,
|
||
|
},
|
||
|
{
|
||
|
name: "hostname_changing_explicitly",
|
||
|
flagSet: f("hostname"),
|
||
|
curPrefs: &ipn.Prefs{
|
||
|
WantRunning: false,
|
||
|
Hostname: "foo",
|
||
|
},
|
||
|
mp: &ipn.MaskedPrefs{
|
||
|
Prefs: ipn.Prefs{
|
||
|
WantRunning: true,
|
||
|
Hostname: "bar",
|
||
|
},
|
||
|
WantRunningSet: true,
|
||
|
HostnameSet: true,
|
||
|
},
|
||
|
want: "",
|
||
|
},
|
||
|
{
|
||
|
name: "hostname_changing_empty_explicitly",
|
||
|
flagSet: f("hostname"),
|
||
|
curPrefs: &ipn.Prefs{
|
||
|
WantRunning: false,
|
||
|
Hostname: "foo",
|
||
|
},
|
||
|
mp: &ipn.MaskedPrefs{
|
||
|
Prefs: ipn.Prefs{
|
||
|
WantRunning: true,
|
||
|
Hostname: "",
|
||
|
},
|
||
|
WantRunningSet: true,
|
||
|
HostnameSet: true,
|
||
|
},
|
||
|
want: "",
|
||
|
},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
var got string
|
||
|
if err := checkForAccidentalSettingReverts(tt.flagSet, tt.curPrefs, tt.mp); err != nil {
|
||
|
got = err.Error()
|
||
|
}
|
||
|
if got != tt.want {
|
||
|
t.Errorf("unexpected result\n got: %s\nwant: %s\n", got, tt.want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|