github.com/DerekStrickland/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  }