Skip to content

Instantly share code, notes, and snippets.

@KentaKudo
Last active August 10, 2022 15:52
Show Gist options
  • Save KentaKudo/d1612500da34f44596cd409c706722b0 to your computer and use it in GitHub Desktop.
Save KentaKudo/d1612500da34f44596cd409c706722b0 to your computer and use it in GitHub Desktop.
Table Driven Testing example of httptest
func TestHeader(t *testing.T) {
cases := []struct {
input []string
want map[string][]string
}{
{
input: []string{"X-Test: test"},
want: map[string][]string{"X-Test": []string{"test"}},
},
{
input: []string{"X-Test1: test", "X-Test2: test"},
want: map[string][]string{
"X-Test1": []string{"test"},
"X-Test2": []string{"test"},
},
},
{
input: []string{"X-Test: test1", "X-Test: test2"},
want: map[string][]string{"X-Test": []string{"test1", "test2"}},
},
}
for _, c := range cases {
handler := func(w http.ResponseWriter, r *http.Request) {
if !Subset(map[string][]string(r.Header), c.want) {
t.Errorf("Subset(%v, %v) is false", r.Header, c.want)
}
}
s := httptest.NewServer(http.HandlerFunc(handler))
sut := &Curl{
Client: s.Client(),
URL: s.URL,
Headers: c.input,
}
_, err := sut.Get(map[string]string{})
if err != nil {
t.Errorf("Unexpected error on request: %s", err)
}
s.Close()
}
}
@KentaKudo
Copy link
Author

Helper functions

func Subset(a, b map[string][]string) bool {
	for k, bhs := range b {
		ahs, ok := a[k]
		if !ok {
			return false
		}
		for _, h := range bhs {
			if !Find(ahs, h) {
				return false
			}
		}
	}
	return true
}

func Find(ss []string, s string) bool {
	sort.Strings(ss)
	return sort.SearchStrings(ss, s) != len(ss)
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment