integration-cli/utils.go
6db32fde
 package main
 
 import (
 	"bytes"
 	"fmt"
 	"io"
 	"os/exec"
 	"strings"
 	"syscall"
 	"testing"
 )
 
 func getExitCode(err error) (int, error) {
 	exitCode := 0
 	if exiterr, ok := err.(*exec.ExitError); ok {
 		if procExit := exiterr.Sys().(syscall.WaitStatus); ok {
 			return procExit.ExitStatus(), nil
 		}
 	}
 	return exitCode, fmt.Errorf("failed to get exit code")
 }
 
 func runCommandWithOutput(cmd *exec.Cmd) (output string, exitCode int, err error) {
 	exitCode = 0
 	out, err := cmd.CombinedOutput()
 	if err != nil {
 		var exiterr error
 		if exitCode, exiterr = getExitCode(err); exiterr != nil {
 			// TODO: Fix this so we check the error's text.
 			// we've failed to retrieve exit code, so we set it to 127
 			exitCode = 127
 		}
 	}
 	output = string(out)
 	return
 }
 
 func runCommandWithStdoutStderr(cmd *exec.Cmd) (stdout string, stderr string, exitCode int, err error) {
 	exitCode = 0
 	var stderrBuffer bytes.Buffer
 	stderrPipe, err := cmd.StderrPipe()
 	if err != nil {
 		return "", "", -1, err
 	}
 	go io.Copy(&stderrBuffer, stderrPipe)
 	out, err := cmd.Output()
 
 	if err != nil {
 		var exiterr error
 		if exitCode, exiterr = getExitCode(err); exiterr != nil {
 			// TODO: Fix this so we check the error's text.
 			// we've failed to retrieve exit code, so we set it to 127
 			exitCode = 127
 		}
 	}
 	stdout = string(out)
 	stderr = string(stderrBuffer.Bytes())
 	return
 }
 
 func runCommand(cmd *exec.Cmd) (exitCode int, err error) {
 	exitCode = 0
 	err = cmd.Run()
 	if err != nil {
 		var exiterr error
 		if exitCode, exiterr = getExitCode(err); exiterr != nil {
 			// TODO: Fix this so we check the error's text.
 			// we've failed to retrieve exit code, so we set it to 127
 			exitCode = 127
 		}
 	}
 	return
 }
 
 func startCommand(cmd *exec.Cmd) (exitCode int, err error) {
 	exitCode = 0
 	err = cmd.Start()
 	if err != nil {
 		var exiterr error
 		if exitCode, exiterr = getExitCode(err); exiterr != nil {
 			// TODO: Fix this so we check the error's text.
 			// we've failed to retrieve exit code, so we set it to 127
 			exitCode = 127
 		}
 	}
 	return
 }
 
 func logDone(message string) {
 	fmt.Printf("[PASSED]: %s\n", message)
 }
 
 func stripTrailingCharacters(target string) string {
 	target = strings.Trim(target, "\n")
 	target = strings.Trim(target, " ")
 	return target
 }
 
 func errorOut(err error, t *testing.T, message string) {
 	if err != nil {
 		t.Fatal(message)
 	}
 }
 
 func errorOutOnNonNilError(err error, t *testing.T, message string) {
 	if err == nil {
 		t.Fatalf(message)
 	}
 }
30f22ee9
 
 func nLines(s string) int {
 	return strings.Count(s, "\n")
 }