diff --git a/sandbox/Dockerfile b/sandbox/Dockerfile
index b70f018..3f5b76d 100644
--- a/sandbox/Dockerfile
+++ b/sandbox/Dockerfile
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style
 # license that can be found in the LICENSE file.
 
-FROM golang:1.4
+FROM golang:1.4.1
 
 # enable faketime
 RUN apt-get update && apt-get install -yq --no-install-recommends patch
@@ -11,11 +11,21 @@
 ADD write-to-stderr.patch /usr/src/go/
 RUN patch /usr/src/go/src/runtime/sys_nacl_amd64p32.s /usr/src/go/write-to-stderr.patch
 
+# add fake file system
+ADD fake_fs.lst /usr/src/go/
+RUN cd /usr/src/go && go run misc/nacl/mkzip.go -p syscall fake_fs.lst src/syscall/fstest_nacl.go
+
 # build go nacl tool chain
-# TODO(proppy): add fake filesystem
 RUN cd /usr/src/go/src && GOOS=nacl GOARCH=amd64p32 ./make.bash --no-clean
 RUN cd /usr/local/bin && curl -s -O https://storage.googleapis.com/gobuilder/sel_ldr_x86_64 && chmod 0755 sel_ldr_x86_64
 
+# add and compile tour packages
+RUN GOOS=nacl GOARCH=amd64p32 go get \
+	code.google.com/p/go-tour/pic \
+	code.google.com/p/go-tour/reader \
+	code.google.com/p/go-tour/tree \
+	code.google.com/p/go-tour/wc
+
 # add and compile sandbox daemon
 ADD . /go/src/sandbox/
 RUN go install sandbox
diff --git a/sandbox/Makefile b/sandbox/Makefile
new file mode 100644
index 0000000..72cdfc2
--- /dev/null
+++ b/sandbox/Makefile
@@ -0,0 +1,6 @@
+docker: Dockerfile
+	docker build -t playground/sandbox .
+
+test: docker
+	go test
+	docker run --rm playground/sandbox test
diff --git a/sandbox/fake_fs.lst b/sandbox/fake_fs.lst
new file mode 100644
index 0000000..d9204ca
--- /dev/null
+++ b/sandbox/fake_fs.lst
@@ -0,0 +1,11 @@
+etc	src=/etc
+	resolv.conf	src=misc/nacl/testdata/empty
+	group	src=misc/nacl/testdata/group
+	passwd	src=misc/nacl/testdata/empty
+	hosts	src=misc/nacl/testdata/hosts
+usr	src=/usr
+	src
+		go
+			lib
+				time
+					zoneinfo.zip
diff --git a/sandbox/sandbox.go b/sandbox/sandbox.go
index dbca0b1..c78c758 100644
--- a/sandbox/sandbox.go
+++ b/sandbox/sandbox.go
@@ -20,6 +20,7 @@
 	"os"
 	"os/exec"
 	"path/filepath"
+	"strings"
 	"time"
 )
 
@@ -34,6 +35,16 @@
 	Events []Event
 }
 
+func main() {
+	if len(os.Args) > 1 && os.Args[1] == "test" {
+		test()
+		return
+	}
+	http.HandleFunc("/compile", compileHandler)
+	http.HandleFunc("/_ah/health", healthHandler)
+	log.Fatal(http.ListenAndServe(":8080", nil))
+}
+
 func compileHandler(w http.ResponseWriter, r *http.Request) {
 	var req Request
 	if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
@@ -64,7 +75,7 @@
 	}
 	exe := filepath.Join(tmpDir, "a.out")
 	cmd := exec.Command("go", "build", "-o", exe, in)
-	cmd.Env = []string{"GOOS=nacl", "GOARCH=amd64p32"}
+	cmd.Env = []string{"GOOS=nacl", "GOARCH=amd64p32", "GOPATH=" + os.Getenv("GOPATH")}
 	if out, err := cmd.CombinedOutput(); err != nil {
 		if _, ok := err.(*exec.ExitError); ok {
 			// Build error.
@@ -120,8 +131,6 @@
 	fmt.Fprint(w, "ok")
 }
 
-const healthProg = `package main;import "fmt";func main(){fmt.Print("ok")}`
-
 func healthCheck() error {
 	resp, err := compileAndRun(&Request{Body: healthProg})
 	if err != nil {
@@ -136,8 +145,119 @@
 	return nil
 }
 
+const healthProg = `
+package main
+
+import "fmt"
+
+func main() { fmt.Print("ok") }
+`
+
+func test() {
+	if err := healthCheck(); err != nil {
+		log.Fatal(err)
+	}
+	for _, t := range tests {
+		resp, err := compileAndRun(&Request{Body: t.prog})
+		if err != nil {
+			log.Fatal(err)
+		}
+		if resp.Errors != "" {
+			log.Fatal(resp.Errors)
+		}
+		if len(resp.Events) != 1 || !strings.Contains(resp.Events[0].Message, t.want) {
+			log.Fatalf("unexpected output: %v, want %q", resp.Events, t.want)
+		}
+	}
+	fmt.Println("OK")
+}
+
+var tests = []struct {
+	prog, want string
+}{
+	{`
+package main
+
+import "time"
+
 func main() {
-	http.HandleFunc("/compile", compileHandler)
-	http.HandleFunc("/_ah/health", healthHandler)
-	log.Fatal(http.ListenAndServe(":8080", nil))
+	loc, err := time.LoadLocation("America/New_York")
+	if err != nil {
+		panic(err.Error())
+	}
+	println(loc.String())
+}
+	`, "America/New_York"},
+
+	{`
+package main
+
+import (
+	"fmt"
+	"time"
+)
+
+func main() {
+	fmt.Println(time.Now())
+}
+	`, "2009-11-10 23:00:00 +0000 UTC"},
+
+	{`
+package main
+
+import (
+	"fmt"
+	"time"
+)
+
+func main() {
+	t1 := time.Tick(time.Second * 3)
+	t2 := time.Tick(time.Second * 7)
+	t3 := time.Tick(time.Second * 11)
+	end := time.After(time.Second * 19)
+	want := "112131211"
+	var got []byte
+	for {
+		var c byte
+		select {
+		case <-t1:
+			c = '1'
+		case <-t2:
+			c = '2'
+		case <-t3:
+			c = '3'
+		case <-end:
+			if g := string(got); g != want {
+				fmt.Printf("got %q, want %q\n", g, want)
+			} else {
+				fmt.Println("timers fired as expected")
+			}
+			return
+		}
+		got = append(got, c)
+	}
+}
+	`, "timers fired as expected"},
+
+	{`
+package main
+
+import (
+	"code.google.com/p/go-tour/pic"
+	"code.google.com/p/go-tour/reader"
+	"code.google.com/p/go-tour/tree"
+	"code.google.com/p/go-tour/wc"
+)
+
+var (
+	_ = pic.Show
+	_ = reader.Validate
+	_ = tree.New
+	_ = wc.Test
+)
+
+func main() {
+	println("ok")
+}
+	`, "ok"},
 }
