From ba8d3102ab3c9899b051c613e9637468caa32826 Mon Sep 17 00:00:00 2001 From: Yadong Ding Date: Fri, 1 Dec 2023 17:25:51 +0800 Subject: [PATCH] smoke: support more images in container Support: python, golang, ruby, amazoncorretto. Signed-off-by: Yadong Ding --- smoke/tests/texture/golang/entrypoint.sh | 2 + smoke/tests/texture/golang/main.go | 7 ++++ smoke/tests/texture/java/Main.java | 5 +++ smoke/tests/texture/java/entrypoint.sh | 3 ++ smoke/tests/texture/python/entrypoint.sh | 1 + smoke/tests/texture/ruby/entrypoint.sh | 1 + smoke/tests/tool/container.go | 51 ++++++++++++++++++++++-- 7 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 smoke/tests/texture/golang/entrypoint.sh create mode 100644 smoke/tests/texture/golang/main.go create mode 100644 smoke/tests/texture/java/Main.java create mode 100644 smoke/tests/texture/java/entrypoint.sh create mode 100644 smoke/tests/texture/python/entrypoint.sh create mode 100644 smoke/tests/texture/ruby/entrypoint.sh diff --git a/smoke/tests/texture/golang/entrypoint.sh b/smoke/tests/texture/golang/entrypoint.sh new file mode 100644 index 00000000000..172835887cc --- /dev/null +++ b/smoke/tests/texture/golang/entrypoint.sh @@ -0,0 +1,2 @@ +cd /src +go run main.go diff --git a/smoke/tests/texture/golang/main.go b/smoke/tests/texture/golang/main.go new file mode 100644 index 00000000000..d8fa929218f --- /dev/null +++ b/smoke/tests/texture/golang/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("hello") +} diff --git a/smoke/tests/texture/java/Main.java b/smoke/tests/texture/java/Main.java new file mode 100644 index 00000000000..fd6e78f6641 --- /dev/null +++ b/smoke/tests/texture/java/Main.java @@ -0,0 +1,5 @@ +class Main { + public static void main(String[] args) { + System.out.println("hello"); + } +} diff --git a/smoke/tests/texture/java/entrypoint.sh b/smoke/tests/texture/java/entrypoint.sh new file mode 100644 index 00000000000..5acfb3ca0e1 --- /dev/null +++ b/smoke/tests/texture/java/entrypoint.sh @@ -0,0 +1,3 @@ +cd /src +javac Main.java +java Main diff --git a/smoke/tests/texture/python/entrypoint.sh b/smoke/tests/texture/python/entrypoint.sh new file mode 100644 index 00000000000..a627a228590 --- /dev/null +++ b/smoke/tests/texture/python/entrypoint.sh @@ -0,0 +1 @@ +python -c 'print("hello")' diff --git a/smoke/tests/texture/ruby/entrypoint.sh b/smoke/tests/texture/ruby/entrypoint.sh new file mode 100644 index 00000000000..2d950064536 --- /dev/null +++ b/smoke/tests/texture/ruby/entrypoint.sh @@ -0,0 +1 @@ +ruby -e "puts \"hello\"" diff --git a/smoke/tests/tool/container.go b/smoke/tests/tool/container.go index 57b89e9e33b..ea8c72114f4 100644 --- a/smoke/tests/tool/container.go +++ b/smoke/tests/tool/container.go @@ -63,13 +63,41 @@ var URL_WAIT = map[string]RunArgs{ }, } +var CMD_STDOUT = map[string]RunArgs{ + "golang": { + Mount: mountPath{ + source: "tests/texture/golang", + target: "/src", + }, + }, + "amazoncorretto": { + Mount: mountPath{ + source: "tests/texture/java", + target: "/src", + }, + }, + "ruby": { + Mount: mountPath{ + source: "tests/texture/ruby", + target: "/src", + }, + }, + "python": { + Mount: mountPath{ + source: "tests/texture/python", + target: "/src", + }, + }, +} + // SupportContainerImage help to check if we support the image or not func SupportContainerImage(image string) bool { - _, ok := URL_WAIT[image] - return ok + _, existsInUrlWait := URL_WAIT[image] + _, existsInCmdStdout := CMD_STDOUT[image] + return existsInUrlWait || existsInCmdStdout } -// runUrlWaitContainer run Contaienr util geting http response from WaitUrl +// runUrlWaitContainer run container util geting http response from WaitUrl func runUrlWaitContainer(t *testing.T, image string, containerName string, runArgs RunArgs) { cmd := "sudo nerdctl --insecure-registry --snapshotter nydus run -d --net=host" if runArgs.Mount.source != "" { @@ -91,6 +119,20 @@ func runUrlWaitContainer(t *testing.T, image string, containerName string, runAr } } +// runCmdStdoutContainer run some commands in container by entrypoint.sh +func runCmdStdoutContainer(t *testing.T, image string, containerName string, runArgs RunArgs) { + cmd := "sudo nerdctl --insecure-registry --snapshotter nydus run -i --net=host" + if runArgs.Mount.source != "" { + currentDir, err := os.Getwd() + if err != nil { + t.Fatalf("can't get rooted path name") + } + cmd += fmt.Sprintf(" -v %s:%s", filepath.Join(currentDir, runArgs.Mount.source), runArgs.Mount.target) + } + cmd += fmt.Sprintf(" --name=%s %s sh /src/entrypoint.sh", containerName, image) + Run(t, cmd) +} + // RunContainerWithBaseline and get metrics from api socket. // Test will fail if performance below baseline. func RunContainerWithBaseline(t *testing.T, image string, containerName string, mode string) { @@ -122,6 +164,9 @@ func RunContainer(t *testing.T, image string, containerName string) *ContainerMe if ok { runUrlWaitContainer(t, image, containerName, args) defer clearContainer(t, image, containerName) + } else if args, ok := CMD_STDOUT[ImageRepo(t, image)]; ok { + runCmdStdoutContainer(t, image, containerName, args) + defer clearContainer(t, image, containerName) } containerMetic.E2ETime = time.Since(startTime)