mirror of
https://github.com/tailscale/tailscale.git
synced 2025-07-02 13:08:40 +00:00
cmd/tailscale/cli: fix ai comments and fix a test
Signed-off-by: KevinLiang10 <37811973+KevinLiang10@users.noreply.github.com>
This commit is contained in:
parent
b8f2e27675
commit
1ec61b9992
@ -558,15 +558,15 @@ func (e *serveEnv) handleTCPServe(ctx context.Context, srcType string, srcPort u
|
||||
|
||||
fwdAddr := "127.0.0.1:" + dstPortStr
|
||||
|
||||
if sc.IsServingWeb(srcPort, "") {
|
||||
return fmt.Errorf("cannot serve TCP; already serving web on %d", srcPort)
|
||||
}
|
||||
|
||||
dnsName, err := e.getSelfDNSName(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if sc.IsServingWeb(srcPort, dnsName) {
|
||||
return fmt.Errorf("cannot serve TCP; already serving web on %d", srcPort)
|
||||
}
|
||||
|
||||
sc.SetTCPForwarding(srcPort, fwdAddr, terminateTLS, dnsName)
|
||||
|
||||
if !reflect.DeepEqual(cursc, sc) {
|
||||
|
@ -47,7 +47,7 @@ type bgBoolFlag struct {
|
||||
SetByUser bool // tracks if the flag was set by the user
|
||||
}
|
||||
|
||||
// Set sets the boolean flag and wether it's explicitly set by user based on the string value.
|
||||
// Set sets the boolean flag and whether it's explicitly set by user based on the string value.
|
||||
func (b *bgBoolFlag) Set(s string) error {
|
||||
if s == "true" {
|
||||
b.Value = true
|
||||
@ -238,9 +238,11 @@ func (e *serveEnv) runServeCombined(subcmd serveMode) execFunc {
|
||||
}
|
||||
return e.lc.SetServeConfig(ctx, sc)
|
||||
}
|
||||
|
||||
if err := e.validateArgs(subcmd, args); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
ctx, cancel := signal.NotifyContext(ctx, os.Interrupt)
|
||||
defer cancel()
|
||||
|
||||
@ -265,7 +267,7 @@ func (e *serveEnv) runServeCombined(subcmd serveMode) execFunc {
|
||||
return fmt.Errorf("failed to clean the mount point: %w", err)
|
||||
}
|
||||
|
||||
srvType, srvPort, wasDefaultServe, err := srvTypeAndPortFromFlags(e)
|
||||
srvType, srvPort, isDefaultService, err := srvTypeAndPortFromFlags(e)
|
||||
if err != nil {
|
||||
fmt.Fprintf(e.stderr(), "error: %v\n\n", err)
|
||||
return errHelpFunc(subcmd)
|
||||
@ -313,7 +315,7 @@ func (e *serveEnv) runServeCombined(subcmd serveMode) execFunc {
|
||||
if forService {
|
||||
err = tailcfg.ServiceName(e.service).Validate()
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to parse service name: %w", err)
|
||||
return fmt.Errorf("invalid service name: %w", err)
|
||||
}
|
||||
dnsName = e.service
|
||||
}
|
||||
@ -348,7 +350,7 @@ func (e *serveEnv) runServeCombined(subcmd serveMode) execFunc {
|
||||
}
|
||||
|
||||
var msg string
|
||||
if turnOff && !wasDefaultServe {
|
||||
if turnOff && !isDefaultService {
|
||||
// only unset serve when trying to unset with type and port flags.
|
||||
err = e.unsetServe(sc, st, dnsName, srvType, srvPort, mount)
|
||||
} else {
|
||||
@ -511,7 +513,7 @@ var (
|
||||
msgServeAvailable = "Available within your tailnet:"
|
||||
msgServiceIPNotAssigned = "This service doesn't have VIPs assigned yet, once VIP is assigned, it will be available in your Tailnet as:"
|
||||
msgRunningInBackground = "%s started and running in the background."
|
||||
msgRunningTunServie = "IPv4 and IPv6 traffic to %s is being routed to your operating system."
|
||||
msgRunningTunService = "IPv4 and IPv6 traffic to %s is being routed to your operating system."
|
||||
msgDisableProxy = "To disable the proxy, run: tailscale %s --%s=%d off"
|
||||
msgDisableServiceProxy = "To disable the proxy, run: tailscale serve --service=%s --%s=%d off"
|
||||
msgDisableServiceTun = "To disable the service in TUN mode, run: tailscale serve --service=%s --tun off"
|
||||
@ -571,7 +573,7 @@ func (e *serveEnv) messageForPort(sc *ipn.ServeConfig, st *ipnstate.Status, dnsN
|
||||
output.WriteString("\n\n")
|
||||
svc := sc.FindServiceConfig(svcName)
|
||||
if srvType == serveTypeTun && svc.Tun {
|
||||
output.WriteString(fmt.Sprintf(msgRunningTunServie, host))
|
||||
output.WriteString(fmt.Sprintf(msgRunningTunService, host))
|
||||
output.WriteString("\n")
|
||||
output.WriteString(fmt.Sprintf(msgDisableServiceTun, dnsName))
|
||||
output.WriteString("\n")
|
||||
@ -762,7 +764,7 @@ func (e *serveEnv) unsetServe(sc *ipn.ServeConfig, st *ipnstate.Status, dnsName
|
||||
return nil
|
||||
}
|
||||
|
||||
func srvTypeAndPortFromFlags(e *serveEnv) (srvType serveType, srvPort uint16, wasDefault bool, err error) {
|
||||
func srvTypeAndPortFromFlags(e *serveEnv) (srvType serveType, srvPort uint16, isDefaultService bool, err error) {
|
||||
sourceMap := map[serveType]uint{
|
||||
serveTypeHTTP: e.http,
|
||||
serveTypeHTTPS: e.https,
|
||||
@ -771,6 +773,7 @@ func srvTypeAndPortFromFlags(e *serveEnv) (srvType serveType, srvPort uint16, wa
|
||||
}
|
||||
|
||||
var srcTypeCount int
|
||||
var defaultFlags bool
|
||||
|
||||
for k, v := range sourceMap {
|
||||
if v != 0 {
|
||||
@ -780,14 +783,14 @@ func srvTypeAndPortFromFlags(e *serveEnv) (srvType serveType, srvPort uint16, wa
|
||||
srcTypeCount++
|
||||
srvType = k
|
||||
srvPort = uint16(v)
|
||||
wasDefault = false
|
||||
defaultFlags = false
|
||||
}
|
||||
}
|
||||
|
||||
if e.tun {
|
||||
srcTypeCount++
|
||||
srvType = serveTypeTun
|
||||
wasDefault = false
|
||||
defaultFlags = false
|
||||
}
|
||||
|
||||
if srcTypeCount > 1 {
|
||||
@ -795,10 +798,9 @@ func srvTypeAndPortFromFlags(e *serveEnv) (srvType serveType, srvPort uint16, wa
|
||||
} else if srcTypeCount == 0 {
|
||||
srvType = serveTypeHTTPS
|
||||
srvPort = 443
|
||||
wasDefault = true
|
||||
defaultFlags = true
|
||||
}
|
||||
|
||||
return srvType, srvPort, wasDefault, nil
|
||||
return srvType, srvPort, defaultFlags && e.service != "", nil
|
||||
}
|
||||
|
||||
// isLegacyInvocation helps transition customers who have been using the beta
|
||||
@ -912,7 +914,7 @@ func (e *serveEnv) removeWebServe(sc *ipn.ServeConfig, st *ipnstate.Status, dnsN
|
||||
dnsNameForService := svcName.WithoutPrefix() + "." + st.CurrentTailnet.MagicDNSSuffix
|
||||
hp = ipn.HostPort(net.JoinHostPort(dnsNameForService, portStr))
|
||||
if svc, ok := sc.Services[svcName]; !ok || svc == nil {
|
||||
return errors.New("error: service does not exist")
|
||||
return errors.New("service does not exist")
|
||||
} else {
|
||||
webServeMap = svc.Web
|
||||
}
|
||||
@ -941,7 +943,7 @@ func (e *serveEnv) removeWebServe(sc *ipn.ServeConfig, st *ipnstate.Status, dnsN
|
||||
}
|
||||
|
||||
if !targetExists {
|
||||
return errors.New("error: handler does not exist")
|
||||
return errors.New("handler does not exist")
|
||||
}
|
||||
|
||||
if len(mounts) > 1 {
|
||||
@ -966,7 +968,7 @@ func (e *serveEnv) removeTCPServe(sc *ipn.ServeConfig, dnsName string, src uint1
|
||||
return nil
|
||||
}
|
||||
if sc.GetTCPPortHandler(src, dnsName) == nil {
|
||||
return errors.New("error: serve config does not exist")
|
||||
return errors.New("serve config does not exist")
|
||||
}
|
||||
if sc.IsServingWeb(src, dnsName) {
|
||||
return fmt.Errorf("unable to remove; serving web, not TCP forwarding on serve port %d", src)
|
||||
@ -982,10 +984,10 @@ func (e *serveEnv) removeTunServe(sc *ipn.ServeConfig, dnsName string) error {
|
||||
svcName := tailcfg.ServiceName(dnsName)
|
||||
svc, ok := sc.Services[svcName]
|
||||
if !ok || svc == nil {
|
||||
return errors.New("error: service does not exist")
|
||||
return errors.New("service does not exist")
|
||||
}
|
||||
if !svc.Tun {
|
||||
return errors.New("error: service is not being served in TUN mode")
|
||||
return errors.New("service is not being served in TUN mode")
|
||||
}
|
||||
delete(sc.Services, svcName)
|
||||
if len(sc.Services) == 0 {
|
||||
|
@ -553,7 +553,7 @@ func TestServeDevConfigMutations(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
{ // error here
|
||||
name: "combos",
|
||||
steps: []step{
|
||||
{
|
||||
@ -1063,65 +1063,73 @@ func TestValidateConfig(t *testing.T) {
|
||||
|
||||
func TestSrcTypeFromFlags(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
env *serveEnv
|
||||
expectedType serveType
|
||||
expectedPort uint16
|
||||
expectedErr bool
|
||||
expectedWasDefault bool
|
||||
name string
|
||||
env *serveEnv
|
||||
expectedType serveType
|
||||
expectedPort uint16
|
||||
expectedErr bool
|
||||
expectedIsDefaultService bool
|
||||
}{
|
||||
{
|
||||
name: "only http set",
|
||||
env: &serveEnv{http: 80},
|
||||
expectedType: serveTypeHTTP,
|
||||
expectedPort: 80,
|
||||
expectedErr: false,
|
||||
expectedWasDefault: false,
|
||||
name: "only http set",
|
||||
env: &serveEnv{http: 80},
|
||||
expectedType: serveTypeHTTP,
|
||||
expectedPort: 80,
|
||||
expectedErr: false,
|
||||
expectedIsDefaultService: false,
|
||||
},
|
||||
{
|
||||
name: "only https set",
|
||||
env: &serveEnv{https: 10000},
|
||||
expectedType: serveTypeHTTPS,
|
||||
expectedPort: 10000,
|
||||
expectedErr: false,
|
||||
expectedWasDefault: false,
|
||||
name: "only https set",
|
||||
env: &serveEnv{https: 10000},
|
||||
expectedType: serveTypeHTTPS,
|
||||
expectedPort: 10000,
|
||||
expectedErr: false,
|
||||
expectedIsDefaultService: false,
|
||||
},
|
||||
{
|
||||
name: "only tcp set",
|
||||
env: &serveEnv{tcp: 8000},
|
||||
expectedType: serveTypeTCP,
|
||||
expectedPort: 8000,
|
||||
expectedErr: false,
|
||||
expectedWasDefault: false,
|
||||
name: "only tcp set",
|
||||
env: &serveEnv{tcp: 8000},
|
||||
expectedType: serveTypeTCP,
|
||||
expectedPort: 8000,
|
||||
expectedErr: false,
|
||||
expectedIsDefaultService: false,
|
||||
},
|
||||
{
|
||||
name: "only tls-terminated-tcp set",
|
||||
env: &serveEnv{tlsTerminatedTCP: 8080},
|
||||
expectedType: serveTypeTLSTerminatedTCP,
|
||||
expectedPort: 8080,
|
||||
expectedErr: false,
|
||||
expectedWasDefault: false,
|
||||
name: "only tls-terminated-tcp set",
|
||||
env: &serveEnv{tlsTerminatedTCP: 8080},
|
||||
expectedType: serveTypeTLSTerminatedTCP,
|
||||
expectedPort: 8080,
|
||||
expectedErr: false,
|
||||
expectedIsDefaultService: false,
|
||||
},
|
||||
{
|
||||
name: "defaults to https, port 443",
|
||||
env: &serveEnv{},
|
||||
expectedType: serveTypeHTTPS,
|
||||
expectedPort: 443,
|
||||
expectedErr: false,
|
||||
expectedWasDefault: true,
|
||||
name: "defaults to https, port 443",
|
||||
env: &serveEnv{},
|
||||
expectedType: serveTypeHTTPS,
|
||||
expectedPort: 443,
|
||||
expectedErr: false,
|
||||
expectedIsDefaultService: false,
|
||||
},
|
||||
{
|
||||
name: "multiple types set",
|
||||
env: &serveEnv{http: 80, https: 443},
|
||||
expectedPort: 0,
|
||||
expectedErr: true,
|
||||
expectedWasDefault: false,
|
||||
name: "defaults to https, port 443 for service",
|
||||
env: &serveEnv{service: "svc:foo"},
|
||||
expectedType: serveTypeHTTPS,
|
||||
expectedPort: 443,
|
||||
expectedErr: false,
|
||||
expectedIsDefaultService: true,
|
||||
},
|
||||
{
|
||||
name: "multiple types set",
|
||||
env: &serveEnv{http: 80, https: 443},
|
||||
expectedPort: 0,
|
||||
expectedErr: true,
|
||||
expectedIsDefaultService: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
srcType, srcPort, explicitSet, err := srvTypeAndPortFromFlags(tt.env)
|
||||
srcType, srcPort, isDefaultService, err := srvTypeAndPortFromFlags(tt.env)
|
||||
if (err != nil) != tt.expectedErr {
|
||||
t.Errorf("Expected error: %v, got: %v", tt.expectedErr, err)
|
||||
}
|
||||
@ -1131,8 +1139,8 @@ func TestSrcTypeFromFlags(t *testing.T) {
|
||||
if srcPort != tt.expectedPort {
|
||||
t.Errorf("Expected srcPort: %d, got: %d", tt.expectedPort, srcPort)
|
||||
}
|
||||
if explicitSet != tt.expectedWasDefault {
|
||||
t.Errorf("Expected defaultFlag: %v, got: %v", tt.expectedWasDefault, explicitSet)
|
||||
if isDefaultService != tt.expectedIsDefaultService {
|
||||
t.Errorf("Expected defaultFlag: %v, got: %v", tt.expectedIsDefaultService, isDefaultService)
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -1445,7 +1453,7 @@ func TestMessageForPort(t *testing.T) {
|
||||
expected: strings.Join([]string{
|
||||
msgServeAvailable,
|
||||
"",
|
||||
fmt.Sprintf(msgRunningTunServie, "foo.test.ts.net"),
|
||||
fmt.Sprintf(msgRunningTunService, "foo.test.ts.net"),
|
||||
fmt.Sprintf(msgDisableServiceTun, "svc:foo"),
|
||||
fmt.Sprintf(msgDisableService, "svc:foo"),
|
||||
}, "\n"),
|
||||
@ -1786,7 +1794,6 @@ func TestSetServe(t *testing.T) {
|
||||
t.Fatalf("got no error; expected error.")
|
||||
}
|
||||
if !tt.expectErr && !reflect.DeepEqual(tt.cfg, tt.expected) {
|
||||
t.Logf("got: %v", tt.cfg.Services["svc:bar"].TCP[80])
|
||||
t.Fatalf("got: %v; expected: %v", tt.cfg, tt.expected)
|
||||
}
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user