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  }