mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-18 02:48:40 +00:00
util/testenv: add new package to hold InTest
Removes duplicated code. Updates #cleanup Signed-off-by: Maisem Ali <maisem@tailscale.com>
This commit is contained in:
parent
3e255d76e1
commit
682fd72f7b
@ -12,6 +12,8 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"tailscale.com/util/testenv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -56,7 +58,7 @@ func presentRiskToUser(riskType, riskMessage, acceptedRisks string) error {
|
|||||||
if isRiskAccepted(riskType, acceptedRisks) {
|
if isRiskAccepted(riskType, acceptedRisks) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if inTest() {
|
if testenv.InTest() {
|
||||||
return errAborted
|
return errAborted
|
||||||
}
|
}
|
||||||
outln(riskMessage)
|
outln(riskMessage)
|
||||||
|
@ -91,8 +91,6 @@ func acceptRouteDefault(goos string) bool {
|
|||||||
|
|
||||||
var upFlagSet = newUpFlagSet(effectiveGOOS(), &upArgsGlobal, "up")
|
var upFlagSet = newUpFlagSet(effectiveGOOS(), &upArgsGlobal, "up")
|
||||||
|
|
||||||
func inTest() bool { return flag.Lookup("test.v") != nil }
|
|
||||||
|
|
||||||
// newUpFlagSet returns a new flag set for the "up" and "login" commands.
|
// newUpFlagSet returns a new flag set for the "up" and "login" commands.
|
||||||
func newUpFlagSet(goos string, upArgs *upArgsT, cmd string) *flag.FlagSet {
|
func newUpFlagSet(goos string, upArgs *upArgsT, cmd string) *flag.FlagSet {
|
||||||
if cmd != "up" && cmd != "login" {
|
if cmd != "up" && cmd != "login" {
|
||||||
|
@ -145,6 +145,7 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep
|
|||||||
tailscale.com/util/set from tailscale.com/health+
|
tailscale.com/util/set from tailscale.com/health+
|
||||||
tailscale.com/util/singleflight from tailscale.com/net/dnscache
|
tailscale.com/util/singleflight from tailscale.com/net/dnscache
|
||||||
tailscale.com/util/slicesx from tailscale.com/net/dnscache+
|
tailscale.com/util/slicesx from tailscale.com/net/dnscache+
|
||||||
|
tailscale.com/util/testenv from tailscale.com/cmd/tailscale/cli
|
||||||
💣 tailscale.com/util/winutil from tailscale.com/hostinfo+
|
💣 tailscale.com/util/winutil from tailscale.com/hostinfo+
|
||||||
W 💣 tailscale.com/util/winutil/authenticode from tailscale.com/cmd/tailscale/cli
|
W 💣 tailscale.com/util/winutil/authenticode from tailscale.com/cmd/tailscale/cli
|
||||||
tailscale.com/version from tailscale.com/cmd/tailscale/cli+
|
tailscale.com/version from tailscale.com/cmd/tailscale/cli+
|
||||||
|
@ -343,6 +343,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
|
|||||||
tailscale.com/util/slicesx from tailscale.com/net/dnscache+
|
tailscale.com/util/slicesx from tailscale.com/net/dnscache+
|
||||||
tailscale.com/util/sysresources from tailscale.com/wgengine/magicsock
|
tailscale.com/util/sysresources from tailscale.com/wgengine/magicsock
|
||||||
tailscale.com/util/systemd from tailscale.com/control/controlclient+
|
tailscale.com/util/systemd from tailscale.com/control/controlclient+
|
||||||
|
tailscale.com/util/testenv from tailscale.com/ipn/ipnlocal+
|
||||||
tailscale.com/util/uniq from tailscale.com/wgengine/magicsock+
|
tailscale.com/util/uniq from tailscale.com/wgengine/magicsock+
|
||||||
💣 tailscale.com/util/winutil from tailscale.com/control/controlclient+
|
💣 tailscale.com/util/winutil from tailscale.com/control/controlclient+
|
||||||
W 💣 tailscale.com/util/winutil/authenticode from tailscale.com/util/osdiag
|
W 💣 tailscale.com/util/winutil/authenticode from tailscale.com/util/osdiag
|
||||||
|
@ -8,7 +8,6 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
@ -65,7 +64,6 @@ import (
|
|||||||
"tailscale.com/types/dnstype"
|
"tailscale.com/types/dnstype"
|
||||||
"tailscale.com/types/empty"
|
"tailscale.com/types/empty"
|
||||||
"tailscale.com/types/key"
|
"tailscale.com/types/key"
|
||||||
"tailscale.com/types/lazy"
|
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
"tailscale.com/types/logid"
|
"tailscale.com/types/logid"
|
||||||
"tailscale.com/types/netmap"
|
"tailscale.com/types/netmap"
|
||||||
@ -81,6 +79,7 @@ import (
|
|||||||
"tailscale.com/util/osshare"
|
"tailscale.com/util/osshare"
|
||||||
"tailscale.com/util/set"
|
"tailscale.com/util/set"
|
||||||
"tailscale.com/util/systemd"
|
"tailscale.com/util/systemd"
|
||||||
|
"tailscale.com/util/testenv"
|
||||||
"tailscale.com/util/uniq"
|
"tailscale.com/util/uniq"
|
||||||
"tailscale.com/version"
|
"tailscale.com/version"
|
||||||
"tailscale.com/version/distro"
|
"tailscale.com/version/distro"
|
||||||
@ -93,14 +92,6 @@ import (
|
|||||||
"tailscale.com/wgengine/wgcfg/nmcfg"
|
"tailscale.com/wgengine/wgcfg/nmcfg"
|
||||||
)
|
)
|
||||||
|
|
||||||
var lazyInTest lazy.SyncValue[bool]
|
|
||||||
|
|
||||||
func inTest() bool {
|
|
||||||
return lazyInTest.Get(func() bool {
|
|
||||||
return flag.Lookup("test.v") != nil
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var controlDebugFlags = getControlDebugFlags()
|
var controlDebugFlags = getControlDebugFlags()
|
||||||
|
|
||||||
func getControlDebugFlags() []string {
|
func getControlDebugFlags() []string {
|
||||||
@ -506,7 +497,7 @@ func (b *LocalBackend) maybePauseControlClientLocked() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
networkUp := b.prevIfState.AnyInterfaceUp()
|
networkUp := b.prevIfState.AnyInterfaceUp()
|
||||||
b.cc.SetPaused((b.state == ipn.Stopped && b.netMap != nil) || (!networkUp && !inTest()))
|
b.cc.SetPaused((b.state == ipn.Stopped && b.netMap != nil) || (!networkUp && !testenv.InTest()))
|
||||||
}
|
}
|
||||||
|
|
||||||
// linkChange is our network monitor callback, called whenever the network changes.
|
// linkChange is our network monitor callback, called whenever the network changes.
|
||||||
|
@ -13,7 +13,6 @@ import (
|
|||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
@ -49,13 +48,12 @@ import (
|
|||||||
"tailscale.com/util/clientmetric"
|
"tailscale.com/util/clientmetric"
|
||||||
"tailscale.com/util/must"
|
"tailscale.com/util/must"
|
||||||
"tailscale.com/util/racebuild"
|
"tailscale.com/util/racebuild"
|
||||||
|
"tailscale.com/util/testenv"
|
||||||
"tailscale.com/util/winutil"
|
"tailscale.com/util/winutil"
|
||||||
"tailscale.com/version"
|
"tailscale.com/version"
|
||||||
"tailscale.com/version/distro"
|
"tailscale.com/version/distro"
|
||||||
)
|
)
|
||||||
|
|
||||||
func inTest() bool { return flag.Lookup("test.v") != nil }
|
|
||||||
|
|
||||||
var getLogTargetOnce struct {
|
var getLogTargetOnce struct {
|
||||||
sync.Once
|
sync.Once
|
||||||
v string // URL of logs server, or empty for default
|
v string // URL of logs server, or empty for default
|
||||||
@ -576,7 +574,7 @@ func NewWithConfigPath(collection, dir, cmdName string, netMon *netmon.Monitor,
|
|||||||
conf.IncludeProcSequence = true
|
conf.IncludeProcSequence = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if envknob.NoLogsNoSupport() || inTest() {
|
if envknob.NoLogsNoSupport() || testenv.InTest() {
|
||||||
logf("You have disabled logging. Tailscale will not be able to provide support.")
|
logf("You have disabled logging. Tailscale will not be able to provide support.")
|
||||||
conf.HTTPC = &http.Client{Transport: noopPretendSuccessTransport{}}
|
conf.HTTPC = &http.Client{Transport: noopPretendSuccessTransport{}}
|
||||||
} else if val := getLogTarget(); val != "" {
|
} else if val := getLogTarget(); val != "" {
|
||||||
@ -756,7 +754,7 @@ func dialContext(ctx context.Context, netw, addr string, netMon *netmon.Monitor,
|
|||||||
// The logf parameter is optional; if non-nil, logs are printed using the
|
// The logf parameter is optional; if non-nil, logs are printed using the
|
||||||
// provided function; if nil, log.Printf will be used instead.
|
// provided function; if nil, log.Printf will be used instead.
|
||||||
func NewLogtailTransport(host string, netMon *netmon.Monitor, logf logger.Logf) http.RoundTripper {
|
func NewLogtailTransport(host string, netMon *netmon.Monitor, logf logger.Logf) http.RoundTripper {
|
||||||
if inTest() {
|
if testenv.InTest() {
|
||||||
return noopPretendSuccessTransport{}
|
return noopPretendSuccessTransport{}
|
||||||
}
|
}
|
||||||
// Start with a copy of http.DefaultTransport and tweak it a bit.
|
// Start with a copy of http.DefaultTransport and tweak it a bit.
|
||||||
|
@ -12,7 +12,6 @@ import (
|
|||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"errors"
|
"errors"
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
@ -53,12 +52,11 @@ import (
|
|||||||
"tailscale.com/types/logid"
|
"tailscale.com/types/logid"
|
||||||
"tailscale.com/types/nettype"
|
"tailscale.com/types/nettype"
|
||||||
"tailscale.com/util/mak"
|
"tailscale.com/util/mak"
|
||||||
|
"tailscale.com/util/testenv"
|
||||||
"tailscale.com/wgengine"
|
"tailscale.com/wgengine"
|
||||||
"tailscale.com/wgengine/netstack"
|
"tailscale.com/wgengine/netstack"
|
||||||
)
|
)
|
||||||
|
|
||||||
func inTest() bool { return flag.Lookup("test.v") != nil }
|
|
||||||
|
|
||||||
// Server is an embedded Tailscale server.
|
// Server is an embedded Tailscale server.
|
||||||
//
|
//
|
||||||
// Its exported fields may be changed until the first method call.
|
// Its exported fields may be changed until the first method call.
|
||||||
@ -605,7 +603,7 @@ func (s *Server) start() (reterr error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) startLogger(closePool *closeOnErrorPool) error {
|
func (s *Server) startLogger(closePool *closeOnErrorPool) error {
|
||||||
if inTest() {
|
if testenv.InTest() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
cfgPath := filepath.Join(s.rootPath, "tailscaled.log.conf")
|
cfgPath := filepath.Join(s.rootPath, "tailscaled.log.conf")
|
||||||
|
@ -15,8 +15,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type DepChecker struct {
|
type DepChecker struct {
|
||||||
GOOS string
|
GOOS string // optional
|
||||||
GOARCH string
|
GOARCH string // optional
|
||||||
BadDeps map[string]string // package => why
|
BadDeps map[string]string // package => why
|
||||||
}
|
}
|
||||||
|
|
||||||
|
21
util/testenv/testenv.go
Normal file
21
util/testenv/testenv.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
// Package testenv provides utility functions for tests. It does not depend on
|
||||||
|
// the `testing` package to allow usage in non-test code.
|
||||||
|
package testenv
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
|
||||||
|
"tailscale.com/types/lazy"
|
||||||
|
)
|
||||||
|
|
||||||
|
var lazyInTest lazy.SyncValue[bool]
|
||||||
|
|
||||||
|
// InTest reports whether the current binary is a test binary.
|
||||||
|
func InTest() bool {
|
||||||
|
return lazyInTest.Get(func() bool {
|
||||||
|
return flag.Lookup("test.v") != nil
|
||||||
|
})
|
||||||
|
}
|
18
util/testenv/testenv_test.go
Normal file
18
util/testenv/testenv_test.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
package testenv
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"tailscale.com/tstest/deptest"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestDeps(t *testing.T) {
|
||||||
|
deptest.DepChecker{
|
||||||
|
BadDeps: map[string]string{
|
||||||
|
"testing": "see pkg docs",
|
||||||
|
},
|
||||||
|
}.Check(t)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user