summaryrefslogtreecommitdiffhomepage
path: root/runsc/container/multi_container_test.go
diff options
context:
space:
mode:
authorFabricio Voznika <fvoznika@google.com>2018-09-05 14:28:52 -0700
committerShentubot <shentubot@google.com>2018-09-05 14:30:09 -0700
commit12aef686af3f37029e619602286f00a40144c52d (patch)
tree89b4d8378fc647dacaa4828c1689645d8338f7e9 /runsc/container/multi_container_test.go
parent0c7cfca0da234ae34497c420a23fea91a47a566c (diff)
Enabled bind mounts in sub-containers
With multi-gofers, bind mounts in sub-containers should just work. Removed restrictions and added test. There are also a few cleanups along the way, e.g. retry unmounting in case cleanup races with gofer teardown. PiperOrigin-RevId: 211699569 Change-Id: Ic0a69c29d7c31cd7e038909cc686c6ac98703374
Diffstat (limited to 'runsc/container/multi_container_test.go')
-rw-r--r--runsc/container/multi_container_test.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/runsc/container/multi_container_test.go b/runsc/container/multi_container_test.go
index cf5140b4e..3bdfbaca3 100644
--- a/runsc/container/multi_container_test.go
+++ b/runsc/container/multi_container_test.go
@@ -15,7 +15,9 @@
package container
import (
+ "io/ioutil"
"os"
+ "path/filepath"
"strings"
"sync"
"testing"
@@ -179,3 +181,59 @@ func TestMultiContainerWait(t *testing.T) {
t.Errorf("failed to wait for %q to start: %v", strings.Join(containers[0].Spec.Process.Args, " "), err)
}
}
+
+// TestMultiContainerMount tests that bind mounts can be used with multiple
+// containers.
+func TestMultiContainerMount(t *testing.T) {
+ rootDir, err := testutil.SetupRootDir()
+ if err != nil {
+ t.Fatalf("error creating root dir: %v", err)
+ }
+ defer os.RemoveAll(rootDir)
+
+ cmd1 := []string{"sleep", "100"}
+
+ // 'src != dst' ensures that 'dst' doesn't exist in the host and must be
+ // properly mapped inside the container to work.
+ src, err := ioutil.TempDir(testutil.TmpDir(), "container")
+ if err != nil {
+ t.Fatal("ioutil.TempDir failed:", err)
+ }
+ dst := src + ".dst"
+ cmd2 := []string{"touch", filepath.Join(dst, "file")}
+
+ sps, ids := createSpecs(cmd1, cmd2)
+ sps[1].Mounts = append(sps[1].Mounts, specs.Mount{
+ Source: src,
+ Destination: dst,
+ Type: "bind",
+ })
+
+ // Setup the containers.
+ var containers []*Container
+ for i, spec := range sps {
+ conf := testutil.TestConfig()
+ bundleDir, err := testutil.SetupContainerInRoot(rootDir, spec, conf)
+ if err != nil {
+ t.Fatalf("error setting up container: %v", err)
+ }
+ defer os.RemoveAll(bundleDir)
+ cont, err := Create(ids[i], spec, conf, bundleDir, "", "")
+ if err != nil {
+ t.Fatalf("error creating container: %v", err)
+ }
+ defer cont.Destroy()
+ if err := cont.Start(conf); err != nil {
+ t.Fatalf("error starting container: %v", err)
+ }
+ containers = append(containers, cont)
+ }
+
+ ws, err := containers[1].Wait()
+ if err != nil {
+ t.Error("error waiting on container:", err)
+ }
+ if !ws.Exited() || ws.ExitStatus() != 0 {
+ t.Error("container failed, waitStatus:", ws)
+ }
+}