gitlab.com/jfprevost/gitlab-runner-notlscheck@v11.11.4+incompatible/common/build_logger_test.go (about) 1 package common 2 3 import ( 4 "bytes" 5 "context" 6 "testing" 7 8 "github.com/sirupsen/logrus" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 type fakeJobTrace struct { 13 buffer *bytes.Buffer 14 } 15 16 func (fjt *fakeJobTrace) Success() {} 17 func (fjt *fakeJobTrace) Fail(err error, failureReason JobFailureReason) {} 18 func (fjt *fakeJobTrace) SetCancelFunc(cancelFunc context.CancelFunc) {} 19 func (fjt *fakeJobTrace) SetFailuresCollector(fc FailuresCollector) {} 20 func (fjt *fakeJobTrace) SetMasked(masked []string) {} 21 func (fjt *fakeJobTrace) IsStdout() bool { return false } 22 23 func (fjt *fakeJobTrace) Write(p []byte) (n int, err error) { 24 return fjt.buffer.Write(p) 25 } 26 27 func (fjt *fakeJobTrace) Read() string { 28 return fjt.buffer.String() 29 } 30 31 func newFakeJobTrace() *fakeJobTrace { 32 fjt := &fakeJobTrace{ 33 buffer: bytes.NewBuffer([]byte{}), 34 } 35 36 return fjt 37 } 38 39 func newBuildLogger(testName string, jt JobTrace) BuildLogger { 40 return BuildLogger{ 41 log: jt, 42 entry: logrus.WithField("test", testName), 43 } 44 } 45 46 func runOnHijackedLogrusOutput(t *testing.T, handler func(t *testing.T, output *bytes.Buffer)) { 47 oldOutput := logrus.StandardLogger().Out 48 defer func() { logrus.StandardLogger().Out = oldOutput }() 49 50 buf := bytes.NewBuffer([]byte{}) 51 logrus.StandardLogger().Out = buf 52 53 handler(t, buf) 54 } 55 56 func TestLogLineWithoutSecret(t *testing.T) { 57 runOnHijackedLogrusOutput(t, func(t *testing.T, output *bytes.Buffer) { 58 jt := newFakeJobTrace() 59 l := newBuildLogger("log-line-without-secret", jt) 60 61 l.Errorln("Fatal: Get http://localhost/?id=123") 62 assert.Contains(t, jt.Read(), `Get http://localhost/?id=123`) 63 assert.Contains(t, output.String(), `Get http://localhost/?id=123`) 64 }) 65 } 66 67 func TestLogLineWithSecret(t *testing.T) { 68 runOnHijackedLogrusOutput(t, func(t *testing.T, output *bytes.Buffer) { 69 jt := newFakeJobTrace() 70 l := newBuildLogger("log-line-with-secret", jt) 71 72 l.Errorln("Get http://localhost/?id=123&X-Amz-Signature=abcd1234&private_token=abcd1234") 73 assert.Contains(t, jt.Read(), `Get http://localhost/?id=123&X-Amz-Signature=[FILTERED]&private_token=[FILTERED]`) 74 assert.Contains(t, output.String(), `Get http://localhost/?id=123&X-Amz-Signature=abcd1234&private_token=abcd1234`) 75 }) 76 }