github.com/kjdelisle/consul@v1.4.5/agent/watch_handler_test.go (about) 1 package agent 2 3 import ( 4 "io/ioutil" 5 "net/http" 6 "net/http/httptest" 7 "os" 8 "testing" 9 "time" 10 11 "github.com/hashicorp/consul/watch" 12 ) 13 14 func TestMakeWatchHandler(t *testing.T) { 15 t.Parallel() 16 defer os.Remove("handler_out") 17 defer os.Remove("handler_index_out") 18 script := "bash -c 'echo $CONSUL_INDEX >> handler_index_out && cat >> handler_out'" 19 handler := makeWatchHandler(os.Stderr, script) 20 handler(100, []string{"foo", "bar", "baz"}) 21 raw, err := ioutil.ReadFile("handler_out") 22 if err != nil { 23 t.Fatalf("err: %v", err) 24 } 25 if string(raw) != "[\"foo\",\"bar\",\"baz\"]\n" { 26 t.Fatalf("bad: %s", raw) 27 } 28 raw, err = ioutil.ReadFile("handler_index_out") 29 if err != nil { 30 t.Fatalf("err: %v", err) 31 } 32 if string(raw) != "100\n" { 33 t.Fatalf("bad: %s", raw) 34 } 35 } 36 37 func TestMakeHTTPWatchHandler(t *testing.T) { 38 t.Parallel() 39 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 40 idx := r.Header.Get("X-Consul-Index") 41 if idx != "100" { 42 t.Fatalf("bad: %s", idx) 43 } 44 // Get the first one 45 customHeader := r.Header.Get("X-Custom") 46 if customHeader != "abc" { 47 t.Fatalf("bad: %s", idx) 48 } 49 body, err := ioutil.ReadAll(r.Body) 50 if err != nil { 51 t.Fatalf("err: %v", err) 52 } 53 if string(body) != "[\"foo\",\"bar\",\"baz\"]\n" { 54 t.Fatalf("bad: %s", body) 55 } 56 w.Write([]byte("Ok, i see")) 57 })) 58 defer server.Close() 59 config := watch.HttpHandlerConfig{ 60 Path: server.URL, 61 Header: map[string][]string{"X-Custom": {"abc", "def"}}, 62 Timeout: time.Minute, 63 } 64 handler := makeHTTPWatchHandler(os.Stderr, &config) 65 handler(100, []string{"foo", "bar", "baz"}) 66 }