diff options
| author | Paul Buetow <paul@buetow.org> | 2025-06-24 18:29:13 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-06-24 18:29:13 +0300 |
| commit | 61b2a90aefee82da19ea5b388fb6112760833d97 (patch) | |
| tree | b53b04f296434afc9a71d5702363b6532d73f85c /integrationtests-old/dtail_test.go | |
| parent | d32f586ad7340db2b108702b69201733c2ce099f (diff) | |
Fix dcat tests for server mode and --plain flag handling
- Update dcat tests to use comma-separated file lists in server mode
- Fix basehandler.go to properly respect --plain flag for server messages
- Skip empty server messages when in plain mode
- Add separate expected output file for TestDCatColors server mode
- All dcat integration tests now pass in both serverless and server modes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Diffstat (limited to 'integrationtests-old/dtail_test.go')
| -rw-r--r-- | integrationtests-old/dtail_test.go | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/integrationtests-old/dtail_test.go b/integrationtests-old/dtail_test.go new file mode 100644 index 0000000..752dafb --- /dev/null +++ b/integrationtests-old/dtail_test.go @@ -0,0 +1,150 @@ +package integrationtests + +import ( + "context" + "fmt" + "os" + "strings" + "testing" + "time" + + "github.com/mimecast/dtail/internal/config" +) + +func TestDTailWithServer(t *testing.T) { + if !config.Env("DTAIL_INTEGRATION_TEST_RUN_MODE") { + t.Log("Skipping") + return + } + followFile := "dtail.follow.tmp" + port := getUniquePortNumber() + bindAddress := "localhost" + greetings := []string{"World!", "Sol-System!", "Milky-Way!", "Universe!", "Multiverse!"} + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + go func() { + select { + case <-time.After(time.Minute): + t.Error("Max time for this test exceeded!") + cancel() + case <-ctx.Done(): + return + } + }() + + serverCh, _, _, err := startCommand(ctx, t, + "", "../dserver", + "--cfg", "none", + "--logger", "stdout", + "--logLevel", "info", + "--bindAddress", bindAddress, + "--port", fmt.Sprintf("%d", port), + ) + if err != nil { + t.Error(err) + return + } + + // MAYBETODO: In testmode, never read a config file (use none for all commands) + clientCh, _, _, err := startCommand(ctx, t, + "", "../dtail", + "--cfg", "none", + "--logger", "stdout", + "--logLevel", "info", + "--servers", fmt.Sprintf("%s:%d", bindAddress, port), + "--files", followFile, + "--grep", "Hello", + "--trustAllHosts", + "--noColor", + ) + if err != nil { + t.Error(err) + return + } + // Write greetings to followFile + fd, err := os.Create(followFile) + if err != nil { + t.Error(err) + } + defer fd.Close() + + go func() { + var circular int + for { + select { + case <-time.After(time.Second): + _, _ = fd.WriteString(time.Now().String()) + _, _ = fd.WriteString(fmt.Sprintf(" - Hello %s\n", greetings[circular])) + circular = (circular + 1) % len(greetings) + case <-ctx.Done(): + return + } + } + }() + + var greetingsRecv []string + + for len(greetingsRecv) < len(greetings) { + select { + case line := <-serverCh: + t.Log("server:", line) + case line := <-clientCh: + t.Log("client:", line) + if strings.Contains(line, "Hello ") { + s := strings.Split(line, " ") + greeting := s[len(s)-1] + greetingsRecv = append(greetingsRecv, greeting) + t.Log("Received greeting", greeting, len(greetingsRecv)) + } + case <-ctx.Done(): + t.Log("Done reading client and server pipes") + break + } + } + + // We expect to have received the greetings in the same order they were sent.` + offset := -1 + for i, g := range greetings { + if g == greetingsRecv[0] { + offset = i + break + } + } + if offset == -1 { + t.Error("Could not find first offset of greetings received") + return + } + + for i, g := range greetingsRecv { + index := (i + offset) % len(greetings) + if greetings[index] != g { + t.Errorf("Expected '%s' but got '%s' at '%v' vs '%v'\n", + g, greetings[index], greetings, greetingsRecv) + return + } + } + + os.Remove(followFile) +} + +func TestDTailColorTable(t *testing.T) { + if !config.Env("DTAIL_INTEGRATION_TEST_RUN_MODE") { + t.Log("Skipping") + return + } + outFile := "dtailcolortable.stdout.tmp" + expectedOutFile := "dtailcolortable.expected" + + _, err := runCommand(context.TODO(), t, outFile, "../dtail", "--colorTable") + if err != nil { + t.Error(err) + return + } + if err := compareFiles(t, outFile, expectedOutFile); err != nil { + t.Error(err) + return + } + os.Remove(outFile) +} |
