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