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