Expose the MaskTokens function so other test code can use it.

This is just a small helper to make test output more readable.

Signed-off-by: Matt Moyer <moyerm@vmware.com>
This commit is contained in:
Matt Moyer 2020-12-02 15:43:17 -06:00
parent 273ac62ec2
commit 0ccf14801e
No known key found for this signature in database
GPG Key ID: EAE88AD172C5AE2D

View File

@ -7,6 +7,7 @@ import (
"fmt" "fmt"
"io" "io"
"regexp" "regexp"
"strings"
"testing" "testing"
) )
@ -26,18 +27,22 @@ func (l *testlogReader) Read(p []byte) (n int, err error) {
l.t.Helper() l.t.Helper()
n, err = l.r.Read(p) n, err = l.r.Read(p)
if err != nil { if err != nil {
l.t.Logf("%s > %q: %v", l.name, maskTokens(p[0:n]), err) l.t.Logf("%s > %q: %v", l.name, MaskTokens(string(p[0:n])), err)
} else { } else {
l.t.Logf("%s > %q", l.name, maskTokens(p[0:n])) l.t.Logf("%s > %q", l.name, MaskTokens(string(p[0:n])))
} }
return return
} }
//nolint: gochecknoglobals // MaskTokens makes a best-effort attempt to mask out things that look like secret tokens in test output.
var tokenLike = regexp.MustCompile(`(?mi)[a-zA-Z0-9._-]{30,}|[a-zA-Z0-9]{20,}`) // The goal is more to have readable test output than for any security reason.
func MaskTokens(in string) string {
func maskTokens(in []byte) string { var tokenLike = regexp.MustCompile(`(?mi)[a-zA-Z0-9._-]{30,}|[a-zA-Z0-9]{20,}`)
return tokenLike.ReplaceAllStringFunc(string(in), func(t string) string { return tokenLike.ReplaceAllStringFunc(in, func(t string) string {
// This is a silly heuristic, but things with multiple dots are more likely hostnames that we don't want masked.
if strings.Count(t, ".") >= 4 {
return t
}
return fmt.Sprintf("[...%d bytes...]", len(t)) return fmt.Sprintf("[...%d bytes...]", len(t))
}) })
} }