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  }