summaryrefslogtreecommitdiff
path: root/integrationtests/dtail_test.go
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2022-02-04 21:37:29 +0000
committerPaul Buetow <pbuetow@mimecast.com>2022-02-04 21:37:29 +0000
commit1db3b5dc1219e34e0e1c612e6646327701c40274 (patch)
treecab22128af9e54131facd0062a474459383a1c90 /integrationtests/dtail_test.go
parent6625d019271d3d7931587167845d77834d187d57 (diff)
parentcc6f19f69d0fb34af96e17147b2030c352d46845 (diff)
merge 4.0.0-RC
Diffstat (limited to 'integrationtests/dtail_test.go')
-rw-r--r--integrationtests/dtail_test.go150
1 files changed, 150 insertions, 0 deletions
diff --git a/integrationtests/dtail_test.go b/integrationtests/dtail_test.go
new file mode 100644
index 0000000..64a32f1
--- /dev/null
+++ b/integrationtests/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.Error(fmt.Sprintf("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)
+}