diff --git a/tests/ociswrapper/log/log.go b/tests/ociswrapper/log/log.go index 6ecf3355f..1c2ce3da6 100644 --- a/tests/ociswrapper/log/log.go +++ b/tests/ociswrapper/log/log.go @@ -7,5 +7,9 @@ func Println(message string) { } func Panic(err error) { - log.Panic("[ociswrapper] ", err.Error()) + log.Panic("[ociswrapper]", err.Error()) +} + +func Fatalln(err error) { + log.Fatalln("[ociswrapper]", err.Error()) } diff --git a/tests/ociswrapper/ocis/ocis.go b/tests/ociswrapper/ocis/ocis.go index 785027d4c..0d9ff319b 100644 --- a/tests/ociswrapper/ocis/ocis.go +++ b/tests/ociswrapper/ocis/ocis.go @@ -8,6 +8,8 @@ import ( "os" "os/exec" "strconv" + "strings" + "syscall" "time" "ociswrapper/common" @@ -58,23 +60,36 @@ func Start(envMap map[string]any) { for outputScanner.Scan() { m := outputScanner.Text() fmt.Println(m) - retryCount++ + } - maxRetry, _ := strconv.Atoi(config.Get("retry")) - if retryCount <= maxRetry { - log.Println(fmt.Sprintf("Retry starting oCIS server... (retry %v)", retryCount)) - // Stop and start again - Stop() - Start(envMap) + if err := cmd.Wait(); err != nil { + if exitErr, ok := err.(*exec.ExitError); ok { + status := exitErr.Sys().(syscall.WaitStatus) + // retry only if oCIS server exited with code > 0 + // -1 exit code means that the process was killed by a signal (cmd.Process.Kill()) + if status.ExitStatus() > 0 { + log.Println(fmt.Sprintf("oCIS server exited with code %v", status.ExitStatus())) + + // retry to start oCIS server + retryCount++ + maxRetry, _ := strconv.Atoi(config.Get("retry")) + if retryCount <= maxRetry { + log.Println(fmt.Sprintf("Retry starting oCIS server... (retry %v)", retryCount)) + // Stop and start again + Stop() + Start(envMap) + } + } } } - cmd.Wait() } func Stop() { err := cmd.Process.Kill() if err != nil { - log.Panic(err) + if !strings.HasSuffix(err.Error(), "process already finished") { + log.Fatalln(err) + } } cmd.Wait() } diff --git a/tests/ociswrapper/wrapper/handlers/handler.go b/tests/ociswrapper/wrapper/handlers/handler.go index e331a2406..09e4c64e0 100644 --- a/tests/ociswrapper/wrapper/handlers/handler.go +++ b/tests/ociswrapper/wrapper/handlers/handler.go @@ -31,7 +31,7 @@ func sendResponse(res http.ResponseWriter, ocisStatus bool) { } else { res.WriteHeader(http.StatusInternalServerError) resBody["status"] = "ERROR" - resBody["message"] = "oCIS server error" + resBody["message"] = "Unable to start oCIS server" } res.Header().Set("Content-Type", "application/json")