...

Source file src/github.com/go-kit/log/syslog/syslog_test.go

Documentation: github.com/go-kit/log/syslog

     1  //go:build !windows && !plan9 && !nacl
     2  // +build !windows,!plan9,!nacl
     3  
     4  package syslog
     5  
     6  import (
     7  	"fmt"
     8  	"reflect"
     9  	"testing"
    10  
    11  	gosyslog "log/syslog"
    12  
    13  	"github.com/go-kit/log"
    14  	"github.com/go-kit/log/level"
    15  )
    16  
    17  func TestSyslogLoggerDefaultPrioritySelector(t *testing.T) {
    18  	w := &testSyslogWriter{}
    19  	l := NewSyslogLogger(w, log.NewLogfmtLogger)
    20  
    21  	l.Log("level", level.WarnValue(), "msg", "one")
    22  	l.Log("level", "undefined", "msg", "two")
    23  	l.Log("level", level.InfoValue(), "msg", "three")
    24  	l.Log("level", level.ErrorValue(), "msg", "four")
    25  	l.Log("level", level.DebugValue(), "msg", "five")
    26  
    27  	l.Log("msg", "six", "level", level.ErrorValue())
    28  	l.Log("msg", "seven", "level", level.DebugValue())
    29  	l.Log("msg", "eight", "level", level.InfoValue())
    30  	l.Log("msg", "nine", "level", "undefined")
    31  	l.Log("msg", "ten", "level", level.WarnValue())
    32  
    33  	l.Log("level", level.ErrorValue(), "msg")
    34  	l.Log("msg", "eleven", "level")
    35  
    36  	want := []string{
    37  		"warning: level=warn msg=one\n",
    38  		"info: level=undefined msg=two\n",
    39  		"info: level=info msg=three\n",
    40  		"err: level=error msg=four\n",
    41  		"debug: level=debug msg=five\n",
    42  
    43  		"err: msg=six level=error\n",
    44  		"debug: msg=seven level=debug\n",
    45  		"info: msg=eight level=info\n",
    46  		"info: msg=nine level=undefined\n",
    47  		"warning: msg=ten level=warn\n",
    48  
    49  		"err: level=error msg=null\n",
    50  		"info: msg=eleven level=null\n",
    51  	}
    52  	have := w.writes
    53  	if !reflect.DeepEqual(want, have) {
    54  		t.Errorf("wrong writes: want %s, have %s", want, have)
    55  	}
    56  }
    57  
    58  func TestSyslogLoggerExhaustivePrioritySelector(t *testing.T) {
    59  	w := &testSyslogWriter{}
    60  	selector := func(keyvals ...interface{}) gosyslog.Priority {
    61  		for i := 0; i < len(keyvals); i += 2 {
    62  			if keyvals[i] == level.Key() {
    63  				if v, ok := keyvals[i+1].(string); ok {
    64  					switch v {
    65  					case "emergency":
    66  						return gosyslog.LOG_EMERG
    67  					case "alert":
    68  						return gosyslog.LOG_ALERT
    69  					case "critical":
    70  						return gosyslog.LOG_CRIT
    71  					case "error":
    72  						return gosyslog.LOG_ERR
    73  					case "warning":
    74  						return gosyslog.LOG_WARNING
    75  					case "notice":
    76  						return gosyslog.LOG_NOTICE
    77  					case "info":
    78  						return gosyslog.LOG_INFO
    79  					case "debug":
    80  						return gosyslog.LOG_DEBUG
    81  					}
    82  					return gosyslog.LOG_LOCAL0
    83  				}
    84  			}
    85  		}
    86  		return gosyslog.LOG_LOCAL0
    87  	}
    88  	l := NewSyslogLogger(w, log.NewLogfmtLogger, PrioritySelectorOption(selector))
    89  
    90  	l.Log("level", "warning", "msg", "one")
    91  	l.Log("level", "error", "msg", "two")
    92  	l.Log("level", "critical", "msg", "three")
    93  	l.Log("level", "debug", "msg", "four")
    94  	l.Log("level", "info", "msg", "five")
    95  	l.Log("level", "alert", "msg", "six")
    96  	l.Log("level", "emergency", "msg", "seven")
    97  	l.Log("level", "notice", "msg", "eight")
    98  	l.Log("level", "unknown", "msg", "nine")
    99  
   100  	want := []string{
   101  		"warning: level=warning msg=one\n",
   102  		"err: level=error msg=two\n",
   103  		"crit: level=critical msg=three\n",
   104  		"debug: level=debug msg=four\n",
   105  		"info: level=info msg=five\n",
   106  		"alert: level=alert msg=six\n",
   107  		"emerg: level=emergency msg=seven\n",
   108  		"notice: level=notice msg=eight\n",
   109  		"write: level=unknown msg=nine\n",
   110  	}
   111  	have := w.writes
   112  	if !reflect.DeepEqual(want, have) {
   113  		t.Errorf("wrong writes: want %s, have %s", want, have)
   114  	}
   115  }
   116  
   117  type testSyslogWriter struct {
   118  	writes []string
   119  }
   120  
   121  func (w *testSyslogWriter) Write(b []byte) (int, error) {
   122  	msg := string(b)
   123  	w.writes = append(w.writes, fmt.Sprintf("write: %s", msg))
   124  	return len(msg), nil
   125  }
   126  
   127  func (w *testSyslogWriter) Close() error {
   128  	return nil
   129  }
   130  
   131  func (w *testSyslogWriter) Emerg(msg string) error {
   132  	w.writes = append(w.writes, fmt.Sprintf("emerg: %s", msg))
   133  	return nil
   134  }
   135  
   136  func (w *testSyslogWriter) Alert(msg string) error {
   137  	w.writes = append(w.writes, fmt.Sprintf("alert: %s", msg))
   138  	return nil
   139  }
   140  
   141  func (w *testSyslogWriter) Crit(msg string) error {
   142  	w.writes = append(w.writes, fmt.Sprintf("crit: %s", msg))
   143  	return nil
   144  }
   145  
   146  func (w *testSyslogWriter) Err(msg string) error {
   147  	w.writes = append(w.writes, fmt.Sprintf("err: %s", msg))
   148  	return nil
   149  }
   150  
   151  func (w *testSyslogWriter) Warning(msg string) error {
   152  	w.writes = append(w.writes, fmt.Sprintf("warning: %s", msg))
   153  	return nil
   154  }
   155  
   156  func (w *testSyslogWriter) Notice(msg string) error {
   157  	w.writes = append(w.writes, fmt.Sprintf("notice: %s", msg))
   158  	return nil
   159  }
   160  
   161  func (w *testSyslogWriter) Info(msg string) error {
   162  	w.writes = append(w.writes, fmt.Sprintf("info: %s", msg))
   163  	return nil
   164  }
   165  
   166  func (w *testSyslogWriter) Debug(msg string) error {
   167  	w.writes = append(w.writes, fmt.Sprintf("debug: %s", msg))
   168  	return nil
   169  }
   170  

View as plain text