10 "github.com/go-kit/kit/log"
13 func TestValueBinding(t *testing.T) {
15 var output []interface{}
17 logger := log.Logger(log.LoggerFunc(func(keyvals ...interface{}) error {
22 start := time.Date(2015, time.April, 25, 0, 0, 0, 0, time.UTC)
24 mocktime := func() time.Time {
25 now = now.Add(time.Second)
29 lc := log.With(logger, "ts", log.Timestamp(mocktime), "caller", log.DefaultCaller)
32 timestamp, ok := output[1].(time.Time)
34 t.Fatalf("want time.Time, have %T", output[1])
36 if want, have := start.Add(time.Second), timestamp; want != have {
37 t.Errorf("output[1]: want %v, have %v", want, have)
39 if want, have := "value_test.go:31", fmt.Sprint(output[3]); want != have {
40 t.Errorf("output[3]: want %s, have %s", want, have)
43 // A second attempt to confirm the bindings are truly dynamic.
45 timestamp, ok = output[1].(time.Time)
47 t.Fatalf("want time.Time, have %T", output[1])
49 if want, have := start.Add(2*time.Second), timestamp; want != have {
50 t.Errorf("output[1]: want %v, have %v", want, have)
52 if want, have := "value_test.go:44", fmt.Sprint(output[3]); want != have {
53 t.Errorf("output[3]: want %s, have %s", want, have)
57 func TestValueBinding_loggingZeroKeyvals(t *testing.T) {
59 var output []interface{}
61 logger := log.Logger(log.LoggerFunc(func(keyvals ...interface{}) error {
66 start := time.Date(2015, time.April, 25, 0, 0, 0, 0, time.UTC)
68 mocktime := func() time.Time {
69 now = now.Add(time.Second)
73 logger = log.With(logger, "ts", log.Timestamp(mocktime))
76 timestamp, ok := output[1].(time.Time)
78 t.Fatalf("want time.Time, have %T", output[1])
80 if want, have := start.Add(time.Second), timestamp; want != have {
81 t.Errorf("output[1]: want %v, have %v", want, have)
84 // A second attempt to confirm the bindings are truly dynamic.
86 timestamp, ok = output[1].(time.Time)
88 t.Fatalf("want time.Time, have %T", output[1])
90 if want, have := start.Add(2*time.Second), timestamp; want != have {
91 t.Errorf("output[1]: want %v, have %v", want, have)
95 func TestTimestampFormat(t *testing.T) {
98 start := time.Date(2015, time.April, 25, 0, 0, 0, 0, time.UTC)
100 mocktime := func() time.Time {
101 now = now.Add(time.Second)
105 tv := log.TimestampFormat(mocktime, time.RFC822)
107 if want, have := now.Add(time.Second).Format(time.RFC822), fmt.Sprint(tv()); want != have {
108 t.Errorf("wrong time format: want %v, have %v", want, have)
111 if want, have := now.Add(2*time.Second).Format(time.RFC822), fmt.Sprint(tv()); want != have {
112 t.Errorf("wrong time format: want %v, have %v", want, have)
115 mustMarshal := func(v interface{}) []byte {
116 b, err := v.(encoding.TextMarshaler).MarshalText()
118 t.Fatal("error marshaling text:", err)
123 if want, have := now.Add(3*time.Second).AppendFormat(nil, time.RFC822), mustMarshal(tv()); !reflect.DeepEqual(want, have) {
124 t.Errorf("wrong time format: want %s, have %s", want, have)
127 if want, have := now.Add(4*time.Second).AppendFormat(nil, time.RFC822), mustMarshal(tv()); !reflect.DeepEqual(want, have) {
128 t.Errorf("wrong time format: want %s, have %s", want, have)
132 func BenchmarkValueBindingTimestamp(b *testing.B) {
133 logger := log.NewNopLogger()
134 lc := log.With(logger, "ts", log.DefaultTimestamp)
137 for i := 0; i < b.N; i++ {
142 func BenchmarkValueBindingCaller(b *testing.B) {
143 logger := log.NewNopLogger()
144 lc := log.With(logger, "caller", log.DefaultCaller)
147 for i := 0; i < b.N; i++ {