From ec4fa2ee4f94d4792f86495318d58227b8173f5f Mon Sep 17 00:00:00 2001 From: RoyUP9 <87927115+RoyUP9@users.noreply.github.com> Date: Mon, 20 Sep 2021 11:03:15 +0300 Subject: [PATCH] additional acceptance tests (#287) --- acceptanceTests/logs_test.go | 196 ++++++++++++++++++++++++++++++++++ acceptanceTests/tap_test.go | 105 ++++++++++++++++++ acceptanceTests/testsUtils.go | 51 ++++++++- 3 files changed, 350 insertions(+), 2 deletions(-) create mode 100644 acceptanceTests/logs_test.go diff --git a/acceptanceTests/logs_test.go b/acceptanceTests/logs_test.go new file mode 100644 index 000000000..5508fdb11 --- /dev/null +++ b/acceptanceTests/logs_test.go @@ -0,0 +1,196 @@ +package acceptanceTests + +import ( + "archive/zip" + "os/exec" + "testing" +) + +func TestLogs(t *testing.T) { + if testing.Short() { + t.Skip("ignored acceptance test") + } + + cliPath, cliPathErr := getCliPath() + if cliPathErr != nil { + t.Errorf("failed to get cli path, err: %v", cliPathErr) + return + } + + tapCmdArgs := getDefaultTapCommandArgs() + + tapNamespace := getDefaultTapNamespace() + tapCmdArgs = append(tapCmdArgs, tapNamespace...) + + tapCmd := exec.Command(cliPath, tapCmdArgs...) + t.Logf("running command: %v", tapCmd.String()) + + t.Cleanup(func() { + if err := cleanupCommand(tapCmd); err != nil { + t.Logf("failed to cleanup tap command, err: %v", err) + } + }) + + if err := tapCmd.Start(); err != nil { + t.Errorf("failed to start tap command, err: %v", err) + return + } + + apiServerUrl := getApiServerUrl(defaultApiServerPort) + + if err := waitTapPodsReady(apiServerUrl); err != nil { + t.Errorf("failed to start tap pods on time, err: %v", err) + return + } + + logsCmdArgs := getDefaultLogsCommandArgs() + + logsCmd := exec.Command(cliPath, logsCmdArgs...) + t.Logf("running command: %v", logsCmd.String()) + + if err := logsCmd.Start(); err != nil { + t.Errorf("failed to start logs command, err: %v", err) + return + } + + if err := logsCmd.Wait(); err != nil { + t.Errorf("failed to wait logs command, err: %v", err) + return + } + + logsPath, logsPathErr := getLogsPath() + if logsPathErr != nil { + t.Errorf("failed to get logs path, err: %v", logsPathErr) + return + } + + zipReader, zipError := zip.OpenReader(logsPath) + if zipError != nil { + t.Errorf("failed to get zip reader, err: %v", zipError) + return + } + + t.Cleanup(func() { + if err := zipReader.Close(); err != nil { + t.Logf("failed to close zip reader, err: %v", err) + } + }) + + var logsFileNames []string + for _, file := range zipReader.File { + logsFileNames = append(logsFileNames, file.Name) + } + + if !Contains(logsFileNames, "mizu.mizu-api-server.log") { + t.Errorf("api server logs not found") + return + } + + if !Contains(logsFileNames, "mizu_cli.log") { + t.Errorf("cli logs not found") + return + } + + if !Contains(logsFileNames, "mizu_events.log") { + t.Errorf("events logs not found") + return + } + + if !ContainsPartOfValue(logsFileNames, "mizu.mizu-tapper-daemon-set") { + t.Errorf("tapper logs not found") + return + } +} + +func TestLogsPath(t *testing.T) { + if testing.Short() { + t.Skip("ignored acceptance test") + } + + cliPath, cliPathErr := getCliPath() + if cliPathErr != nil { + t.Errorf("failed to get cli path, err: %v", cliPathErr) + return + } + + tapCmdArgs := getDefaultTapCommandArgs() + + tapNamespace := getDefaultTapNamespace() + tapCmdArgs = append(tapCmdArgs, tapNamespace...) + + tapCmd := exec.Command(cliPath, tapCmdArgs...) + t.Logf("running command: %v", tapCmd.String()) + + t.Cleanup(func() { + if err := cleanupCommand(tapCmd); err != nil { + t.Logf("failed to cleanup tap command, err: %v", err) + } + }) + + if err := tapCmd.Start(); err != nil { + t.Errorf("failed to start tap command, err: %v", err) + return + } + + apiServerUrl := getApiServerUrl(defaultApiServerPort) + + if err := waitTapPodsReady(apiServerUrl); err != nil { + t.Errorf("failed to start tap pods on time, err: %v", err) + return + } + + logsCmdArgs := getDefaultLogsCommandArgs() + + logsPath := "../logs.zip" + logsCmdArgs = append(logsCmdArgs, "-f", logsPath) + + logsCmd := exec.Command(cliPath, logsCmdArgs...) + t.Logf("running command: %v", logsCmd.String()) + + if err := logsCmd.Start(); err != nil { + t.Errorf("failed to start logs command, err: %v", err) + return + } + + if err := logsCmd.Wait(); err != nil { + t.Errorf("failed to wait logs command, err: %v", err) + return + } + + zipReader, zipError := zip.OpenReader(logsPath) + if zipError != nil { + t.Errorf("failed to get zip reader, err: %v", zipError) + return + } + + t.Cleanup(func() { + if err := zipReader.Close(); err != nil { + t.Logf("failed to close zip reader, err: %v", err) + } + }) + + var logsFileNames []string + for _, file := range zipReader.File { + logsFileNames = append(logsFileNames, file.Name) + } + + if !Contains(logsFileNames, "mizu.mizu-api-server.log") { + t.Errorf("api server logs not found") + return + } + + if !Contains(logsFileNames, "mizu_cli.log") { + t.Errorf("cli logs not found") + return + } + + if !Contains(logsFileNames, "mizu_events.log") { + t.Errorf("events logs not found") + return + } + + if !ContainsPartOfValue(logsFileNames, "mizu.mizu-tapper-daemon-set") { + t.Errorf("tapper logs not found") + return + } +} diff --git a/acceptanceTests/tap_test.go b/acceptanceTests/tap_test.go index c529e1e7a..0f04ea6a8 100644 --- a/acceptanceTests/tap_test.go +++ b/acceptanceTests/tap_test.go @@ -1,11 +1,14 @@ package acceptanceTests import ( + "archive/zip" "bytes" "encoding/json" "fmt" + "io/ioutil" "net/http" "os/exec" + "path" "strings" "testing" "time" @@ -758,3 +761,105 @@ func TestTapRegexMasking(t *testing.T) { return } } + +func TestTapDumpLogs(t *testing.T) { + if testing.Short() { + t.Skip("ignored acceptance test") + } + + cliPath, cliPathErr := getCliPath() + if cliPathErr != nil { + t.Errorf("failed to get cli path, err: %v", cliPathErr) + return + } + + tapCmdArgs := getDefaultTapCommandArgs() + + tapNamespace := getDefaultTapNamespace() + tapCmdArgs = append(tapCmdArgs, tapNamespace...) + + tapCmdArgs = append(tapCmdArgs, "--set", "dump-logs=true") + + tapCmd := exec.Command(cliPath, tapCmdArgs...) + t.Logf("running command: %v", tapCmd.String()) + + if err := tapCmd.Start(); err != nil { + t.Errorf("failed to start tap command, err: %v", err) + return + } + + apiServerUrl := getApiServerUrl(defaultApiServerPort) + + if err := waitTapPodsReady(apiServerUrl); err != nil { + t.Errorf("failed to start tap pods on time, err: %v", err) + return + } + + if err := cleanupCommand(tapCmd); err != nil { + t.Errorf("failed to cleanup tap command, err: %v", err) + return + } + + mizuFolderPath, mizuPathErr := getMizuFolderPath() + if mizuPathErr != nil { + t.Errorf("failed to get mizu folder path, err: %v", mizuPathErr) + return + } + + files, readErr := ioutil.ReadDir(mizuFolderPath) + if readErr != nil { + t.Errorf("failed to read mizu folder files, err: %v", readErr) + return + } + + var dumpsLogsPath string + for _, file := range files { + fileName := file.Name() + if strings.Contains(fileName, "mizu_logs") { + dumpsLogsPath = path.Join(mizuFolderPath, fileName) + break + } + } + + if dumpsLogsPath == "" { + t.Errorf("dump logs file not found") + return + } + + zipReader, zipError := zip.OpenReader(dumpsLogsPath) + if zipError != nil { + t.Errorf("failed to get zip reader, err: %v", zipError) + return + } + + t.Cleanup(func() { + if err := zipReader.Close(); err != nil { + t.Logf("failed to close zip reader, err: %v", err) + } + }) + + var logsFileNames []string + for _, file := range zipReader.File { + logsFileNames = append(logsFileNames, file.Name) + } + + if !Contains(logsFileNames, "mizu.mizu-api-server.log") { + t.Errorf("api server logs not found") + return + } + + if !Contains(logsFileNames, "mizu_cli.log") { + t.Errorf("cli logs not found") + return + } + + if !Contains(logsFileNames, "mizu_events.log") { + t.Errorf("events logs not found") + return + } + + if !ContainsPartOfValue(logsFileNames, "mizu.mizu-tapper-daemon-set") { + t.Errorf("tapper logs not found") + return + } +} diff --git a/acceptanceTests/testsUtils.go b/acceptanceTests/testsUtils.go index 43d04fa61..19359b066 100644 --- a/acceptanceTests/testsUtils.go +++ b/acceptanceTests/testsUtils.go @@ -9,6 +9,7 @@ import ( "os" "os/exec" "path" + "strings" "syscall" "time" ) @@ -32,13 +33,22 @@ func getCliPath() (string, error) { return cliPath, nil } -func getConfigPath() (string, error) { +func getMizuFolderPath() (string, error) { home, homeDirErr := os.UserHomeDir() if homeDirErr != nil { return "", homeDirErr } - return path.Join(home, ".mizu", "config.yaml"), nil + return path.Join(home, ".mizu"), nil +} + +func getConfigPath() (string, error) { + mizuFolderPath, mizuPathError := getMizuFolderPath() + if mizuPathError != nil { + return "", mizuPathError + } + + return path.Join(mizuFolderPath, "config.yaml"), nil } func getProxyUrl(namespace string, service string) string { @@ -72,6 +82,13 @@ func getDefaultTapCommandArgsWithRegex(regex string) []string { return append([]string{tapCommand, regex}, defaultCmdArgs...) } +func getDefaultLogsCommandArgs() []string { + logsCommand := "logs" + defaultCmdArgs := getDefaultCommandArgs() + + return append([]string{logsCommand}, defaultCmdArgs...) +} + func getDefaultTapNamespace() []string { return []string{"-n", "mizu-tests"} } @@ -193,3 +210,33 @@ func getPods(tapStatusInterface interface{}) ([]map[string]interface{}, error) { return pods, nil } + +func getLogsPath() (string, error) { + dir, filePathErr := os.Getwd() + if filePathErr != nil { + return "", filePathErr + } + + logsPath := path.Join(dir, "mizu_logs.zip") + return logsPath, nil +} + +func Contains(slice []string, containsValue string) bool { + for _, sliceValue := range slice { + if sliceValue == containsValue { + return true + } + } + + return false +} + +func ContainsPartOfValue(slice []string, containsValue string) bool { + for _, sliceValue := range slice { + if strings.Contains(sliceValue, containsValue) { + return true + } + } + + return false +}