Merge "tools/naming/simulator: port test.sh to go integration tests."
diff --git a/tools/naming/simulator/driver.go b/tools/naming/simulator/driver.go
index 34c6e91..faa02f8 100644
--- a/tools/naming/simulator/driver.go
+++ b/tools/naming/simulator/driver.go
@@ -33,12 +33,14 @@
 
 var (
 	interactive bool
+	filename    string
 	handles     map[string]*cmdState
 	jsonDict    map[string]string
 )
 
 func init() {
 	flag.BoolVar(&interactive, "interactive", true, "set interactive/batch mode")
+	flag.StringVar(&filename, "file", "", "command file")
 	handles = make(map[string]*cmdState)
 	jsonDict = make(map[string]string)
 	flag.Usage = usage
@@ -101,6 +103,17 @@
 	var shutdown veyron2.Shutdown
 	ctx, shutdown = veyron2.Init()
 
+	input := os.Stdin
+	if len(filename) > 0 {
+		f, err := os.Open(filename)
+		if err != nil {
+			fmt.Fprintf(os.Stderr, "unexpected error: %s\n", err)
+			os.Exit(1)
+		}
+		input = f
+		interactive = false
+	}
+
 	// Subprocesses commands are run by fork/execing this binary
 	// so we must test to see if this instance is a subprocess or the
 	// the original command line instance.
@@ -122,7 +135,7 @@
 	}
 	defer shell.Cleanup(os.Stderr, os.Stderr)
 
-	scanner := bufio.NewScanner(os.Stdin)
+	scanner := bufio.NewScanner(input)
 	lineno := 1
 	prompt(lineno)
 	for scanner.Scan() {
diff --git a/tools/naming/simulator/test.sh b/tools/naming/simulator/test.sh
deleted file mode 100755
index ff515d2..0000000
--- a/tools/naming/simulator/test.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-
-# Test the simulator command-line tool.
-
-source "$(go list -f {{.Dir}} v.io/core/shell/lib)/shell_test.sh"
-
-# Run the test under the security agent.
-shell_test::enable_agent "$@"
-
-readonly WORKDIR="${shell_test_WORK_DIR}"
-
-main() {
-  # Build binaries.
-  cd "${WORKDIR}"
-  PKG="v.io/core/veyron/tools/naming/simulator"
-  SIMULATOR_BIN="$(shell_test::build_go_binary ${PKG})"
-
-  local -r DIR=$(go list -f {{.Dir}} "${PKG}")
-  local file
-  for file in "${DIR}"/*.scr; do
-    echo "${file}"
-    "${VRUN}" "${SIMULATOR_BIN}" --interactive=false < "${file}" &> output || shell_test::fail "line ${LINENO}: failed for ${file}: $(cat output)"
-  done
-  shell_test::pass
-}
-
-main "$@"
diff --git a/tools/naming/simulator/ambiguity.scr b/tools/naming/simulator/testdata/ambiguity.scr
similarity index 100%
rename from tools/naming/simulator/ambiguity.scr
rename to tools/naming/simulator/testdata/ambiguity.scr
diff --git a/tools/naming/simulator/echo.scr b/tools/naming/simulator/testdata/echo.scr
similarity index 100%
rename from tools/naming/simulator/echo.scr
rename to tools/naming/simulator/testdata/echo.scr
diff --git a/tools/naming/simulator/testdata/integration_test.go b/tools/naming/simulator/testdata/integration_test.go
new file mode 100644
index 0000000..9cee3bf
--- /dev/null
+++ b/tools/naming/simulator/testdata/integration_test.go
@@ -0,0 +1,45 @@
+package testdata
+
+import (
+	"fmt"
+	"io/ioutil"
+	"os"
+	"regexp"
+	"testing"
+
+	"v.io/core/veyron/lib/modules"
+	"v.io/core/veyron/lib/testutil/integration"
+
+	_ "v.io/core/veyron/profiles/static"
+)
+
+func TestHelperProcess(t *testing.T) {
+	modules.DispatchInTest()
+}
+
+func TestSimulator(t *testing.T) {
+	env := integration.NewTestEnvironment(t)
+	defer env.Cleanup()
+	binary := env.BuildGoPkg("v.io/core/veyron/tools/naming/simulator")
+	files, err := ioutil.ReadDir(".")
+	if err != nil {
+		t.Fatal(err)
+	}
+	scripts := []string{}
+	re := regexp.MustCompile(`.*\.scr`)
+	for _, f := range files {
+		if !f.IsDir() && re.MatchString(f.Name()) {
+			scripts = append(scripts, f.Name())
+		}
+	}
+	for _, script := range scripts {
+		invocation := binary.Start("--file", script)
+		output, errorOutput := invocation.Output(), invocation.ErrorOutput()
+		if err := invocation.Wait(nil, nil); err != nil {
+			fmt.Fprintf(os.Stderr, "Script %v failed\n", script)
+			fmt.Fprintln(os.Stderr, output)
+			fmt.Fprintln(os.Stderr, errorOutput)
+			t.Fatal(err)
+		}
+	}
+}
diff --git a/tools/naming/simulator/json_example.scr b/tools/naming/simulator/testdata/json_example.scr
similarity index 100%
rename from tools/naming/simulator/json_example.scr
rename to tools/naming/simulator/testdata/json_example.scr
diff --git a/tools/naming/simulator/mt_complex.scr b/tools/naming/simulator/testdata/mt_complex.scr
similarity index 100%
rename from tools/naming/simulator/mt_complex.scr
rename to tools/naming/simulator/testdata/mt_complex.scr
diff --git a/tools/naming/simulator/mt_simple.scr b/tools/naming/simulator/testdata/mt_simple.scr
similarity index 100%
rename from tools/naming/simulator/mt_simple.scr
rename to tools/naming/simulator/testdata/mt_simple.scr
diff --git a/tools/naming/simulator/proxy.scr b/tools/naming/simulator/testdata/proxy.scr
similarity index 100%
rename from tools/naming/simulator/proxy.scr
rename to tools/naming/simulator/testdata/proxy.scr
diff --git a/tools/naming/simulator/public_echo.scr b/tools/naming/simulator/testdata/public_echo.scr
similarity index 100%
rename from tools/naming/simulator/public_echo.scr
rename to tools/naming/simulator/testdata/public_echo.scr