package agent import ( "io/ioutil" "net/http" "net/http/httptest" "os" "testing" "time" "github.com/hashicorp/consul/api/watch" "github.com/hashicorp/consul/sdk/testutil" ) func TestMakeWatchHandler(t *testing.T) { t.Parallel() defer os.Remove("handler_out") defer os.Remove("handler_index_out") script := "bash -c 'echo $CONSUL_INDEX >> handler_index_out && cat >> handler_out'" handler := makeWatchHandler(testutil.Logger(t), script) handler(100, []string{"foo", "bar", "baz"}) raw, err := ioutil.ReadFile("handler_out") if err != nil { t.Fatalf("err: %v", err) } if string(raw) != "[\"foo\",\"bar\",\"baz\"]\n" { t.Fatalf("bad: %s", raw) } raw, err = ioutil.ReadFile("handler_index_out") if err != nil { t.Fatalf("err: %v", err) } if string(raw) != "100\n" { t.Fatalf("bad: %s", raw) } } func TestMakeHTTPWatchHandler(t *testing.T) { t.Parallel() server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { idx := r.Header.Get("X-Consul-Index") if idx != "100" { t.Fatalf("bad: %s", idx) } // Get the first one customHeader := r.Header.Get("X-Custom") if customHeader != "abc" { t.Fatalf("bad: %s", idx) } body, err := ioutil.ReadAll(r.Body) if err != nil { t.Fatalf("err: %v", err) } if string(body) != "[\"foo\",\"bar\",\"baz\"]\n" { t.Fatalf("bad: %s", body) } w.Write([]byte("Ok, i see")) })) defer server.Close() config := watch.HttpHandlerConfig{ Path: server.URL, Header: map[string][]string{"X-Custom": {"abc", "def"}}, Timeout: time.Minute, } handler := makeHTTPWatchHandler(testutil.Logger(t), &config) handler(100, []string{"foo", "bar", "baz"}) }