in cmd/sidecar-e2e/main.go [211:307]
func (h *harness) validate() int {
var errors []error
text, err := ioutil.ReadFile(h.tmpDir + "/metrics.log")
if err != nil {
log.Fatal(err)
}
metrics := make(map[string]float64)
metrics["kubedns_dnsmasq_hits"] = 0
metrics["kubedns_dnsmasq_max_size"] = 0
metrics["kubedns_probe_notpresent_errors"] = 0
metrics["kubedns_probe_nxdomain_errors"] = 0
metrics["kubedns_probe_ok_errors"] = 0
for _, line := range strings.Split(string(text), "\n") {
if strings.HasPrefix(line, "#") {
continue
}
items := strings.Split(line, " ")
if len(items) < 2 {
continue
}
key := items[0]
if _, ok := metrics[key]; ok {
if val, err := strconv.ParseFloat(items[1], 64); err == nil {
metrics[key] = val
} else {
errors = append(errors,
fmt.Errorf("metric %v is not a number (%v)", key, items[1]))
}
}
}
expect := func(name string, op string, value float64) {
makeError := func() error {
return fmt.Errorf("expected %v %v %v but got %v",
name, op, value, metrics[name])
}
switch op {
case "<":
if !(metrics[name] < value) {
errors = append(errors, makeError())
}
break
case "<=":
if !(metrics[name] <= value) {
errors = append(errors, makeError())
}
break
case ">":
if !(metrics[name] > value) {
errors = append(errors, makeError())
}
break
case ">=":
if !(metrics[name] >= value) {
errors = append(errors, makeError())
}
break
case "==":
if metrics[name] != value {
errors = append(errors, makeError())
}
break
case "!=":
if metrics[name] == value {
errors = append(errors, makeError())
}
break
default:
panic(fmt.Errorf("invalid op"))
}
}
expect("kubedns_dnsmasq_hits", ">", 100)
expect("kubedns_dnsmasq_max_size", "==", 1337)
expect("kubedns_probe_notpresent_errors", ">=", 5)
expect("kubedns_probe_nxdomain_errors", ">=", 5)
expect("kubedns_probe_ok_errors", "==", 0)
if len(errors) == 0 {
log.Printf("All tests passed")
return 0
}
log.Printf("Tests failed")
for _, err := range errors {
log.Printf("error | %v", err)
}
return 1
}