diff options
author | Samantha Sample <samsample@google.com> | 2019-07-22 13:18:27 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2019-07-22 13:19:50 -0700 |
commit | a0a86bbb8250311211161337c0f9530b945450a3 (patch) | |
tree | 130b930fc3cc070901f0286b23094139516f079c | |
parent | fdac770f31cbe5150d57964be04c2884c68f0f8b (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/BUILD | 50 | ||||
-rw-r--r-- | runsc/test/runtimes/runtimes.go | 20 | ||||
-rw-r--r-- | runsc/test/runtimes/runtimes_test.go | 67 |
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) + }) + } +} |