github.com/taubyte/tau-cli@v0.1.13-0.20240326000942-487f0d57edfc/tests/run_test.go (about) 1 //go:build !cover 2 3 package tests 4 5 import ( 6 "bytes" 7 "fmt" 8 "os" 9 "os/exec" 10 "path" 11 "path/filepath" 12 "syscall" 13 "time" 14 15 "github.com/taubyte/tau-cli/constants" 16 ) 17 18 func takeCover() func() { 19 return func() {} 20 } 21 22 func (r *roadRunner) Run(args ...string) (error, int, string, string) { 23 cwd, err := os.Getwd() 24 if err != nil { 25 return fmt.Errorf("getting cwd failed with: %s", err), 1, "", "" 26 } 27 28 _cmd := exec.Command(path.Join(cwd, "tau-cli"), args...) 29 _cmd.Dir, _ = filepath.Abs(r.dir) 30 r.env[constants.TauConfigFileNameEnvVarName] = r.configFile 31 r.env[constants.TauSessionLocationEnvVarName] = r.sessionFile 32 if r.authUrl != "" { 33 // All the tests run with localAuthClient tag, but if the mock tag is false 34 // the url is still set to the auth.taubyte.com url 35 r.env[constants.AuthURLEnvVarName] = r.authUrl 36 } 37 38 _cmd.Env = os.Environ() 39 40 for k, v := range r.env { 41 _cmd.Env = append(_cmd.Env, fmt.Sprintf("%s=%s", k, v)) 42 } 43 44 // Capture command output 45 var out bytes.Buffer 46 var errOut bytes.Buffer 47 _cmd.Stdout = &out 48 _cmd.Stderr = &errOut 49 50 // Start the command 51 err = _cmd.Start() 52 if err != nil { 53 return fmt.Errorf("Command failed to start %s", err.Error()), 1, "", "" 54 } 55 56 // Kill the command after the timeout 57 done := make(chan bool) 58 go func() { 59 select { 60 case <-time.After(r.waitTime): 61 err = _cmd.Process.Kill() 62 if err != nil { 63 panic(err) 64 } 65 case <-done: 66 return 67 } 68 }() 69 70 // Wait for the command to finish 71 err = _cmd.Wait() 72 if err != nil { 73 exiterr := err.(*exec.ExitError) 74 status := exiterr.Sys().(syscall.WaitStatus) 75 return err, status.ExitStatus(), out.String(), errOut.String() 76 } 77 return nil, 0, out.String(), errOut.String() 78 }