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 }