github.com/johngossman/docker@v1.6.0-rc5/daemon/logger/jsonfilelog/jsonfilelog_test.go (about)

     1  package jsonfilelog
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/docker/docker/daemon/logger"
    11  	"github.com/docker/docker/pkg/jsonlog"
    12  )
    13  
    14  func TestJSONFileLogger(t *testing.T) {
    15  	tmp, err := ioutil.TempDir("", "docker-logger-")
    16  	if err != nil {
    17  		t.Fatal(err)
    18  	}
    19  	defer os.RemoveAll(tmp)
    20  	filename := filepath.Join(tmp, "container.log")
    21  	l, err := New(filename)
    22  	if err != nil {
    23  		t.Fatal(err)
    24  	}
    25  	defer l.Close()
    26  	cid := "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657"
    27  	if err := l.Log(&logger.Message{ContainerID: cid, Line: []byte("line1"), Source: "src1"}); err != nil {
    28  		t.Fatal(err)
    29  	}
    30  	if err := l.Log(&logger.Message{ContainerID: cid, Line: []byte("line2"), Source: "src2"}); err != nil {
    31  		t.Fatal(err)
    32  	}
    33  	if err := l.Log(&logger.Message{ContainerID: cid, Line: []byte("line3"), Source: "src3"}); err != nil {
    34  		t.Fatal(err)
    35  	}
    36  	res, err := ioutil.ReadFile(filename)
    37  	if err != nil {
    38  		t.Fatal(err)
    39  	}
    40  	expected := `{"log":"line1\n","stream":"src1","time":"0001-01-01T00:00:00Z"}
    41  {"log":"line2\n","stream":"src2","time":"0001-01-01T00:00:00Z"}
    42  {"log":"line3\n","stream":"src3","time":"0001-01-01T00:00:00Z"}
    43  `
    44  
    45  	if string(res) != expected {
    46  		t.Fatalf("Wrong log content: %q, expected %q", res, expected)
    47  	}
    48  }
    49  
    50  func BenchmarkJSONFileLogger(b *testing.B) {
    51  	tmp, err := ioutil.TempDir("", "docker-logger-")
    52  	if err != nil {
    53  		b.Fatal(err)
    54  	}
    55  	defer os.RemoveAll(tmp)
    56  	filename := filepath.Join(tmp, "container.log")
    57  	l, err := New(filename)
    58  	if err != nil {
    59  		b.Fatal(err)
    60  	}
    61  	defer l.Close()
    62  	cid := "a7317399f3f857173c6179d44823594f8294678dea9999662e5c625b5a1c7657"
    63  	testLine := "Line that thinks that it is log line from docker\n"
    64  	msg := &logger.Message{ContainerID: cid, Line: []byte(testLine), Source: "stderr", Timestamp: time.Now().UTC()}
    65  	jsonlog, err := (&jsonlog.JSONLog{Log: string(msg.Line) + "\n", Stream: msg.Source, Created: msg.Timestamp}).MarshalJSON()
    66  	if err != nil {
    67  		b.Fatal(err)
    68  	}
    69  	b.SetBytes(int64(len(jsonlog)+1) * 30)
    70  	b.ResetTimer()
    71  	for i := 0; i < b.N; i++ {
    72  		for j := 0; j < 30; j++ {
    73  			if err := l.Log(msg); err != nil {
    74  				b.Fatal(err)
    75  			}
    76  		}
    77  	}
    78  }