|
|
|
|
@ -49,6 +49,8 @@ func RunTests(t *testing.T, newStorage func() storage.Storage) {
|
|
|
|
|
{"ConnectorCRUD", testConnectorCRUD}, |
|
|
|
|
{"GarbageCollection", testGC}, |
|
|
|
|
{"TimezoneSupport", testTimezones}, |
|
|
|
|
{"DeviceRequestCRUD", testDeviceRequestCRUD}, |
|
|
|
|
{"DeviceTokenCRUD", testDeviceTokenCRUD}, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -834,6 +836,82 @@ func testGC(t *testing.T, s storage.Storage) {
|
|
|
|
|
} else if err != storage.ErrNotFound { |
|
|
|
|
t.Errorf("expected storage.ErrNotFound, got %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
d := storage.DeviceRequest{ |
|
|
|
|
UserCode: storage.NewUserCode(), |
|
|
|
|
DeviceCode: storage.NewID(), |
|
|
|
|
ClientID: "client1", |
|
|
|
|
Scopes: []string{"openid", "email"}, |
|
|
|
|
PkceVerifier: storage.NewID(), |
|
|
|
|
Expiry: expiry, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := s.CreateDeviceRequest(d); err != nil { |
|
|
|
|
t.Fatalf("failed creating device request: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, tz := range []*time.Location{time.UTC, est, pst} { |
|
|
|
|
result, err := s.GarbageCollect(expiry.Add(-time.Hour).In(tz)) |
|
|
|
|
if err != nil { |
|
|
|
|
t.Errorf("garbage collection failed: %v", err) |
|
|
|
|
} else { |
|
|
|
|
if result.DeviceRequests != 0 { |
|
|
|
|
t.Errorf("expected no device garbage collection results, got %#v", result) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
//if _, err := s.GetDeviceRequest(d.UserCode); err != nil {
|
|
|
|
|
// t.Errorf("expected to be able to get auth request after GC: %v", err)
|
|
|
|
|
//}
|
|
|
|
|
} |
|
|
|
|
if r, err := s.GarbageCollect(expiry.Add(time.Hour)); err != nil { |
|
|
|
|
t.Errorf("garbage collection failed: %v", err) |
|
|
|
|
} else if r.DeviceRequests != 1 { |
|
|
|
|
t.Errorf("expected to garbage collect 1 device request, got %d", r.DeviceRequests) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//TODO add this code back once Getters are written for device requests
|
|
|
|
|
//if _, err := s.GetDeviceRequest(d.UserCode); err == nil {
|
|
|
|
|
// t.Errorf("expected device request to be GC'd")
|
|
|
|
|
//} else if err != storage.ErrNotFound {
|
|
|
|
|
// t.Errorf("expected storage.ErrNotFound, got %v", err)
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
dt := storage.DeviceToken{ |
|
|
|
|
DeviceCode: storage.NewID(), |
|
|
|
|
Status: "pending", |
|
|
|
|
Token: "foo", |
|
|
|
|
Expiry: expiry, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := s.CreateDeviceToken(dt); err != nil { |
|
|
|
|
t.Fatalf("failed creating device token: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, tz := range []*time.Location{time.UTC, est, pst} { |
|
|
|
|
result, err := s.GarbageCollect(expiry.Add(-time.Hour).In(tz)) |
|
|
|
|
if err != nil { |
|
|
|
|
t.Errorf("garbage collection failed: %v", err) |
|
|
|
|
} else { |
|
|
|
|
if result.DeviceTokens != 0 { |
|
|
|
|
t.Errorf("expected no device token garbage collection results, got %#v", result) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
//if _, err := s.GetDeviceRequest(d.UserCode); err != nil {
|
|
|
|
|
// t.Errorf("expected to be able to get auth request after GC: %v", err)
|
|
|
|
|
//}
|
|
|
|
|
} |
|
|
|
|
if r, err := s.GarbageCollect(expiry.Add(time.Hour)); err != nil { |
|
|
|
|
t.Errorf("garbage collection failed: %v", err) |
|
|
|
|
} else if r.DeviceTokens != 1 { |
|
|
|
|
t.Errorf("expected to garbage collect 1 device token, got %d", r.DeviceTokens) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//TODO add this code back once Getters are written for device tokens
|
|
|
|
|
//if _, err := s.GetDeviceRequest(d.UserCode); err == nil {
|
|
|
|
|
// t.Errorf("expected device request to be GC'd")
|
|
|
|
|
//} else if err != storage.ErrNotFound {
|
|
|
|
|
// t.Errorf("expected storage.ErrNotFound, got %v", err)
|
|
|
|
|
//}
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// testTimezones tests that backends either fully support timezones or
|
|
|
|
|
@ -881,3 +959,44 @@ func testTimezones(t *testing.T, s storage.Storage) {
|
|
|
|
|
t.Fatalf("expected expiry %v got %v", wantTime, gotTime) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func testDeviceRequestCRUD(t *testing.T, s storage.Storage) { |
|
|
|
|
d1 := storage.DeviceRequest{ |
|
|
|
|
UserCode: storage.NewUserCode(), |
|
|
|
|
DeviceCode: storage.NewID(), |
|
|
|
|
ClientID: "client1", |
|
|
|
|
Scopes: []string{"openid", "email"}, |
|
|
|
|
PkceVerifier: storage.NewID(), |
|
|
|
|
Expiry: neverExpire, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := s.CreateDeviceRequest(d1); err != nil { |
|
|
|
|
t.Fatalf("failed creating device request: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Attempt to create same DeviceRequest twice.
|
|
|
|
|
err := s.CreateDeviceRequest(d1) |
|
|
|
|
mustBeErrAlreadyExists(t, "device request", err) |
|
|
|
|
|
|
|
|
|
//No manual deletes for device requests, will be handled by garbage collection routines
|
|
|
|
|
//see testGC
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func testDeviceTokenCRUD(t *testing.T, s storage.Storage) { |
|
|
|
|
d1 := storage.DeviceToken{ |
|
|
|
|
DeviceCode: storage.NewID(), |
|
|
|
|
Status: "pending", |
|
|
|
|
Token: storage.NewID(), |
|
|
|
|
Expiry: neverExpire, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := s.CreateDeviceToken(d1); err != nil { |
|
|
|
|
t.Fatalf("failed creating device token: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Attempt to create same DeviceRequest twice.
|
|
|
|
|
err := s.CreateDeviceToken(d1) |
|
|
|
|
mustBeErrAlreadyExists(t, "device token", err) |
|
|
|
|
|
|
|
|
|
//TODO Add update / delete tests as functionality is put into main code
|
|
|
|
|
} |
|
|
|
|
|