auth
auth/session_test.go
Introduce Config and NewContext. Config is an exported struct that configures the program. It holds all the values that a Context needs. NewContext takes a Config object and builds a Context out of it.
| paddy@77 | 1 package auth |
| paddy@77 | 2 |
| paddy@77 | 3 import ( |
| paddy@77 | 4 "testing" |
| paddy@77 | 5 "time" |
| paddy@77 | 6 |
| paddy@77 | 7 "code.secondbit.org/uuid" |
| paddy@77 | 8 ) |
| paddy@77 | 9 |
| paddy@77 | 10 var sessionStores = []sessionStore{NewMemstore()} |
| paddy@77 | 11 |
| paddy@77 | 12 func compareSessions(session1, session2 Session) (success bool, field string, val1, val2 interface{}) { |
| paddy@77 | 13 if session1.ID != session2.ID { |
| paddy@77 | 14 return false, "ID", session1.ID, session2.ID |
| paddy@77 | 15 } |
| paddy@77 | 16 if session1.IP != session2.IP { |
| paddy@77 | 17 return false, "IP", session1.IP, session2.IP |
| paddy@77 | 18 } |
| paddy@77 | 19 if session1.UserAgent != session2.UserAgent { |
| paddy@77 | 20 return false, "UserAgent", session1.UserAgent, session2.UserAgent |
| paddy@77 | 21 } |
| paddy@77 | 22 if !session1.ProfileID.Equal(session2.ProfileID) { |
| paddy@77 | 23 return false, "ProfileID", session1.ProfileID, session2.ProfileID |
| paddy@77 | 24 } |
| paddy@77 | 25 if !session1.Created.Equal(session2.Created) { |
| paddy@77 | 26 return false, "Created", session1.Created, session2.Created |
| paddy@77 | 27 } |
| paddy@77 | 28 if session1.Login != session2.Login { |
| paddy@77 | 29 return false, "Login", session1.Login, session2.Login |
| paddy@77 | 30 } |
| paddy@77 | 31 if session1.Active != session2.Active { |
| paddy@77 | 32 return false, "Active", session1.Active, session2.Active |
| paddy@77 | 33 } |
| paddy@77 | 34 return true, "", nil, nil |
| paddy@77 | 35 } |
| paddy@77 | 36 |
| paddy@77 | 37 func TestSessionStoreSuccess(t *testing.T) { |
| paddy@77 | 38 t.Parallel() |
| paddy@77 | 39 session := Session{ |
| paddy@77 | 40 ID: uuid.NewID().String() + uuid.NewID().String(), |
| paddy@77 | 41 IP: "127.0.0.1", |
| paddy@77 | 42 UserAgent: "TestRunner", |
| paddy@77 | 43 ProfileID: uuid.NewID(), |
| paddy@77 | 44 Created: time.Now(), |
| paddy@77 | 45 Login: "test@example.com", |
| paddy@77 | 46 Active: true, |
| paddy@77 | 47 } |
| paddy@77 | 48 for _, store := range sessionStores { |
| paddy@77 | 49 err := store.createSession(session) |
| paddy@77 | 50 if err != nil { |
| paddy@77 | 51 t.Errorf("Error saving session to %T: %s", store, err) |
| paddy@77 | 52 } |
| paddy@77 | 53 err = store.createSession(session) |
| paddy@77 | 54 if err != ErrSessionAlreadyExists { |
| paddy@77 | 55 t.Errorf("Expected ErrSessionAlreadyExists from %T, got %s", store, err) |
| paddy@77 | 56 } |
| paddy@77 | 57 retrieved, err := store.getSession(session.ID) |
| paddy@77 | 58 if err != nil { |
| paddy@77 | 59 t.Errorf("Error retrieving session from %T: %s", store, err) |
| paddy@77 | 60 } |
| paddy@77 | 61 success, field, expectation, result := compareSessions(session, retrieved) |
| paddy@77 | 62 if !success { |
| paddy@77 | 63 t.Errorf("Expected field %s to be %v, but got %v from %T", field, expectation, result, store) |
| paddy@77 | 64 } |
| paddy@77 | 65 retrievedList, err := store.listSessions(session.ProfileID, time.Time{}, 10) |
| paddy@77 | 66 if err != nil { |
| paddy@77 | 67 t.Errorf("Error retrieving sessions by profile from %T: %s", store, err) |
| paddy@77 | 68 } |
| paddy@77 | 69 if len(retrievedList) != 1 { |
| paddy@77 | 70 t.Errorf("Expected 1 session retrieved by profile from %T, got %d", store, len(retrievedList)) |
| paddy@77 | 71 } |
| paddy@77 | 72 success, field, expectation, result = compareSessions(session, retrievedList[0]) |
| paddy@77 | 73 if !success { |
| paddy@77 | 74 t.Errorf("Expected field %s to be %v, but got %v from %T", field, expectation, result, store) |
| paddy@77 | 75 } |
| paddy@77 | 76 err = store.removeSession(session.ID) |
| paddy@77 | 77 if err != nil { |
| paddy@77 | 78 t.Errorf("Error removing session from %T: %s", store, err) |
| paddy@77 | 79 } |
| paddy@77 | 80 retrieved, err = store.getSession(session.ID) |
| paddy@77 | 81 if err != ErrSessionNotFound { |
| paddy@77 | 82 t.Errorf("Expected ErrSessionNotFound from %T, got %s", store, err) |
| paddy@77 | 83 } |
| paddy@77 | 84 retrievedList, err = store.listSessions(session.ProfileID, time.Time{}, 10) |
| paddy@77 | 85 if err != nil { |
| paddy@77 | 86 t.Errorf("Error retrieving sessions by profile from %T: %s", store, err) |
| paddy@77 | 87 } |
| paddy@77 | 88 if len(retrievedList) != 0 { |
| paddy@77 | 89 t.Errorf("Expected 0 sessions retrieved by profile from %T, got %d", store, len(retrievedList)) |
| paddy@77 | 90 } |
| paddy@77 | 91 err = store.removeSession(session.ID) |
| paddy@77 | 92 if err != ErrSessionNotFound { |
| paddy@77 | 93 t.Errorf("Expected ErrSessionNotFound from %T, got %s", store, err) |
| paddy@77 | 94 } |
| paddy@77 | 95 } |
| paddy@77 | 96 } |