// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package logtail import ( "context" "net/http" "net/http/httptest" "testing" "time" ) func TestFastShutdown(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) cancel() testServ := httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) {})) defer testServ.Close() l := NewLogger(Config{ BaseURL: testServ.URL, }, t.Logf) l.Shutdown(ctx) } func TestUploadMessages(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) uploads := 0 testServ := httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=utf-8") uploads += 1 })) defer testServ.Close() l := NewLogger(Config{BaseURL: testServ.URL}, t.Logf) for i := 1; i < 10; i++ { l.Write([]byte("log line")) } l.Shutdown(ctx) cancel() if uploads == 0 { t.Error("no log uploads") } } var sink []byte func TestLoggerEncodeTextAllocs(t *testing.T) { lg := &Logger{timeNow: time.Now} inBuf := []byte("some text to encode") n := testing.AllocsPerRun(1000, func() { sink = lg.encodeText(inBuf, false) }) if int(n) != 1 { t.Logf("allocs = %d; want 1", int(n)) } } func TestLoggerWriteLength(t *testing.T) { lg := &Logger{ timeNow: time.Now, buffer: NewMemoryBuffer(1024), } inBuf := []byte("some text to encode") n, err := lg.Write(inBuf) if err != nil { t.Error(err) } if n != len(inBuf) { t.Errorf("logger.Write wrote %d bytes, expected %d", n, len(inBuf)) } }