From 66082af40fccfd5bc4a898522d5de2e08fd8ec9f Mon Sep 17 00:00:00 2001 From: James Houlahan Date: Thu, 13 Aug 2020 11:39:28 +0200 Subject: [PATCH] test: add test that cookie jar loads cookies --- internal/cookies/jar.go | 2 +- internal/cookies/jar_test.go | 56 +++++++++++++++++++++++++++++------- internal/cookies/pantry.go | 6 ++-- 3 files changed, 50 insertions(+), 14 deletions(-) diff --git a/internal/cookies/jar.go b/internal/cookies/jar.go index 5260f42d..abfaaffd 100644 --- a/internal/cookies/jar.go +++ b/internal/cookies/jar.go @@ -41,7 +41,7 @@ type GetterSetter interface { } func NewCookieJar(getterSetter GetterSetter) (*Jar, error) { - pantry := &pantry{prefs: getterSetter} + pantry := &pantry{gs: getterSetter} cookies, err := pantry.loadCookies() if err != nil { diff --git a/internal/cookies/jar_test.go b/internal/cookies/jar_test.go index 330aacb7..c26591f8 100644 --- a/internal/cookies/jar_test.go +++ b/internal/cookies/jar_test.go @@ -26,27 +26,24 @@ import ( "github.com/stretchr/testify/require" ) -func TestJar(t *testing.T) { - testCookies := []testCookie{ +func TestJarGetSet(t *testing.T) { + ts := getTestServer(t, []testCookie{ {"TestName1", "TestValue1"}, {"TestName2", "TestValue2"}, {"TestName3", "TestValue3"}, - } - - ts := getTestServer(t, testCookies...) + }) defer ts.Close() - jar, err := NewCookieJar(make(testGetterSetter)) - require.NoError(t, err) - - client := &http.Client{Jar: jar} + client := getClientWithJar(t, make(testGetterSetter)) + // Hit a server that sets some cookies. setRes, err := client.Get(ts.URL + "/set") if err != nil { t.FailNow() } require.NoError(t, setRes.Body.Close()) + // Hit a server that checks the cookies are there. getRes, err := client.Get(ts.URL + "/get") if err != nil { t.FailNow() @@ -54,11 +51,50 @@ func TestJar(t *testing.T) { require.NoError(t, getRes.Body.Close()) } +func TestJarLoad(t *testing.T) { + ts := getTestServer(t, []testCookie{ + {"TestName1", "TestValue1"}, + {"TestName2", "TestValue2"}, + {"TestName3", "TestValue3"}, + }) + defer ts.Close() + + // This will be our "persistent storage" from which the cookie jar should load cookies. + gs := make(testGetterSetter) + + // This client saves cookies to persistent storage. + oldClient := getClientWithJar(t, gs) + + // Hit a server that sets some cookies. + setRes, err := oldClient.Get(ts.URL + "/set") + if err != nil { + t.FailNow() + } + require.NoError(t, setRes.Body.Close()) + + // This client loads cookies from persistent storage. + newClient := getClientWithJar(t, gs) + + // Hit a server that checks the cookies are there. + getRes, err := newClient.Get(ts.URL + "/get") + if err != nil { + t.FailNow() + } + require.NoError(t, getRes.Body.Close()) +} + type testCookie struct { name, value string } -func getTestServer(t *testing.T, wantCookies ...testCookie) *httptest.Server { +func getClientWithJar(t *testing.T, gs GetterSetter) *http.Client { + jar, err := NewCookieJar(gs) + require.NoError(t, err) + + return &http.Client{Jar: jar} +} + +func getTestServer(t *testing.T, wantCookies []testCookie) *httptest.Server { mux := http.NewServeMux() mux.HandleFunc("/set", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { diff --git a/internal/cookies/pantry.go b/internal/cookies/pantry.go index fccd5e0a..47cdc4d6 100644 --- a/internal/cookies/pantry.go +++ b/internal/cookies/pantry.go @@ -25,7 +25,7 @@ import ( ) type pantry struct { - prefs GetterSetter + gs GetterSetter } func (p *pantry) persistCookies(url string, cookies []*http.Cookie) error { @@ -68,7 +68,7 @@ func (p *pantry) loadCookies() (map[string][]*http.Cookie, error) { type dataStructure map[string]string func (p *pantry) loadFromJSON() (dataStructure, error) { - b := p.prefs.Get(preferences.CookiesKey) + b := p.gs.Get(preferences.CookiesKey) if b == "" { return make(dataStructure), nil @@ -89,7 +89,7 @@ func (p *pantry) saveToJSON(val dataStructure) error { return err } - p.prefs.Set(preferences.CookiesKey, string(b)) + p.gs.Set(preferences.CookiesKey, string(b)) return nil }