func()

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
}