auth

Paddy 2014-09-07 Parent:5bf0a5fd1d01 Child:bd274615ce72

34:14599a5c7819 Go to Latest

auth/grant_test.go

Further grant testing. Use the %T format to return the name of the GrantStore that failed the test, rather than just returning the position of the store. Test that storing a grant twice yields an ErrGrantAlreadyExists. Test that retrieving a grant that doesn't exist yields an ErrGrantNotFound. Compare returned grants against expectations.

History
paddy@29 1 package auth
paddy@29 2
paddy@29 3 import (
paddy@29 4 "testing"
paddy@29 5 "time"
paddy@29 6
paddy@29 7 "secondbit.org/uuid"
paddy@29 8 )
paddy@29 9
paddy@29 10 var grantStores = []GrantStore{NewMemstore()}
paddy@29 11
paddy@34 12 func compareGrants(grant1, grant2 Grant) (success bool, field string, grant1val, grant2val interface{}) {
paddy@34 13 if grant1.Code != grant2.Code {
paddy@34 14 return false, "code", grant1.Code, grant2.Code
paddy@34 15 }
paddy@34 16 if !grant1.Created.Equal(grant2.Created) {
paddy@34 17 return false, "created", grant1.Created, grant2.Created
paddy@34 18 }
paddy@34 19 if grant1.ExpiresIn != grant2.ExpiresIn {
paddy@34 20 return false, "expires in", grant1.ExpiresIn, grant2.ExpiresIn
paddy@34 21 }
paddy@34 22 if !grant1.ClientID.Equal(grant2.ClientID) {
paddy@34 23 return false, "client ID", grant1.ClientID, grant2.ClientID
paddy@34 24 }
paddy@34 25 if grant1.Scope != grant2.Scope {
paddy@34 26 return false, "scope", grant1.Scope, grant2.Scope
paddy@34 27 }
paddy@34 28 if grant1.RedirectURI != grant2.RedirectURI {
paddy@34 29 return false, "redirect URI", grant1.RedirectURI, grant2.RedirectURI
paddy@34 30 }
paddy@34 31 if grant1.State != grant2.State {
paddy@34 32 return false, "state", grant1.State, grant2.State
paddy@34 33 }
paddy@34 34 return true, "", nil, nil
paddy@34 35 }
paddy@34 36
paddy@29 37 func TestGrantStoreSuccess(t *testing.T) {
paddy@29 38 grant := Grant{
paddy@29 39 Code: "code",
paddy@29 40 Created: time.Now(),
paddy@29 41 ExpiresIn: 180,
paddy@29 42 ClientID: uuid.NewID(),
paddy@29 43 Scope: "scope",
paddy@29 44 RedirectURI: "redirectURI",
paddy@29 45 State: "state",
paddy@29 46 }
paddy@34 47 for _, store := range grantStores {
paddy@29 48 err := store.SaveGrant(grant)
paddy@29 49 if err != nil {
paddy@34 50 t.Errorf("Error saving grant to %T: %s", store, err)
paddy@34 51 }
paddy@34 52 err = store.SaveGrant(grant)
paddy@34 53 if err != ErrGrantAlreadyExists {
paddy@34 54 t.Errorf("Expected ErrGrantAlreadyExists from %T, got %+v", store, err)
paddy@29 55 }
paddy@29 56 retrieved, err := store.GetGrant(grant.Code)
paddy@29 57 if err != nil {
paddy@34 58 t.Errorf("Error retrieving grant from %T: %s", store, err)
paddy@29 59 }
paddy@34 60 match, field, expectation, result := compareGrants(grant, retrieved)
paddy@34 61 if !match {
paddy@34 62 t.Errorf("Expected `%v` in the `%s` field of grant retrieved from %T, got `%v`", expectation, field, store, result)
paddy@34 63 }
paddy@29 64 err = store.DeleteGrant(grant.Code)
paddy@29 65 if err != nil {
paddy@34 66 t.Errorf("Error removing grant from %T: %s", store, err)
paddy@29 67 }
paddy@29 68 retrieved, err = store.GetGrant(grant.Code)
paddy@29 69 if err != ErrGrantNotFound {
paddy@34 70 t.Errorf("Expected ErrGrantNotFound from %T, got %+v and %+v", store, retrieved, err)
paddy@34 71 }
paddy@34 72 err = store.DeleteGrant(grant.Code)
paddy@34 73 if err != ErrGrantNotFound {
paddy@34 74 t.Errorf("Expected ErrGrantNotFound from %T, got %+v", store, err)
paddy@29 75 }
paddy@29 76 }
paddy@29 77 }