github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/gc/resource_config_check_session_collector_test.go (about) 1 package gc_test 2 3 import ( 4 "context" 5 "time" 6 7 sq "github.com/Masterminds/squirrel" 8 "github.com/pf-qiu/concourse/v6/atc" 9 "github.com/pf-qiu/concourse/v6/atc/db" 10 "github.com/pf-qiu/concourse/v6/atc/db/dbtest" 11 "github.com/pf-qiu/concourse/v6/atc/gc" 12 13 . "github.com/onsi/ginkgo" 14 . "github.com/onsi/gomega" 15 ) 16 17 var _ = Describe("ResourceConfigCheckSessionCollector", func() { 18 var ( 19 collector GcCollector 20 resourceConfigCheckSessionLifecycle db.ResourceConfigCheckSessionLifecycle 21 ownerExpiries db.ContainerOwnerExpiries 22 ) 23 24 BeforeEach(func() { 25 resourceConfigCheckSessionLifecycle = db.NewResourceConfigCheckSessionLifecycle(dbConn) 26 resourceConfigFactory = db.NewResourceConfigFactory(dbConn, lockFactory) 27 collector = gc.NewResourceConfigCheckSessionCollector(resourceConfigCheckSessionLifecycle) 28 }) 29 30 Describe("Run", func() { 31 var scenario *dbtest.Scenario 32 var resourceConfig db.ResourceConfig 33 34 var owner db.ContainerOwner 35 36 ownerExpiries = db.ContainerOwnerExpiries{ 37 Min: 10 * time.Second, 38 Max: 10 * time.Second, 39 } 40 41 BeforeEach(func() { 42 scenario = dbtest.Setup( 43 builder.WithBaseWorker(), 44 builder.WithPipeline(atc.Config{ 45 Resources: atc.ResourceConfigs{ 46 { 47 Name: "some-resource", 48 Type: dbtest.BaseResourceType, 49 Source: atc.Source{"some": "source"}, 50 }, 51 }, 52 }), 53 builder.WithResourceVersions("some-resource", atc.Version{"some": "version"}), 54 ) 55 56 resource := scenario.Resource("some-resource") 57 58 var found bool 59 var err error 60 resourceConfig, found, err = resourceConfigFactory.FindResourceConfigByID(resource.ResourceConfigID()) 61 Expect(err).ToNot(HaveOccurred()) 62 Expect(found).To(BeTrue()) 63 64 owner = db.NewResourceConfigCheckSessionContainerOwner( 65 resourceConfig.ID(), 66 resourceConfig.OriginBaseResourceType().ID, 67 ownerExpiries, 68 ) 69 70 _, err = scenario.Workers[0].CreateContainer(owner, db.ContainerMetadata{}) 71 Expect(err).NotTo(HaveOccurred()) 72 }) 73 74 resourceConfigCheckSessionExists := func(resourceConfig db.ResourceConfig) bool { 75 var count int 76 err = psql.Select("COUNT(*)"). 77 From("resource_config_check_sessions"). 78 Where(sq.Eq{"resource_config_id": resourceConfig.ID()}). 79 RunWith(dbConn). 80 QueryRow(). 81 Scan(&count) 82 Expect(err).NotTo(HaveOccurred()) 83 return count == 1 84 } 85 86 JustBeforeEach(func() { 87 Expect(collector.Run(context.TODO())).To(Succeed()) 88 }) 89 90 Context("when the resource is active", func() { 91 It("keeps the resource config check session", func() { 92 Expect(resourceConfigCheckSessionExists(resourceConfig)).To(BeTrue()) 93 }) 94 }) 95 96 Context("when the resource config check session is expired", func() { 97 BeforeEach(func() { 98 res, err := psql.Update("resource_config_check_sessions"). 99 Set("expires_at", sq.Expr("now()")). 100 Where(sq.Eq{"resource_config_id": resourceConfig.ID()}). 101 RunWith(dbConn). 102 Exec() 103 Expect(err).ToNot(HaveOccurred()) 104 105 rows, err := res.RowsAffected() 106 Expect(err).ToNot(HaveOccurred()) 107 Expect(rows).To(Equal(int64(1))) 108 }) 109 110 It("removes the resource config check session", func() { 111 Expect(resourceConfigCheckSessionExists(resourceConfig)).To(BeFalse()) 112 }) 113 }) 114 115 Context("when the resource config changes", func() { 116 BeforeEach(func() { 117 scenario.Run( 118 builder.WithPipeline(atc.Config{ 119 Resources: atc.ResourceConfigs{ 120 { 121 Name: "some-resource", 122 Type: dbtest.BaseResourceType, 123 Source: atc.Source{"some": "different-source"}, 124 }, 125 }, 126 }), 127 builder.WithResourceVersions("some-resource", atc.Version{"some": "different-version"}), 128 ) 129 }) 130 131 It("removes the resource config check session", func() { 132 Expect(resourceConfigCheckSessionExists(resourceConfig)).To(BeFalse()) 133 }) 134 }) 135 136 Context("when the resource is removed", func() { 137 BeforeEach(func() { 138 scenario.Run( 139 builder.WithPipeline(atc.Config{}), 140 ) 141 }) 142 143 It("removes the resource config check session", func() { 144 Expect(resourceConfigCheckSessionExists(resourceConfig)).To(BeFalse()) 145 }) 146 }) 147 }) 148 })