auth

Paddy 2014-10-22 Parent:28d48fdb0dd1 Child:a5987795707e

54:0f80a3e391b8 Go to Latest

auth/http_test.go

Update CheckEndpoints for strict checking, add CountEndpoints. Create a "strict" mode for CheckEndpoints that will only return true on an exact match, and update the memstore implementation accordingly. Add tests to make sure that the strict mode is adhered to. We need this mode because in certain situations (e.g., the client has more than one endpoint registered), the spec demands a full-string comparison. Add a CountEndpoints method to the ClientStore that will return the number of endpoints registered for a specific client. As we just mentioned, the rules for how a redirect URI is validated depend upon the number of endpoints a client has registered, so we need to be able to get at that number.

History
paddy@52 1 package auth
paddy@52 2
paddy@52 3 import (
paddy@52 4 "html/template"
paddy@52 5 "net/http"
paddy@52 6 "net/http/httptest"
paddy@53 7 "net/url"
paddy@52 8 "testing"
paddy@52 9 )
paddy@52 10
paddy@53 11 const (
paddy@53 12 scopeSet = 1 << iota
paddy@53 13 stateSet
paddy@53 14 uriSet
paddy@53 15 )
paddy@53 16
paddy@52 17 func TestGetGrantCodeSuccess(t *testing.T) {
paddy@52 18 t.Parallel()
paddy@52 19 store := NewMemstore()
paddy@52 20 testContext := Context{
paddy@52 21 template: template.Must(template.New(getGrantTemplateName).Parse("Get auth grant")),
paddy@52 22 clients: store,
paddy@52 23 grants: store,
paddy@52 24 profiles: store,
paddy@52 25 tokens: store,
paddy@52 26 }
paddy@52 27 req, err := http.NewRequest("GET", "https://test.auth.secondbit.org/oauth2/grant", nil)
paddy@52 28 if err != nil {
paddy@52 29 t.Fatal("Can't build request:", err)
paddy@52 30 }
paddy@53 31 for i := 0; i < 1<<3; i++ {
paddy@53 32 w := httptest.NewRecorder()
paddy@53 33 params := url.Values{}
paddy@53 34 // see OAuth 2.0 spec, section 4.1.1
paddy@53 35 params.Set("response_type", "code")
paddy@53 36 params.Set("client_id", "test_client_id")
paddy@53 37 if i&uriSet != 0 {
paddy@53 38 params.Set("redirect_uri", "https://test.secondbit.org/redirect")
paddy@53 39 }
paddy@53 40 if i&scopeSet != 0 {
paddy@53 41 params.Set("scope", "testscope")
paddy@53 42 }
paddy@53 43 if i&stateSet != 0 {
paddy@53 44 params.Set("state", "my super secure state string")
paddy@53 45 }
paddy@53 46 req.URL.RawQuery = params.Encode()
paddy@53 47 GetGrantHandler(w, req, testContext)
paddy@53 48 if w.Code != http.StatusOK {
paddy@53 49 t.Errorf("Expected status code to be %d, got %d for %s", http.StatusOK, w.Code, req.URL.String())
paddy@53 50 }
paddy@53 51 if w.Body.String() != "Get auth grant" {
paddy@53 52 t.Errorf("Expected body to be `%s`, got `%s` for %s", "Get auth grant", w.Body.String(), req.URL.String())
paddy@53 53 }
paddy@52 54 }
paddy@52 55 }