github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/resource_config_check_session_lifecycle_test.go (about) 1 package db_test 2 3 import ( 4 "time" 5 6 sq "github.com/Masterminds/squirrel" 7 "github.com/pf-qiu/concourse/v6/atc" 8 "github.com/pf-qiu/concourse/v6/atc/db" 9 "github.com/pf-qiu/concourse/v6/atc/db/dbtest" 10 11 . "github.com/onsi/ginkgo" 12 . "github.com/onsi/gomega" 13 ) 14 15 var _ = Describe("ResourceConfigCheckSessionLifecycle", func() { 16 var ( 17 lifecycle db.ResourceConfigCheckSessionLifecycle 18 scenario *dbtest.Scenario 19 ) 20 21 BeforeEach(func() { 22 lifecycle = db.NewResourceConfigCheckSessionLifecycle(dbConn) 23 24 scenario = dbtest.Setup( 25 builder.WithPipeline(atc.Config{ 26 Resources: atc.ResourceConfigs{ 27 { 28 Name: "some-resource", 29 Type: "some-base-resource-type", 30 Source: atc.Source{"some": "source"}, 31 }, 32 }, 33 ResourceTypes: atc.ResourceTypes{ 34 { 35 Name: "some-type", 36 Type: "some-base-resource-type", 37 Source: atc.Source{ 38 "some-type": "source", 39 }, 40 }, 41 }, 42 }), 43 ) 44 }) 45 46 Describe("CleanInactiveResourceConfigCheckSessions", func() { 47 expiry := db.ContainerOwnerExpiries{ 48 Min: 1 * time.Minute, 49 Max: 1 * time.Minute, 50 } 51 52 Context("for resources", func() { 53 findOrCreateSessionForDefaultResource := func() int { 54 scenario.Run( 55 builder.WithResourceVersions("some-resource"), 56 ) 57 58 resourceConfig, found, err := resourceConfigFactory.FindResourceConfigByID(scenario.Resource("some-resource").ResourceConfigID()) 59 Expect(err).ToNot(HaveOccurred()) 60 Expect(found).To(BeTrue()) 61 62 owner := db.NewResourceConfigCheckSessionContainerOwner( 63 resourceConfig.ID(), 64 resourceConfig.OriginBaseResourceType().ID, 65 expiry, 66 ) 67 68 var query sq.Eq 69 query, found, err = owner.Find(dbConn) 70 Expect(err).ToNot(HaveOccurred()) 71 72 if !found { 73 tx, err := dbConn.Begin() 74 Expect(err).ToNot(HaveOccurred()) 75 76 query, err = owner.Create(tx, defaultWorker.Name()) 77 Expect(err).ToNot(HaveOccurred()) 78 79 err = tx.Commit() 80 Expect(err).ToNot(HaveOccurred()) 81 82 return query["resource_config_check_session_id"].(int) 83 } else { 84 rccsIDs := query["resource_config_check_session_id"].([]int) 85 Expect(rccsIDs).To(HaveLen(1)) 86 return rccsIDs[0] 87 } 88 } 89 90 var oldRccsID int 91 92 BeforeEach(func() { 93 By("creating the session") 94 oldRccsID = findOrCreateSessionForDefaultResource() 95 }) 96 97 It("keeps check sessions for active resources", func() { 98 By("cleaning up inactive sessions") 99 Expect(lifecycle.CleanInactiveResourceConfigCheckSessions()).To(Succeed()) 100 101 By("find-or-creating the session again") 102 newRccsID := findOrCreateSessionForDefaultResource() 103 104 By("finding the same rccs as before") 105 Expect(oldRccsID).To(Equal(newRccsID)) 106 }) 107 108 It("removes check sessions for inactive resources", func() { 109 By("removing the default resource from the pipeline config") 110 scenario.Run( 111 builder.WithPipeline(atc.Config{ 112 Jobs: atc.JobConfigs{ 113 { 114 Name: "some-job", 115 }, 116 }, 117 Resources: atc.ResourceConfigs{}, 118 ResourceTypes: atc.ResourceTypes{ 119 { 120 Name: "some-type", 121 Type: "some-base-resource-type", 122 Source: atc.Source{ 123 "some-type": "source", 124 }, 125 }, 126 }, 127 }), 128 ) 129 130 By("cleaning up inactive sessions") 131 Expect(lifecycle.CleanInactiveResourceConfigCheckSessions()).To(Succeed()) 132 133 By("find-or-creating the session again") 134 scenario.Run( 135 builder.WithPipeline(atc.Config{ 136 Jobs: atc.JobConfigs{ 137 { 138 Name: "some-job", 139 }, 140 }, 141 Resources: atc.ResourceConfigs{ 142 { 143 Name: "some-resource", 144 Type: "some-base-resource-type", 145 Source: atc.Source{"some": "source"}, 146 }, 147 }, 148 ResourceTypes: atc.ResourceTypes{ 149 { 150 Name: "some-type", 151 Type: "some-base-resource-type", 152 Source: atc.Source{ 153 "some-type": "source", 154 }, 155 }, 156 }, 157 }), 158 ) 159 rccsID := findOrCreateSessionForDefaultResource() 160 161 By("having created a new session, as the old one was removed") 162 Expect(rccsID).ToNot(Equal(oldRccsID)) 163 }) 164 165 It("removes check sessions for resources in paused pipelines", func() { 166 By("pausing the pipeline") 167 Expect(scenario.Pipeline.Pause()).To(Succeed()) 168 169 By("cleaning up inactive sessions") 170 Expect(lifecycle.CleanInactiveResourceConfigCheckSessions()).To(Succeed()) 171 172 By("find-or-creating the session again") 173 rccsID := findOrCreateSessionForDefaultResource() 174 175 By("having created a new session, as the old one was removed") 176 Expect(rccsID).ToNot(Equal(oldRccsID)) 177 }) 178 }) 179 180 Context("for resource types", func() { 181 findOrCreateSessionForDefaultResourceType := func() int { 182 scenario.Run( 183 builder.WithResourceTypeVersions("some-type"), 184 ) 185 186 resourceConfig, err := resourceConfigFactory.FindOrCreateResourceConfig(scenario.ResourceType("some-type").Type(), scenario.ResourceType("some-type").Source(), nil) 187 Expect(err).ToNot(HaveOccurred()) 188 189 owner := db.NewResourceConfigCheckSessionContainerOwner( 190 resourceConfig.ID(), 191 resourceConfig.OriginBaseResourceType().ID, 192 expiry, 193 ) 194 195 var query sq.Eq 196 var found bool 197 query, found, err = owner.Find(dbConn) 198 Expect(err).ToNot(HaveOccurred()) 199 200 if !found { 201 tx, err := dbConn.Begin() 202 Expect(err).ToNot(HaveOccurred()) 203 204 query, err = owner.Create(tx, defaultWorker.Name()) 205 Expect(err).ToNot(HaveOccurred()) 206 207 err = tx.Commit() 208 Expect(err).ToNot(HaveOccurred()) 209 210 return query["resource_config_check_session_id"].(int) 211 } else { 212 rccsIDs := query["resource_config_check_session_id"].([]int) 213 Expect(rccsIDs).To(HaveLen(1)) 214 return rccsIDs[0] 215 } 216 } 217 218 var oldRccsID int 219 220 BeforeEach(func() { 221 By("creating the session") 222 oldRccsID = findOrCreateSessionForDefaultResourceType() 223 }) 224 225 It("keeps check sessions for active resource types", func() { 226 By("cleaning up inactive sessions") 227 Expect(lifecycle.CleanInactiveResourceConfigCheckSessions()).To(Succeed()) 228 229 By("find-or-creating the session again") 230 rccsID := findOrCreateSessionForDefaultResourceType() 231 232 By("finding the same session as before") 233 Expect(rccsID).To(Equal(oldRccsID)) 234 }) 235 236 It("removes check sessions for inactive resource types", func() { 237 By("removing the default resource from the pipeline config") 238 scenario.Run( 239 builder.WithPipeline(atc.Config{ 240 Jobs: atc.JobConfigs{ 241 { 242 Name: "some-job", 243 }, 244 }, 245 Resources: atc.ResourceConfigs{ 246 { 247 Name: "some-resource", 248 Type: "some-base-resource-type", 249 Source: atc.Source{ 250 "some": "source", 251 }, 252 }, 253 }, 254 ResourceTypes: atc.ResourceTypes{}, 255 }), 256 ) 257 258 By("cleaning up inactive sessions") 259 Expect(lifecycle.CleanInactiveResourceConfigCheckSessions()).To(Succeed()) 260 261 By("find-or-creating the session again") 262 scenario.Run( 263 builder.WithPipeline(atc.Config{ 264 Jobs: atc.JobConfigs{ 265 { 266 Name: "some-job", 267 }, 268 }, 269 Resources: atc.ResourceConfigs{ 270 { 271 Name: "some-resource", 272 Type: "some-base-resource-type", 273 Source: atc.Source{ 274 "some": "source", 275 }, 276 }, 277 }, 278 ResourceTypes: atc.ResourceTypes{ 279 { 280 Name: "some-type", 281 Type: "some-base-resource-type", 282 Source: atc.Source{ 283 "some-type": "source", 284 }, 285 }, 286 }, 287 }), 288 ) 289 rccsID := findOrCreateSessionForDefaultResourceType() 290 291 By("having created a new session, as the old one was removed") 292 Expect(rccsID).ToNot(Equal(oldRccsID)) 293 }) 294 295 It("removes check sessions for resource types in paused pipelines", func() { 296 By("pausing the pipeline") 297 Expect(scenario.Pipeline.Pause()).To(Succeed()) 298 299 By("cleaning up inactive sessions") 300 Expect(lifecycle.CleanInactiveResourceConfigCheckSessions()).To(Succeed()) 301 302 By("find-or-creating the session again") 303 rccsID := findOrCreateSessionForDefaultResourceType() 304 305 By("having created a new session, as the old one was removed") 306 Expect(rccsID).ToNot(Equal(oldRccsID)) 307 }) 308 }) 309 }) 310 })