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
This commit is contained in:
Samantha Sample
2019-07-22 13:19:50 -07:00
committed by gVisor bot
parent fdac770f31
commit a0a86bbb82
3 changed files with 137 additions and 0 deletions
+50
View File
@@ -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"],
)
+20
View File
@@ -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
+67
View File
@@ -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)
})
}
}