softshipper
softshipper

Reputation: 34071

Testing request with cookie

I wrote a cookie getter and setter. Now I want to test it, and wrote following test function.

func TestAuthorizationReader(t *testing.T) {

    tw := httptest.NewServer(testWriter())
    tr := httptest.NewServer(Use(testReader()))
    defer tw.Close()
    defer tr.Close()

    c := &http.Client{}
    rs, err := c.Get(tw.URL)
    assert.NoError(t, err, "Should not contain any error")

    // Assign cookie to client
    url, err := rs.Location()
    fmt.Print(url)
    assert.NoError(t, err, "Should not contain any error")
    //c.Jar.SetCookies(url, rs.Cookies())

}

The test fail at the second part, as output message I've got

- FAIL: TestAuthorizationReader (0.05s)
 Location:       logged_test.go:64
 Error:          No error is expected but got http: no Location header in response
 Messages:       Should not contain any error

I can not get the URL location pointer, what do I wrong here?

Upvotes: 1

Views: 1883

Answers (1)

James Henstridge
James Henstridge

Reputation: 43899

The Response.Location method returns the value of the Location response header. You would usually only expect to see this header for redirect responses, so it isn't surprising you got this error.

If you want to know the URL used to retrieve a particular response, try rs.Request.URL.String(). Even if the HTTP library followed a redirect to retrieve the document, this will look at the request used for this particular response, which is what you'd be after when determining a cookie's origin.


If you just want the client to keep track of cookies set by requests it processes though, all you should need to do is set the Jar attribute on your client. Something like this:

import "net/http/cookiejar"

...
c := &http.Client{
    Jar: cookiejar.New(nil),
}

Now cookies set in earlier responses should be set in future requests to the same origin.

Upvotes: 2

Related Questions