16 var authSettings = make(map[string]string)
18 // ResetEnv resets test env
20 for k, v := range authSettings {
25 // ParseAuthSettings parses auth settings from given input
26 func ParseAuthSettings(authScript []byte) {
27 scanner := bufio.NewScanner(bytes.NewReader(authScript))
29 line := scanner.Text()
30 if 0 != strings.Index(line, "export ") {
31 log.Printf("Ignoring: %v", line)
34 toks := strings.SplitN(strings.Replace(line, "export ", "", 1), "=", 2)
36 authSettings[toks[0]] = toks[1]
38 log.Fatalf("Could not parse: %v", line)
41 log.Printf("authSettings: %v", authSettings)
44 var pythonTestDir string
46 func chdirToPythonTests() {
47 if pythonTestDir != "" {
48 if err := os.Chdir(pythonTestDir); err != nil {
49 log.Fatalf("chdir %s: %s", pythonTestDir, err)
54 if err := os.Chdir("sdk/python/tests"); err == nil {
55 pythonTestDir, err = os.Getwd()
58 if parent, err := os.Getwd(); err != nil || parent == "/" {
59 log.Fatalf("sdk/python/tests/ not found in any ancestor")
61 if err := os.Chdir(".."); err != nil {
67 // StartAPI starts test API server
73 cmd := exec.Command("python", "run_test_server.py", "start", "--auth", "admin")
75 cmd.Stderr = os.Stderr
77 authScript, err := cmd.Output()
79 log.Fatalf("%+v: %s", cmd.Args, err)
81 ParseAuthSettings(authScript)
85 // StopAPI stops test API server
91 bgRun(exec.Command("python", "run_test_server.py", "stop"))
94 // StartKeep starts the given number of keep servers,
95 // optionally with -enforce-permissions enabled.
96 // Use numKeepServers = 2 and enforcePermissions = false under all normal circumstances.
97 func StartKeep(numKeepServers int, enforcePermissions bool) {
102 cmdArgs := []string{"run_test_server.py", "start_keep", "--num-keep-servers", strconv.Itoa(numKeepServers)}
103 if enforcePermissions {
104 cmdArgs = append(cmdArgs, "--keep-enforce-permissions")
107 bgRun(exec.Command("python", cmdArgs...))
110 // StopKeep stops keep servers that were started with StartKeep.
111 // numkeepServers should be the same value that was passed to StartKeep,
112 // which is 2 under all normal circumstances.
113 func StopKeep(numKeepServers int) {
118 cmd := exec.Command("python", "run_test_server.py", "stop_keep", "--num-keep-servers", strconv.Itoa(numKeepServers))
120 cmd.Stderr = os.Stderr
121 cmd.Stdout = os.Stderr
122 if err := cmd.Run(); err != nil {
123 log.Fatalf("%+v: %s", cmd.Args, err)
127 // Start cmd, with stderr and stdout redirected to our own
128 // stderr. Return when the process exits, but do not wait for its
129 // stderr and stdout to close: any grandchild processes will continue
130 // writing to our stderr.
131 func bgRun(cmd *exec.Cmd) {
133 cmd.Stderr = os.Stderr
134 cmd.Stdout = os.Stderr
135 if err := cmd.Start(); err != nil {
136 log.Fatalf("%+v: %s", cmd.Args, err)
138 if _, err := cmd.Process.Wait(); err != nil {
139 log.Fatalf("%+v: %s", cmd.Args, err)
143 // CreateBadPath creates a tmp dir, appends given string and returns that path
144 // This will guarantee that the path being returned does not exist
145 func CreateBadPath() (badpath string, err error) {
146 tempdir, err := ioutil.TempDir("", "bad")
148 return "", fmt.Errorf("Could not create temporary directory for bad path: %v", err)
150 badpath = path.Join(tempdir, "bad")
154 // DestroyBadPath deletes the tmp dir created by the previous CreateBadPath call
155 func DestroyBadPath(badpath string) error {
156 tempdir := path.Join(badpath, "..")
157 err := os.Remove(tempdir)
159 return fmt.Errorf("Could not remove bad path temporary directory %v: %v", tempdir, err)