From b7e54b0b41757cd36dd03fb29367b385c5fa3be0 Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Thu, 25 Dec 2014 17:21:02 +0300 Subject: [PATCH] nsenter: add tests Signed-off-by: Andrey Vagin --- namespaces/nsenter/nsenter_test.go | 70 ++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 namespaces/nsenter/nsenter_test.go diff --git a/namespaces/nsenter/nsenter_test.go b/namespaces/nsenter/nsenter_test.go new file mode 100644 index 000000000..85ee5d672 --- /dev/null +++ b/namespaces/nsenter/nsenter_test.go @@ -0,0 +1,70 @@ +package nsenter + +import ( + "fmt" + "os" + "os/exec" + "os/signal" + "strings" + "syscall" + "testing" +) + +func TestNsenterAlivePid(t *testing.T) { + args := []string{"nsenter-exec", "--nspid", fmt.Sprintf("%d", os.Getpid())} + + cmd := &exec.Cmd{ + Path: os.Args[0], + Args: args, + } + + err := cmd.Run() + if err != nil { + t.Fatal("nsenter exits with a non-zero exit status") + } +} + +func TestNsenterInvalidPid(t *testing.T) { + args := []string{"nsenter-exec", "--nspid", "-1"} + + cmd := &exec.Cmd{ + Path: os.Args[0], + Args: args, + } + + err := cmd.Run() + if err == nil { + t.Fatal("nsenter exits with a zero exit status") + } +} + +func TestNsenterDeadPid(t *testing.T) { + + c := make(chan os.Signal) + signal.Notify(c, syscall.SIGCHLD) + dead_cmd := exec.Command("true") + if err := dead_cmd.Start(); err != nil { + t.Fatal(err) + } + defer dead_cmd.Wait() + <-c // dead_cmd is zombie + + args := []string{"nsenter-exec", "--nspid", fmt.Sprintf("%d", dead_cmd.Process.Pid)} + + cmd := &exec.Cmd{ + Path: os.Args[0], + Args: args, + } + + err := cmd.Run() + if err == nil { + t.Fatal("nsenter exits with a zero exit status") + } +} + +func init() { + if strings.HasPrefix(os.Args[0], "nsenter-") { + os.Exit(0) + } + return +}