Skip to content

Commit 957f8ba

Browse files
committed
add some basic darwin tests
1 parent 9687936 commit 957f8ba

4 files changed

Lines changed: 90 additions & 21 deletions

File tree

pkg/sandbox/chrootenv_linux.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,22 @@ func (chr *chroot) Cleanup() (err error) {
146146
}
147147
return nil
148148
}
149+
150+
func (s Sandbox) runExecStep() {
151+
cmd := exec.Cmd{
152+
Path: s.Path,
153+
Dir: s.Dir,
154+
Args: append([]string{s.Path}, s.Args...),
155+
Env: os.Environ(),
156+
157+
// We don't use the passed sandbox stdio because
158+
// it's been passed to the very first run command
159+
Stdin: os.Stdin,
160+
Stdout: os.Stdout,
161+
Stderr: os.Stderr,
162+
}
163+
if err := cmd.Run(); err != nil {
164+
fmt.Println(err.Error())
165+
os.Exit(1)
166+
}
167+
}

pkg/sandbox/sandbox.go

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"fmt"
88
"io"
99
"os"
10-
"os/exec"
1110
"os/signal"
1211
"syscall"
1312

@@ -120,22 +119,3 @@ func interruptContext() context.Context {
120119
}()
121120
return ctx
122121
}
123-
124-
func (s Sandbox) runExecStep() {
125-
cmd := exec.Cmd{
126-
Path: s.Path,
127-
Dir: s.Dir,
128-
Args: append([]string{s.Path}, s.Args...),
129-
Env: os.Environ(),
130-
131-
// We don't use the passed sandbox stdio because
132-
// it's been passed to the very first run command
133-
Stdin: os.Stdin,
134-
Stdout: os.Stdout,
135-
Stderr: os.Stderr,
136-
}
137-
if err := cmd.Run(); err != nil {
138-
fmt.Println(err.Error())
139-
os.Exit(1)
140-
}
141-
}

pkg/sandbox/sandbox_darwin.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
// +build darwin
2+
23
package sandbox
34

45
import (
56
"os/exec"
67
)
78

89
func (s Sandbox) runCommand() (*exec.Cmd, error) {
9-
return exec.Command("sandbox-exec"), nil
10+
profile := `(version 1)
11+
(deny default)
12+
(allow process-exec*)
13+
(import "/System/Library/Sandbox/Profiles/bsd.sb")`
14+
if !s.DisableNetwork {
15+
profile += `(allow network*)`
16+
}
17+
cmd := exec.Command("sandbox-exec", "-p", profile, s.Path)
18+
cmd.Args = append(cmd.Args, s.Args...)
19+
cmd.Dir = s.Dir
20+
cmd.Env = s.Env
21+
cmd.Stderr = s.Stderr
22+
cmd.Stdout = s.Stdout
23+
cmd.Stdin = s.Stdin
24+
return cmd, nil
1025
}
1126

1227
func firstArgMatchesStep() bool {

pkg/sandbox/sandbox_darwin_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// +build darwin
2+
3+
package sandbox
4+
5+
import (
6+
"bytes"
7+
"context"
8+
"os"
9+
"testing"
10+
11+
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/require"
13+
)
14+
15+
func TestSandbox_runCommand(t *testing.T) {
16+
t.Run("no network", func(t *testing.T) {
17+
var buf bytes.Buffer
18+
sbx := Sandbox{
19+
Stdout: os.Stdout,
20+
Stderr: &buf,
21+
DisableNetwork: true,
22+
Path: "/sbin/ping",
23+
Args: []string{"-c1", "google.com"},
24+
Dir: "/Users/maxm/go/src/github.com/maxmcd/bramble", //TODO
25+
}
26+
require.Error(t, sbx.Run(context.Background()))
27+
assert.Contains(t, buf.String(), "Unknown host")
28+
})
29+
t.Run("yes network", func(t *testing.T) {
30+
var buf bytes.Buffer
31+
sbx := Sandbox{
32+
Stdout: &buf,
33+
Stderr: os.Stderr,
34+
DisableNetwork: false,
35+
Path: "/sbin/ping",
36+
Args: []string{"-c1", "google.com"},
37+
Dir: "/Users/maxm/go/src/github.com/maxmcd/bramble", //TODO
38+
}
39+
require.NoError(t, sbx.Run(context.Background()))
40+
assert.Contains(t, buf.String(), "0.0% packet loss")
41+
})
42+
t.Run("hllo wrld", func(t *testing.T) {
43+
var buf bytes.Buffer
44+
sbx := Sandbox{
45+
Stdout: &buf,
46+
Stderr: os.Stderr,
47+
DisableNetwork: true,
48+
Path: "/bin/echo",
49+
Args: []string{"hi"},
50+
Dir: "/Users/maxm/go/src/github.com/maxmcd/bramble", //TODO
51+
}
52+
require.NoError(t, sbx.Run(context.Background()))
53+
assert.Equal(t, buf.String(), "hi\n")
54+
})
55+
}

0 commit comments

Comments
 (0)