@@ -2,6 +2,7 @@ package e2e
2
2
3
3
import (
4
4
"bytes"
5
+ "io"
5
6
"os/exec"
6
7
"testing"
7
8
@@ -20,11 +21,10 @@ import (
20
21
// 6. Cleans up all resources created during the test, such as the ClusterRoleBinding and curl pod.
21
22
func TestOperatorControllerMetricsExportedEndpoint (t * testing.T ) {
22
23
var (
23
- token string
24
- curlPod = "curl-metrics"
25
- namespace = "olmv1-system"
26
- client = ""
27
- clients = []string {"kubectl" , "oc" }
24
+ token string
25
+ curlPod = "curl-metrics"
26
+ client = ""
27
+ clients = []string {"kubectl" , "oc" }
28
28
)
29
29
30
30
t .Log ("Looking for k8s client" )
@@ -37,15 +37,25 @@ func TestOperatorControllerMetricsExportedEndpoint(t *testing.T) {
37
37
}
38
38
}
39
39
if client == "" {
40
- t .Skip ("k8s client not found, skipping test " )
40
+ t .Fatal ("k8s client not found" )
41
41
}
42
42
t .Logf ("Using %q as k8s client" , client )
43
43
44
+ t .Log ("Determining operator-controller namespace" )
45
+ cmd := exec .Command (client , "get" , "pods" , "--all-namespaces" , "--selector=control-plane=operator-controller-controller-manager" , "--output=jsonpath={.items[0].metadata.namespace}" )
46
+ output , err := cmd .CombinedOutput ()
47
+ require .NoError (t , err , "Error creating determining operator-controller namespace: %s" , string (output ))
48
+ namespace := string (output )
49
+ if namespace == "" {
50
+ t .Fatal ("No operator-controller namespace found" )
51
+ }
52
+ t .Logf ("Using %q as operator-controller namespace" , namespace )
53
+
44
54
t .Log ("Creating ClusterRoleBinding for operator controller metrics" )
45
- cmd : = exec .Command (client , "create" , "clusterrolebinding" , "operator-controller-metrics-binding" ,
55
+ cmd = exec .Command (client , "create" , "clusterrolebinding" , "operator-controller-metrics-binding" ,
46
56
"--clusterrole=operator-controller-metrics-reader" ,
47
57
"--serviceaccount=" + namespace + ":operator-controller-controller-manager" )
48
- output , err : = cmd .CombinedOutput ()
58
+ output , err = cmd .CombinedOutput ()
49
59
require .NoError (t , err , "Error creating ClusterRoleBinding: %s" , string (output ))
50
60
51
61
defer func () {
@@ -55,8 +65,8 @@ func TestOperatorControllerMetricsExportedEndpoint(t *testing.T) {
55
65
56
66
t .Log ("Generating ServiceAccount token" )
57
67
tokenCmd := exec .Command (client , "create" , "token" , "operator-controller-controller-manager" , "-n" , namespace )
58
- tokenOutput , err := tokenCmd . Output ( )
59
- require .NoError (t , err , "Error creating token: %s" , string (tokenOutput ))
68
+ tokenOutput , tokenCombinedOutput , err := stdoutAndCombined ( tokenCmd )
69
+ require .NoError (t , err , "Error creating token: %s" , string (tokenCombinedOutput ))
60
70
token = string (bytes .TrimSpace (tokenOutput ))
61
71
62
72
t .Log ("Creating curl pod to validate the metrics endpoint" )
@@ -105,3 +115,13 @@ func TestOperatorControllerMetricsExportedEndpoint(t *testing.T) {
105
115
require .NoError (t , err , "Error calling metrics endpoint: %s" , string (output ))
106
116
require .Contains (t , string (output ), "200 OK" , "Metrics endpoint did not return 200 OK" )
107
117
}
118
+
119
+ func stdoutAndCombined (cmd * exec.Cmd ) ([]byte , []byte , error ) {
120
+ var outOnly bytes.Buffer
121
+ var outAndErr bytes.Buffer
122
+ allWriter := io .MultiWriter (& outOnly , & outAndErr )
123
+ cmd .Stderr = & outAndErr
124
+ cmd .Stdout = allWriter
125
+ err := cmd .Run ()
126
+ return outOnly .Bytes (), outAndErr .Bytes (), err
127
+ }
0 commit comments