package integration
import (
"io/ioutil"
"os"
"path/filepath"
"testing"
"github.com/bazelbuild/sandboxfs/integration/utils"
)
func TestLayout_MountPointDoesNotExist(t *testing.T) {
tempDir, err := ioutil.TempDir("", "test")
if err != nil {
t.Fatalf("Failed to create temporary directory: %v", err)
}
defer os.RemoveAll(tempDir)
mountPoint := filepath.Join(tempDir, "non-existent")
wantStderr := "Failed to mount " + mountPoint + ".*No such"
stdout, stderr, err := utils.RunAndWait(1, "--mapping=ro:/:"+tempDir, mountPoint)
if err != nil {
t.Fatal(err)
}
if len(stdout) > 0 {
t.Errorf("Got %s; want stdout to be empty", stdout)
}
if !utils.MatchesRegexp(wantStderr, stderr) {
t.Errorf("Got %s; want stderr to match %s", stderr, wantStderr)
}
}
func TestLayout_RootMustBeDirectory(t *testing.T) {
tempDir, err := ioutil.TempDir("", "test")
if err != nil {
t.Fatalf("Failed to create temporary directory: %v", err)
}
defer os.RemoveAll(tempDir)
file := filepath.Join(tempDir, "file")
utils.MustWriteFile(t, file, 0644, "")
wantStderr := "Failed to map root: .*" + file + ".* not a directory"
stdout, stderr, err := utils.RunAndWait(1, "--mapping=ro:/:"+file, "irrelevant-mount-point")
if err != nil {
t.Fatal(err)
}
if len(stdout) > 0 {
t.Errorf("Got %s; want stdout to be empty", stdout)
}
if !utils.MatchesRegexp(wantStderr, stderr) {
t.Errorf("Got %s; want stderr to match %s", stderr, wantStderr)
}
}
func TestLayout_TargetDoesNotExist(t *testing.T) {
wantStderr := "Failed to map root: stat failed .*/non-existent"
stdout, stderr, err := utils.RunAndWait(1, "--mapping=ro:/:/non-existent", "irrelevant-mount-point")
if err != nil {
t.Fatal(err)
}
if len(stdout) > 0 {
t.Errorf("Got %s; want stdout to be empty", stdout)
}
if !utils.MatchesRegexp(wantStderr, stderr) {
t.Errorf("Got %s; want stderr to match %s", stderr, wantStderr)
}
}
func TestLayout_DuplicateMapping(t *testing.T) {
tempDir, err := ioutil.TempDir("", "test")
if err != nil {
t.Fatalf("Failed to create temporary directory: %v", err)
}
defer os.RemoveAll(tempDir)
wantStderr := "Cannot map .*'/a/a .* Already mapped\n"
path1 := filepath.Join(tempDir, "1")
utils.MustWriteFile(t, path1, 0644, "")
path2 := filepath.Join(tempDir, "2")
utils.MustWriteFile(t, path2, 0644, "")
stdout, stderr, err := utils.RunAndWait(1, "--mapping=ro:/:"+tempDir, "--mapping=ro:/a/a:"+path1, "--mapping=ro:/a/b:"+tempDir, "--mapping=ro:/a/a:"+path2, "irrelevant-mount-point")
if err != nil {
t.Fatal(err)
}
if len(stdout) > 0 {
t.Errorf("Got %s; want stdout to be empty", stdout)
}
if !utils.MatchesRegexp(wantStderr, stderr) {
t.Errorf("Got %s; want stderr to match %s", stderr, wantStderr)
}
}
func TestLayout_TargetIsScaffoldDirectory(t *testing.T) {
tempDir, err := ioutil.TempDir("", "test")
if err != nil {
t.Fatalf("Failed to create temporary directory: %v", err)
}
defer os.RemoveAll(tempDir)
file := filepath.Join(tempDir, "file")
utils.MustWriteFile(t, file, 0644, "")
wantStderr := "Cannot map .*'/a .* Already mapped"
stdout, stderr, err := utils.RunAndWait(1, "--mapping=ro:/a/b/c:"+tempDir, "--mapping=ro:/a:"+file, "irrelevant-mount-point")
if err != nil {
t.Fatal(err)
}
if len(stdout) > 0 {
t.Errorf("Got %s; want stdout to be empty", stdout)
}
if !utils.MatchesRegexp(wantStderr, stderr) {
t.Errorf("Got %s; want stderr to match %s", stderr, wantStderr)
}
}