summaryrefslogtreecommitdiff
path: root/integrationtests-old/dtail_test.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-06-24 18:29:13 +0300
committerPaul Buetow <paul@buetow.org>2025-06-24 18:29:13 +0300
commit61b2a90aefee82da19ea5b388fb6112760833d97 (patch)
treeb53b04f296434afc9a71d5702363b6532d73f85c /integrationtests-old/dtail_test.go
parentd32f586ad7340db2b108702b69201733c2ce099f (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.go150
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)
+}