github.com/qlik-oss/gopherciser@v0.18.6/logger/tsvwriter_test.go (about)

     1  package logger
     2  
     3  import (
     4  	"bytes"
     5  	"strings"
     6  	"testing"
     7  )
     8  
     9  func TestTSVWriter(t *testing.T) {
    10  	t.Parallel()
    11  
    12  	buf := bytes.NewBufferString("")
    13  
    14  	header := []string{
    15  		FieldLevel,
    16  		FieldAuthUser,
    17  		FieldAction,
    18  		FieldDetails,
    19  		FieldErrors,
    20  		FieldSuccess,
    21  	}
    22  
    23  	isClosed := false
    24  	tsvLogger, errTSVLogger := CreateTSVLogger(header, buf, func() error {
    25  		isClosed = true
    26  		return nil
    27  	})
    28  	if errTSVLogger != nil {
    29  		t.Fatal("Failed to create TSV Logger")
    30  	}
    31  
    32  	// Test header
    33  	expectedString := strings.Join(header, "\t") + "\n"
    34  	verifyString(t, buf.String(), expectedString)
    35  
    36  	// Set info level
    37  	tsvLogger.Writer.Level(InfoLevel)
    38  
    39  	// Test rows
    40  	buf.Reset()
    41  	msg := &LogChanMsg{
    42  		message{
    43  			Level: InfoLevel,
    44  		},
    45  		SessionEntry{
    46  			User: "myuser1",
    47  		},
    48  		ActionEntry{
    49  			Action: "myaction",
    50  		},
    51  		&ephemeralEntry{
    52  			Details: "mydetails",
    53  			Errors:  12,
    54  			Success: true,
    55  		},
    56  	}
    57  	msgs := []string{
    58  		InfoLevel.String(),
    59  		"myuser1",
    60  		"myaction",
    61  		"mydetails",
    62  		"12",
    63  		"",
    64  	}
    65  	expectedString = strings.Join(msgs, "\t") + "\n"
    66  	if err := tsvLogger.Writer.WriteMessage(msg); err != nil {
    67  		t.Error()
    68  	} else {
    69  		verifyString(t, buf.String(), expectedString)
    70  	}
    71  
    72  	// Test result row
    73  	buf.Reset()
    74  	msg.Level = ResultLevel
    75  	msgs[0] = ResultLevel.String()
    76  	msgs[5] = "true"
    77  	expectedString = strings.Join(msgs, "\t") + "\n"
    78  	if err := tsvLogger.Writer.WriteMessage(msg); err != nil {
    79  		t.Error()
    80  	} else {
    81  		verifyString(t, buf.String(), expectedString)
    82  	}
    83  
    84  	// Test ErrorLevel
    85  	buf.Reset()
    86  	tsvLogger.Writer.Level(ErrorLevel)
    87  	msg.Level = InfoLevel
    88  	expectedString = ""
    89  	if err := tsvLogger.Writer.WriteMessage(msg); err != nil {
    90  		t.Error()
    91  	} else {
    92  		verifyString(t, buf.String(), expectedString)
    93  	}
    94  
    95  	buf.Reset()
    96  	msg.Level = ErrorLevel
    97  	msgs[0] = ErrorLevel.String()
    98  	msgs[5] = ""
    99  	expectedString = strings.Join(msgs, "\t") + "\n"
   100  	if err := tsvLogger.Writer.WriteMessage(msg); err != nil {
   101  		t.Error()
   102  	} else {
   103  		verifyString(t, buf.String(), expectedString)
   104  	}
   105  
   106  	// Test DebugLevel
   107  	buf.Reset()
   108  	tsvLogger.Writer.Level(InfoLevel)
   109  	msg.Level = DebugLevel
   110  	expectedString = ""
   111  	if err := tsvLogger.Writer.WriteMessage(msg); err != nil {
   112  		t.Error()
   113  	} else {
   114  		verifyString(t, buf.String(), expectedString)
   115  	}
   116  
   117  	tsvLogger.Writer.Level(DebugLevel)
   118  	msgs[0] = DebugLevel.String()
   119  	expectedString = strings.Join(msgs, "\t") + "\n"
   120  	if err := tsvLogger.Writer.WriteMessage(msg); err != nil {
   121  		t.Error()
   122  	} else {
   123  		verifyString(t, buf.String(), expectedString)
   124  	}
   125  
   126  	if err := tsvLogger.Close(); err != nil {
   127  		t.Error("Close failed:", err)
   128  	}
   129  	if !isClosed {
   130  		t.Error("Test of close function failed")
   131  	}
   132  }
   133  
   134  func verifyString(t *testing.T, value, expected string) {
   135  	t.Helper()
   136  
   137  	if value != expected {
   138  		t.Errorf("VerifyString failed, expected<%s> got<%s>", expected, value)
   139  	}
   140  }