139 lines
2.9 KiB
Go
139 lines
2.9 KiB
Go
package auth
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/traggo/server/model"
|
|
"github.com/traggo/server/test"
|
|
)
|
|
|
|
func TestCleanUp_stops(t *testing.T) {
|
|
db := test.InMemoryDB(t)
|
|
defer db.Close()
|
|
|
|
methodDone := make(chan struct{})
|
|
stopCleanUp := make(chan bool)
|
|
|
|
go func() {
|
|
CleanUp(db.DB, time.Microsecond*10, stopCleanUp)
|
|
methodDone <- struct{}{}
|
|
}()
|
|
|
|
stopCleanUp <- true
|
|
|
|
select {
|
|
case <-methodDone:
|
|
// expected
|
|
case <-time.After(time.Second):
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestCleanUp_removeExpiredDevices(t *testing.T) {
|
|
now := test.Time("2018-06-30T18:30:00Z")
|
|
timeDispose := fakeTime(now)
|
|
defer timeDispose()
|
|
|
|
db := test.InMemoryDB(t)
|
|
defer db.Close()
|
|
db.User(2)
|
|
db.Create(&model.Device{
|
|
ID: 1,
|
|
Token: "abc",
|
|
UserID: 2,
|
|
Name: "android 1",
|
|
Type: model.TypeShortExpiry,
|
|
ActiveAt: test.Time("2018-06-30T17:30:00Z"),
|
|
CreatedAt: test.Time("2009-06-30T18:30:00Z"),
|
|
})
|
|
db.Create(&model.Device{
|
|
ID: 2,
|
|
Token: "abc2",
|
|
UserID: 2,
|
|
Name: "android 2",
|
|
Type: model.TypeShortExpiry,
|
|
ActiveAt: test.Time("2018-06-30T17:29:59Z"),
|
|
CreatedAt: test.Time("2009-06-30T18:30:00Z"),
|
|
})
|
|
db.Create(&model.Device{
|
|
ID: 3,
|
|
Token: "abc3",
|
|
UserID: 2,
|
|
Name: "android 3",
|
|
Type: model.TypeLongExpiry,
|
|
ActiveAt: test.Time("2018-05-31T18:30:00Z"),
|
|
CreatedAt: test.Time("2009-06-30T18:30:00Z"),
|
|
})
|
|
db.Create(&model.Device{
|
|
ID: 4,
|
|
Token: "abc4",
|
|
UserID: 2,
|
|
Name: "android 4",
|
|
Type: model.TypeLongExpiry,
|
|
ActiveAt: test.Time("2018-05-31T18:29:59Z"),
|
|
CreatedAt: test.Time("2009-06-30T18:30:00Z"),
|
|
})
|
|
db.Create(&model.Device{
|
|
ID: 5,
|
|
Token: "abc5",
|
|
UserID: 2,
|
|
Name: "android 5",
|
|
Type: model.TypeNoExpiry,
|
|
ActiveAt: test.Time("2002-06-30T18:30:00Z"),
|
|
CreatedAt: test.Time("2000-06-30T18:30:00Z"),
|
|
})
|
|
|
|
stopCleanUp := make(chan bool)
|
|
|
|
go CleanUp(db.DB, time.Microsecond*10, stopCleanUp)
|
|
|
|
<-time.After(time.Millisecond * 20)
|
|
|
|
expected := []model.Device{
|
|
{
|
|
ID: 1,
|
|
Token: "abc",
|
|
UserID: 2,
|
|
Name: "android 1",
|
|
Type: model.TypeShortExpiry,
|
|
ActiveAt: test.Time("2018-06-30T17:30:00Z"),
|
|
CreatedAt: test.Time("2009-06-30T18:30:00Z"),
|
|
},
|
|
{
|
|
ID: 3,
|
|
Token: "abc3",
|
|
UserID: 2,
|
|
Name: "android 3",
|
|
Type: model.TypeLongExpiry,
|
|
ActiveAt: test.Time("2018-05-31T18:30:00Z"),
|
|
CreatedAt: test.Time("2009-06-30T18:30:00Z"),
|
|
},
|
|
{
|
|
ID: 5,
|
|
Token: "abc5",
|
|
UserID: 2,
|
|
Name: "android 5",
|
|
Type: model.TypeNoExpiry,
|
|
ActiveAt: test.Time("2002-06-30T18:30:00Z"),
|
|
CreatedAt: test.Time("2000-06-30T18:30:00Z"),
|
|
},
|
|
}
|
|
|
|
var devices []model.Device
|
|
db.Find(&devices)
|
|
assert.Equal(t, expected, devices)
|
|
stopCleanUp <- true
|
|
}
|
|
|
|
func fakeTime(t time.Time) func() {
|
|
old := timeNow
|
|
timeNow = func() time.Time {
|
|
return t
|
|
}
|
|
return func() {
|
|
timeNow = old
|
|
}
|
|
}
|