summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSamantha Sample <samsample@google.com>2019-07-22 13:18:27 -0700
committergVisor bot <gvisor-bot@google.com>2019-07-22 13:19:50 -0700
commita0a86bbb8250311211161337c0f9530b945450a3 (patch)
tree130b930fc3cc070901f0286b23094139516f079c
parentfdac770f31cbe5150d57964be04c2884c68f0f8b (diff)
Prototype integration of runtime language tests for Node.js into gVisor.
This is the first version of a testing program to be used by gVisor for including language testing into their presubmits. It works when ran in the same manor the image and integration tests are ran in as described in their README file. PiperOrigin-RevId: 259392416
-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)
+ })
+ }
+}