From 7600dd9dd676e9414c27f1e4dc8dd0dab1f88601 Mon Sep 17 00:00:00 2001
From: Liz Rice <liz@lizrice.com>
Date: Wed, 30 Aug 2017 17:51:28 +0100
Subject: [PATCH] =?UTF-8?q?Make=20the=20ps=20/=20fakeps=20function=20globa?=
 =?UTF-8?q?l=20so=20we=20don=E2=80=99t=20have=20to=20pass=20it=20around=20?=
 =?UTF-8?q?so=20much?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 cmd/common.go    |  2 +-
 cmd/util.go      | 14 +++++++++++---
 cmd/util_test.go |  8 ++++++--
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/cmd/common.go b/cmd/common.go
index 89f45bc..b3df7b9 100644
--- a/cmd/common.go
+++ b/cmd/common.go
@@ -165,7 +165,7 @@ func verifyNodeType(t check.NodeType) {
 	}
 
 	for _, bin := range bins {
-		if !verifyBin(bin, ps) {
+		if !verifyBin(bin) {
 			printlnWarn(fmt.Sprintf("%s is not running", bin))
 		}
 	}
diff --git a/cmd/util.go b/cmd/util.go
index bd12398..87b13f0 100644
--- a/cmd/util.go
+++ b/cmd/util.go
@@ -22,6 +22,14 @@ var (
 	}
 )
 
+var psFunc func(string) string
+var statFunc func(string) (os.FileInfo, error)
+
+func init() {
+	psFunc = ps
+	statFunc = os.Stat
+}
+
 func printlnWarn(msg string) {
 	fmt.Fprintf(os.Stderr, "[%s] %s\n",
 		colors[check.WARN].Sprintf("%s", check.WARN),
@@ -76,7 +84,7 @@ func ps(proc string) string {
 }
 
 // verifyBin checks that the binary specified is running
-func verifyBin(bin string, psFunc func(string) string) bool {
+func verifyBin(bin string) bool {
 
 	// Strip any quotes
 	bin = strings.Trim(bin, "'\"")
@@ -103,9 +111,9 @@ func verifyBin(bin string, psFunc func(string) string) bool {
 }
 
 // findExecutable looks through a list of possible executable names and finds the first one that's running
-func findExecutable(candidates []string, psFunc func(string) string) (string, error) {
+func findExecutable(candidates []string) (string, error) {
 	for _, c := range candidates {
-		if verifyBin(c, psFunc) {
+		if verifyBin(c) {
 			return c, nil
 		}
 	}
diff --git a/cmd/util_test.go b/cmd/util_test.go
index 5da91de..659dd2e 100644
--- a/cmd/util_test.go
+++ b/cmd/util_test.go
@@ -97,10 +97,11 @@ func TestVerifyBin(t *testing.T) {
 		{proc: "cmd param", psOut: "cmd", exp: false},
 	}
 
+	psFunc = fakeps
 	for id, c := range cases {
 		t.Run(strconv.Itoa(id), func(t *testing.T) {
 			g = c.psOut
-			v := verifyBin(c.proc, fakeps)
+			v := verifyBin(c.proc)
 			if v != c.exp {
 				t.Fatalf("Expected %v got %v", c.exp, v)
 			}
@@ -120,12 +121,15 @@ func TestFindExecutable(t *testing.T) {
 		{candidates: []string{"one double", "two double", "three double"}, psOut: "two double is running", exp: "two double"},
 		{candidates: []string{"one", "two", "three"}, psOut: "blah", expErr: true},
 		{candidates: []string{"one double", "two double", "three double"}, psOut: "two", expErr: true},
+		{candidates: []string{"apiserver", "kube-apiserver"}, psOut: "kube-apiserver", exp: "kube-apiserver"},
+		{candidates: []string{"apiserver", "kube-apiserver", "hyperkube-apiserver"}, psOut: "kube-apiserver", exp: "kube-apiserver"},
 	}
 
+	psFunc = fakeps
 	for id, c := range cases {
 		t.Run(strconv.Itoa(id), func(t *testing.T) {
 			g = c.psOut
-			e, err := findExecutable(c.candidates, fakeps)
+			e, err := findExecutable(c.candidates)
 			if e != c.exp {
 				t.Fatalf("Expected %v got %v", c.exp, e)
 			}
-- 
GitLab