github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/access_token_lifecycle_test.go (about) 1 package db_test 2 3 import ( 4 "time" 5 6 "github.com/pf-qiu/concourse/v6/atc/db" 7 "gopkg.in/square/go-jose.v2/jwt" 8 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 ) 12 13 var _ = Describe("Access Token Lifecycle", func() { 14 var ( 15 factory db.AccessTokenFactory 16 lifecycle db.AccessTokenLifecycle 17 ) 18 19 BeforeEach(func() { 20 factory = db.NewAccessTokenFactory(dbConn) 21 lifecycle = db.NewAccessTokenLifecycle(dbConn) 22 }) 23 24 It("removes expired access tokens", func() { 25 By("having 2 expired tokens in the database") 26 tomorrow := jwt.NewNumericDate(now().Add(24 * time.Hour)) 27 yesterday := jwt.NewNumericDate(now().Add(-24 * time.Hour)) 28 factory.CreateAccessToken("expiredToken1", db.Claims{ 29 Claims: jwt.Claims{Expiry: yesterday}, 30 }) 31 factory.CreateAccessToken("expiredToken2", db.Claims{ 32 Claims: jwt.Claims{Expiry: yesterday}, 33 }) 34 factory.CreateAccessToken("activeToken", db.Claims{ 35 Claims: jwt.Claims{Expiry: tomorrow}, 36 }) 37 38 By("removing expired tokens") 39 n, err := lifecycle.RemoveExpiredAccessTokens(0) 40 Expect(err).ToNot(HaveOccurred()) 41 Expect(n).To(Equal(2), "did not delete expired tokens") 42 43 By("ensuring the active tokens are still present") 44 _, found, _ := factory.GetAccessToken("activeToken") 45 Expect(found).To(BeTrue(), "active token was removed") 46 }) 47 48 It("respects the leeway for expiration time", func() { 49 By("having a token that is 24 hours old") 50 yesterday := jwt.NewNumericDate(now().Add(-24 * time.Hour)) 51 factory.CreateAccessToken("expiredToken", db.Claims{ 52 Claims: jwt.Claims{Expiry: yesterday}, 53 }) 54 55 By("removing expired tokens with leeway of 25 hours") 56 n, err := lifecycle.RemoveExpiredAccessTokens(25 * time.Hour) 57 Expect(err).ToNot(HaveOccurred()) 58 Expect(n).To(Equal(0), "did not respect leeway") 59 }) 60 }) 61 62 func now() time.Time { 63 var t time.Time 64 dbConn.QueryRow("SELECT now()").Scan(&t) 65 return t 66 }