Skip to content

Commit

Permalink
[e2e][flexible-ipam] Fix TestPrometheus failed (#3868)
Browse files Browse the repository at this point in the history
Signed-off-by: gran <gran@vmware.com>
  • Loading branch information
gran-vmv committed Jun 9, 2022
1 parent 968b330 commit dcd1019
Showing 1 changed file with 52 additions and 21 deletions.
73 changes: 52 additions & 21 deletions test/e2e/prometheus_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"github.com/prometheus/common/expfmt"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
)

// Agent metrics to validate
Expand Down Expand Up @@ -140,16 +141,31 @@ func getMetricsFromAPIServer(t *testing.T, url string, token string) string {
req.Header.Add("Authorization", "Bearer "+token)
}

// Query metrics via HTTPS from Pod
resp, err := client.Do(req)
if err != nil {
t.Fatalf("Error fetching metrics from %s: %v", url, err)
}
defer resp.Body.Close()
var body []byte
err = wait.PollImmediate(defaultInterval, defaultTimeout, func() (bool, error) {
// Query metrics via HTTPS from Pod
resp, err := client.Do(req)
if err != nil {
t.Fatalf("Error fetching metrics from %s: %v", url, err)
}
defer resp.Body.Close()

body = []byte{}
body, err = ioutil.ReadAll(resp.Body)
if err != nil {
t.Fatalf("Error retrieving metrics from %s. response: %v", url, err)
}

body, err := ioutil.ReadAll(resp.Body)
if resp.StatusCode >= 300 {
// Handle unexpected StatusCode returned when prometheus is not ready
// TODO: RCA the reason of resp.StatusCode=401
t.Logf("Response StatusCode: %d, Body: %s", resp.StatusCode, string(body))
return false, nil
}
return true, nil
})
if err != nil {
t.Fatalf("Error retrieving metrics from %s. response: %v", url, err)
t.Fatalf("Wrong StatusCode from Prometheus: %v", err)
}

return string(body)
Expand Down Expand Up @@ -268,22 +284,37 @@ func testMetricsFromPrometheusServer(t *testing.T, data *TestData, prometheusJob
queryURL := fmt.Sprintf("http://%s/api/v1/targets/metadata?%s", address, path)

client := &http.Client{}
resp, err := client.Get(queryURL)
if err != nil {
t.Fatalf("Error fetching metrics from %s: %v", queryURL, err)
}
defer resp.Body.Close()
var output prometheusServerOutput
err := wait.PollImmediate(defaultInterval, defaultTimeout, func() (bool, error) {
resp, err := client.Get(queryURL)
if err != nil {
// Retry when accessing prometheus failed for flexible-ipam
t.Logf("Error fetching metrics from %s: %v", queryURL, err)
return false, nil
}
defer resp.Body.Close()

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
t.Fatalf("Failed to retrieve JSON data from Prometheus: %v", err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
t.Fatalf("Failed to retrieve JSON data from Prometheus: %v", err)
}

// Parse JSON results
var output prometheusServerOutput
err = json.Unmarshal(body, &output)
// Parse JSON results
output = prometheusServerOutput{}
err = json.Unmarshal(body, &output)
if err != nil {
t.Fatalf("Failed to parse JSON data from Prometheus: %v", err)
}
if len(output.Data) == 0 {
// Handle empty output data returned when prometheus is not ready
// TODO: RCA the reason of empty result
t.Logf("No output data from Prometheus: %v", err)
return false, nil
}
return true, nil
})
if err != nil {
t.Fatalf("Failed to parse JSON data from Prometheus: %v", err)
t.Fatalf("No output data from Prometheus: %v", err)
}

// Create a map of all the metrics which were found on the server
Expand Down

0 comments on commit dcd1019

Please sign in to comment.