github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/docker/target_test.go (about) 1 package docker 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "os" 7 "sort" 8 "testing" 9 "time" 10 11 "github.com/docker/docker/client" 12 "github.com/go-kit/log" 13 "github.com/prometheus/client_golang/prometheus" 14 "github.com/prometheus/common/model" 15 "github.com/prometheus/prometheus/model/relabel" 16 "github.com/stretchr/testify/require" 17 18 "github.com/grafana/loki/clients/pkg/promtail/client/fake" 19 "github.com/grafana/loki/clients/pkg/promtail/positions" 20 ) 21 22 func Test_DockerTarget(t *testing.T) { 23 h := func(w http.ResponseWriter, r *http.Request) { 24 dat, err := os.ReadFile("testdata/flog.log") 25 require.NoError(t, err) 26 _, err = w.Write(dat) 27 require.NoError(t, err) 28 } 29 30 ts := httptest.NewServer(http.HandlerFunc(h)) 31 defer ts.Close() 32 33 w := log.NewSyncWriter(os.Stderr) 34 logger := log.NewLogfmtLogger(w) 35 entryHandler := fake.New(func() {}) 36 client, err := client.NewClientWithOpts(client.WithHost(ts.URL)) 37 require.NoError(t, err) 38 39 ps, err := positions.New(logger, positions.Config{ 40 SyncPeriod: 10 * time.Second, 41 PositionsFile: t.TempDir() + "/positions.yml", 42 }) 43 require.NoError(t, err) 44 45 _, err = NewTarget( 46 NewMetrics(prometheus.NewRegistry()), 47 logger, 48 entryHandler, 49 ps, 50 "flog", 51 model.LabelSet{"job": "docker"}, 52 []*relabel.Config{}, 53 client, 54 ) 55 require.NoError(t, err) 56 57 require.Eventually(t, func() bool { 58 return len(entryHandler.Received()) >= 5 59 }, 5*time.Second, 100*time.Millisecond) 60 61 received := entryHandler.Received() 62 sort.Slice(received, func(i, j int) bool { 63 return received[i].Timestamp.Before(received[j].Timestamp) 64 }) 65 66 expectedLines := []string{ 67 "5.3.69.55 - - [09/Dec/2021:09:15:02 +0000] \"HEAD /brand/users/clicks-and-mortar/front-end HTTP/2.0\" 503 27087", 68 "101.54.183.185 - - [09/Dec/2021:09:15:03 +0000] \"POST /next-generation HTTP/1.0\" 416 11468", 69 "69.27.137.160 - runolfsdottir2670 [09/Dec/2021:09:15:03 +0000] \"HEAD /content/visionary/engineer/cultivate HTTP/1.1\" 302 2975", 70 "28.104.242.74 - - [09/Dec/2021:09:15:03 +0000] \"PATCH /value-added/cultivate/systems HTTP/2.0\" 405 11843", 71 "150.187.51.54 - satterfield1852 [09/Dec/2021:09:15:03 +0000] \"GET /incentivize/deliver/innovative/cross-platform HTTP/1.1\" 301 13032", 72 } 73 actualLines := make([]string, 0, 5) 74 for _, entry := range received[:5] { 75 actualLines = append(actualLines, entry.Line) 76 } 77 require.ElementsMatch(t, actualLines, expectedLines) 78 }