github.com/awesome-flow/flow@v0.0.3-0.20190918184116-508d75d68a2c/pkg/corev1alpha1/logger_test.go (about)

     1  package corev1alpha1
     2  
     3  import (
     4  	"bufio"
     5  	"bytes"
     6  	"fmt"
     7  	"math/rand"
     8  	"strings"
     9  	"testing"
    10  	"time"
    11  
    12  	testutil "github.com/awesome-flow/flow/pkg/util/test"
    13  )
    14  
    15  func TestLogger(t *testing.T) {
    16  	out := new(bytes.Buffer)
    17  	l := NewLogger(out)
    18  	if err := l.Start(); err != nil {
    19  		t.Fatalf("failed to start logger")
    20  	}
    21  	sever := []LogSev{
    22  		LogSevDebug,
    23  		LogSevTrace,
    24  		LogSevInfo,
    25  		LogSevWarn,
    26  		LogSevError,
    27  	}
    28  	funcs := map[LogSev]func(string, ...interface{}){
    29  		LogSevDebug: l.Debug,
    30  		LogSevTrace: l.Trace,
    31  		LogSevInfo:  l.Info,
    32  		LogSevWarn:  l.Warn,
    33  		LogSevError: l.Error,
    34  	}
    35  	res := make([]string, 0, 1024)
    36  	rand.Seed(time.Now().UnixNano())
    37  
    38  	for i := 0; i < cap(res); i++ {
    39  		ix := rand.Intn(len(sever))
    40  		logmsg := testutil.RandBytes(testutil.RandInt(1024))
    41  		res = append(res, fmt.Sprintf("%s\t%s", LogSevLex[sever[ix]], logmsg))
    42  		funcs[sever[ix]](string(logmsg))
    43  	}
    44  
    45  	if err := l.Stop(); err != nil {
    46  		t.Fatalf("failed to stop logger: %s", err)
    47  	}
    48  
    49  	scanner := bufio.NewScanner(bytes.NewReader(out.Bytes()))
    50  
    51  	ix := 0
    52  	for scanner.Scan() {
    53  		logline := scanner.Text()
    54  		if !strings.HasSuffix(logline, res[ix]) {
    55  			t.Fatalf("logline %q is expected to contain suffix %q", logline, res[ix])
    56  		}
    57  		ix++
    58  	}
    59  	if err := scanner.Err(); err != nil {
    60  		t.Fatalf("scanner returned an error: %s", err)
    61  	}
    62  	if ix != len(res) {
    63  		t.Fatalf("output is incomplete: got: %d lines, want: %d lines", ix, len(res))
    64  	}
    65  }