}
checkRegistryResults(expectedResults, mfs, t)
}
+
+var c = &Config{
+ Modules: map[string]Module{
+ "http_2xx": Module{
+ Prober: "http",
+ Timeout: 10 * time.Second,
+ },
+ },
+}
+
+func TestPrometheusTimeoutHTTP(t *testing.T) {
+
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ time.Sleep(2 * time.Second)
+ }))
+ defer ts.Close()
+
+ req, err := http.NewRequest("GET", "?target="+ts.URL, nil)
+ if err != nil {
+ t.Fatal(err)
+ }
+ req.Header.Set("X-Prometheus-Scrape-Timeout-Seconds", "1")
+
+ rr := httptest.NewRecorder()
+ handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ probeHandler(w, r, c)
+ })
+
+ handler.ServeHTTP(rr, req)
+
+ if status := rr.Code; status != http.StatusOK {
+ t.Errorf("probe request handler returned wrong status code: %v, want %v", status, http.StatusOK)
+ }
+}
+++ /dev/null
-package main
-
-import (
- "net/http"
- "net/http/httptest"
- "testing"
- "time"
-)
-
-var c = &Config{
- Modules: map[string]Module{
- "http_2xx": Module{
- Prober: "http",
- Timeout: 10 * time.Second,
- },
- },
-}
-
-func TestPrometheusTimeout(t *testing.T) {
-
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- time.Sleep(2 * time.Second)
- }))
- defer ts.Close()
-
- req, err := http.NewRequest("GET", "?target="+ts.URL, nil)
- if err != nil {
- t.Fatal(err)
- }
- req.Header.Set("X-Prometheus-Scrape-Timeout-Seconds", "1")
-
- rr := httptest.NewRecorder()
- handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- probeHandler(w, r, c)
- })
-
- handler.ServeHTTP(rr, req)
-
- if status := rr.Code; status != http.StatusOK {
- t.Errorf("probe request handler returned wrong status code: %v, want %v", status, http.StatusOK)
- }
-}
}
checkRegistryResults(expectedResults, mfs, t)
}
+
+func TestPrometheusTimeoutTCP(t *testing.T) {
+ ln, err := net.Listen("tcp", "localhost:0")
+ if err != nil {
+ t.Fatalf("Error listening on socket: %s", err)
+ }
+ defer ln.Close()
+
+ ch := make(chan (struct{}))
+ go func() {
+ conn, err := ln.Accept()
+ if err != nil {
+ t.Fatalf("Error accepting on socket: %s", err)
+ }
+ conn.Close()
+ ch <- struct{}{}
+ }()
+ testCTX, cancel := context.WithTimeout(context.Background(), 2*time.Second)
+ defer cancel()
+ registry := prometheus.NewRegistry()
+ if probeTCP(testCTX, ln.Addr().String(), Module{TCP: TCPProbe{
+ QueryResponse: []QueryResponse{
+ {
+ Expect: "SSH-2.0-(OpenSSH_6.9p1) Debian-2",
+ },
+ },
+ }}, registry) {
+ t.Fatalf("TCP module succeeded, expected timeout failure.")
+ }
+ <-ch
+}