github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/integration/helpers/command.go (about)

     1  package helpers
     2  
     3  import (
     4  	"io"
     5  	"os"
     6  	"os/exec"
     7  	"strings"
     8  
     9  	. "github.com/onsi/ginkgo"
    10  	. "github.com/onsi/gomega"
    11  	. "github.com/onsi/gomega/gexec"
    12  )
    13  
    14  const (
    15  	DebugCommandPrefix = "\nCMD>"
    16  	DebugOutPrefix     = "OUT: "
    17  	DebugErrPrefix     = "ERR: "
    18  )
    19  
    20  func CF(args ...string) *Session {
    21  	WriteCommand(args)
    22  	session, err := Start(
    23  		exec.Command("cf", args...),
    24  		NewPrefixedWriter(DebugOutPrefix, GinkgoWriter),
    25  		NewPrefixedWriter(DebugErrPrefix, GinkgoWriter))
    26  	Expect(err).NotTo(HaveOccurred())
    27  	return session
    28  }
    29  
    30  type CFEnv struct {
    31  	WorkingDirectory string
    32  	EnvVars          map[string]string
    33  	stdin            io.Reader
    34  }
    35  
    36  func CustomCF(cfEnv CFEnv, args ...string) *Session {
    37  	command := exec.Command("cf", args...)
    38  	if cfEnv.stdin != nil {
    39  		command.Stdin = cfEnv.stdin
    40  	}
    41  	if cfEnv.WorkingDirectory != "" {
    42  		command.Dir = cfEnv.WorkingDirectory
    43  	}
    44  
    45  	if cfEnv.EnvVars != nil {
    46  		env := os.Environ()
    47  		for key, val := range cfEnv.EnvVars {
    48  			env = AddOrReplaceEnvironment(env, key, val)
    49  		}
    50  		command.Env = env
    51  	}
    52  
    53  	WriteCommand(args)
    54  	session, err := Start(
    55  		command,
    56  		NewPrefixedWriter(DebugOutPrefix, GinkgoWriter),
    57  		NewPrefixedWriter(DebugErrPrefix, GinkgoWriter))
    58  	Expect(err).NotTo(HaveOccurred())
    59  	return session
    60  }
    61  
    62  func DebugCustomCF(cfEnv CFEnv, args ...string) *Session {
    63  	if cfEnv.EnvVars == nil {
    64  		cfEnv.EnvVars = map[string]string{}
    65  	}
    66  	cfEnv.EnvVars["CF_LOG_LEVEL"] = "debug"
    67  
    68  	return CustomCF(cfEnv, args...)
    69  }
    70  
    71  func CFWithStdin(stdin io.Reader, args ...string) *Session {
    72  	WriteCommand(args)
    73  	command := exec.Command("cf", args...)
    74  	command.Stdin = stdin
    75  	session, err := Start(
    76  		command,
    77  		NewPrefixedWriter(DebugOutPrefix, GinkgoWriter),
    78  		NewPrefixedWriter(DebugErrPrefix, GinkgoWriter))
    79  	Expect(err).NotTo(HaveOccurred())
    80  	return session
    81  }
    82  
    83  func CFWithEnv(envVars map[string]string, args ...string) *Session {
    84  	return CustomCF(CFEnv{EnvVars: envVars}, args...)
    85  }
    86  
    87  func WriteCommand(args []string) {
    88  	display := append([]string{DebugCommandPrefix, "cf"}, args...)
    89  	GinkgoWriter.Write([]byte(strings.Join(append(display, "\n"), " ")))
    90  }