mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-16 11:41:39 +00:00
ipn: close logger at the end of TestLocalLogLines
If any goroutine continues to use the logger in TestLocalLogLines after the test finishes, the test panics. The culprit for this was wireguard-go; the previous commit fixed that. This commit adds suspenders: When the test is done, make logging calls into no-ops. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:
parent
1e4604f60e
commit
18471a8792
@ -26,6 +26,7 @@ func TestLocalLogLines(t *testing.T) {
|
|||||||
"[v1] peer keys: %s",
|
"[v1] peer keys: %s",
|
||||||
"[v1] v%v peers: %v",
|
"[v1] v%v peers: %v",
|
||||||
})
|
})
|
||||||
|
defer logListen.Close()
|
||||||
|
|
||||||
logid := func(hex byte) logtail.PublicID {
|
logid := func(hex byte) logtail.PublicID {
|
||||||
var ret logtail.PublicID
|
var ret logtail.PublicID
|
||||||
|
@ -75,13 +75,18 @@ type LogLineTracker struct {
|
|||||||
logf logger.Logf
|
logf logger.Logf
|
||||||
listenFor []string
|
listenFor []string
|
||||||
|
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
seen map[string]bool // format string => false (if not yet seen but wanted) or true (once seen)
|
closed bool
|
||||||
|
seen map[string]bool // format string => false (if not yet seen but wanted) or true (once seen)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logf logs to its underlying logger and also tracks that the given format pattern has been seen.
|
// Logf logs to its underlying logger and also tracks that the given format pattern has been seen.
|
||||||
func (lt *LogLineTracker) Logf(format string, args ...interface{}) {
|
func (lt *LogLineTracker) Logf(format string, args ...interface{}) {
|
||||||
lt.mu.Lock()
|
lt.mu.Lock()
|
||||||
|
if lt.closed {
|
||||||
|
lt.mu.Unlock()
|
||||||
|
return
|
||||||
|
}
|
||||||
if v, ok := lt.seen[format]; ok && !v {
|
if v, ok := lt.seen[format]; ok && !v {
|
||||||
lt.seen[format] = true
|
lt.seen[format] = true
|
||||||
}
|
}
|
||||||
@ -101,3 +106,10 @@ func (lt *LogLineTracker) Check() []string {
|
|||||||
}
|
}
|
||||||
return notSeen
|
return notSeen
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close closes lt. After calling Close, calls to Logf become no-ops.
|
||||||
|
func (lt *LogLineTracker) Close() {
|
||||||
|
lt.mu.Lock()
|
||||||
|
defer lt.mu.Unlock()
|
||||||
|
lt.closed = true
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user