go-sandbox/pkg/forkexec/fork_linux_test.go
2020-09-06 00:11:52 -07:00

90 lines
1.3 KiB
Go

package forkexec
import (
"io"
"io/ioutil"
"os"
"syscall"
"testing"
)
func TestFork_DropCaps(t *testing.T) {
t.Parallel()
r := Runner{
Args: []string{"/bin/echo"},
CloneFlags: syscall.CLONE_NEWUSER,
DropCaps: true,
}
_, err := r.Start()
if err != nil {
t.Fatal(err)
}
}
func TestFork_ETXTBSY(t *testing.T) {
t.Parallel()
f, err := ioutil.TempFile("", "")
if err != nil {
t.Fatal(err)
}
defer os.Remove(f.Name())
defer f.Close()
if err := f.Chmod(0777); err != nil {
t.Fatal(err)
}
echo, err := os.Open("/bin/echo")
if err != nil {
t.Fatal(err)
}
defer echo.Close()
_, err = io.Copy(f, echo)
if err != nil {
t.Fatal(err)
}
r := Runner{
Args: []string{f.Name()},
ExecFile: f.Fd(),
}
_, err = r.Start()
if err != syscall.ETXTBSY {
t.Fatal(err)
}
}
func TestFork_OK(t *testing.T) {
t.Parallel()
f, err := ioutil.TempFile("", "")
if err != nil {
t.Fatal(err)
}
defer os.Remove(f.Name())
if err := f.Chmod(0777); err != nil {
t.Fatal(err)
}
echo, err := os.Open("/bin/echo")
if err != nil {
t.Fatal(err)
}
defer echo.Close()
_, err = io.Copy(f, echo)
if err != nil {
t.Fatal(err)
}
f.Close()
r := Runner{
Args: []string{f.Name()},
}
_, err = r.Start()
if err != nil {
t.Fatal(err)
}
}