summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--runsc/test/runtimes/BUILD50
-rw-r--r--runsc/test/runtimes/runtimes.go20
-rw-r--r--runsc/test/runtimes/runtimes_test.go67
3 files changed, 137 insertions, 0 deletions
diff --git a/runsc/test/runtimes/BUILD b/runsc/test/runtimes/BUILD
new file mode 100644
index 000000000..36d0a761e
--- /dev/null
+++ b/runsc/test/runtimes/BUILD
@@ -0,0 +1,50 @@
+# These packages are used to run language runtime tests inside gVisor sandboxes.
+
+load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
+load("//runsc/test:build_defs.bzl", "runtime_test")
+
+package(licenses = ["notice"])
+
+go_library(
+ name = "runtimes",
+ srcs = ["runtimes.go"],
+ importpath = "gvisor.dev/gvisor/runsc/test/runtimes",
+)
+
+runtime_test(
+ name = "runtimes_test",
+ size = "small",
+ srcs = ["runtimes_test.go"],
+ embed = [":runtimes"],
+ tags = [
+ # Requires docker and runsc to be configured before the test runs.
+ "manual",
+ "local",
+ ],
+ deps = ["//runsc/test/testutil"],
+)
+
+go_binary(
+ name = "proctor-go",
+ srcs = ["proctor-go.go"],
+)
+
+go_binary(
+ name = "proctor-java",
+ srcs = ["proctor-java.go"],
+)
+
+go_binary(
+ name = "proctor-nodejs",
+ srcs = ["proctor-nodejs.go"],
+)
+
+go_binary(
+ name = "proctor-php",
+ srcs = ["proctor-php.go"],
+)
+
+go_binary(
+ name = "proctor-python",
+ srcs = ["proctor-python.go"],
+)
diff --git a/runsc/test/runtimes/runtimes.go b/runsc/test/runtimes/runtimes.go
new file mode 100644
index 000000000..2568e07fe
--- /dev/null
+++ b/runsc/test/runtimes/runtimes.go
@@ -0,0 +1,20 @@
+// Copyright 2019 The gVisor Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// Package runtimes provides language tests for runsc runtimes.
+// Each test calls docker commands to start up a container for each supported runtime,
+// and tests that its respective language tests are behaving as expected, like
+// connecting to a port or looking at the output. The container is killed and deleted
+// at the end.
+package runtimes
diff --git a/runsc/test/runtimes/runtimes_test.go b/runsc/test/runtimes/runtimes_test.go
new file mode 100644
index 000000000..6bf954e78
--- /dev/null
+++ b/runsc/test/runtimes/runtimes_test.go
@@ -0,0 +1,67 @@
+// Copyright 2019 The gVisor Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package runtimes
+
+import (
+ "strings"
+ "testing"
+ "time"
+
+ "gvisor.dev/gvisor/runsc/test/testutil"
+)
+
+func TestNodeJS(t *testing.T) {
+ const img = "gcr.io/gvisor-proctor/nodejs"
+ if err := testutil.Pull(img); err != nil {
+ t.Fatalf("docker pull failed: %v", err)
+ }
+
+ c := testutil.MakeDocker("gvisor-list")
+
+ list, err := c.RunFg(img, "--list")
+ if err != nil {
+ t.Fatalf("docker run failed: %v", err)
+ }
+ c.CleanUp()
+
+ tests := strings.Fields(list)
+
+ for _, tc := range tests {
+ tc := tc
+ t.Run(tc, func(t *testing.T) {
+ t.Parallel()
+
+ d := testutil.MakeDocker("gvisor-test")
+ if err := d.Run(img, "--test", tc); err != nil {
+ t.Fatalf("docker test %q failed to run: %v", tc, err)
+ }
+ defer d.CleanUp()
+
+ status, err := d.Wait(60 * time.Second)
+ if err != nil {
+ t.Fatalf("docker test %q failed to wait: %v", tc, err)
+ }
+ if status == 0 {
+ t.Logf("test %q passed", tc)
+ return
+ }
+ logs, err := d.Logs()
+ if err != nil {
+ t.Fatalf("docker test %q failed to supply logs: %v", tc, err)
+ }
+ t.Errorf("test %q failed: %v", tc, logs)
+ })
+ }
+}