github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/migration/worker_task_cache_test.go (about) 1 package migration_test 2 3 import ( 4 "database/sql" 5 "strconv" 6 "strings" 7 8 . "github.com/onsi/ginkgo" 9 . "github.com/onsi/gomega" 10 ) 11 12 var _ = Describe("Separate worker_task_caches table", func() { 13 const preMigrationVersion = 1556724983 14 const postMigrationVersion = 1557152441 15 16 var ( 17 db *sql.DB 18 ) 19 20 Context("Up", func() { 21 It("separate worker_task_caches table", func() { 22 db = postgresRunner.OpenDBAtVersion(preMigrationVersion) 23 24 setup_for_up_test(db) 25 26 _ = db.Close() 27 28 db = postgresRunner.OpenDBAtVersion(postMigrationVersion) 29 30 rows, err := db.Query(`SELECT id, job_id, step_name, path FROM task_caches`) 31 Expect(err).NotTo(HaveOccurred()) 32 33 taskCaches := make(map[int]string) 34 35 for rows.Next() { 36 var id int 37 var job_id int 38 var step_name string 39 var path string 40 41 err := rows.Scan(&id, &job_id, &step_name, &path) 42 Expect(err).NotTo(HaveOccurred()) 43 44 taskCaches[id] = strings.Join([]string{strconv.Itoa(job_id), step_name, path}, ",") 45 } 46 47 Expect(taskCaches[1]).To(Equal("1,some-step,some-path")) 48 Expect(taskCaches[3]).To(Equal("2,some-step,some-path")) 49 50 rows, err = db.Query(`SELECT id, worker_name, task_cache_id FROM worker_task_caches`) 51 Expect(err).NotTo(HaveOccurred()) 52 53 workerTaskCaches := make(map[int]string) 54 55 for rows.Next() { 56 var id int 57 var worker_name string 58 var task_cache_id int 59 60 err := rows.Scan(&id, &worker_name, &task_cache_id) 61 Expect(err).NotTo(HaveOccurred()) 62 63 workerTaskCaches[id] = strings.Join([]string{worker_name, strconv.Itoa(task_cache_id)}, ",") 64 } 65 66 Expect(workerTaskCaches[1]).To(Equal("some-worker,1")) 67 Expect(workerTaskCaches[2]).To(Equal("some-worker,3")) 68 Expect(workerTaskCaches[3]).To(Equal("some-other-worker,1")) 69 70 _ = db.Close() 71 72 }) 73 }) 74 75 Context("down", func() { 76 It("merge worker_task_caches and task_caches table", func() { 77 db = postgresRunner.OpenDBAtVersion(postMigrationVersion) 78 79 setup_for_down_test(db) 80 81 _ = db.Close() 82 83 db = postgresRunner.OpenDBAtVersion(preMigrationVersion) 84 85 rows, err := db.Query(`SELECT id, worker_name, job_id, step_name, path FROM worker_task_caches`) 86 Expect(err).NotTo(HaveOccurred()) 87 88 workerTaskCaches := make(map[int]string) 89 90 for rows.Next() { 91 var id int 92 var worker_name string 93 var job_id int 94 var step_name string 95 var path string 96 97 err := rows.Scan(&id, &worker_name, &job_id, &step_name, &path) 98 Expect(err).NotTo(HaveOccurred()) 99 100 workerTaskCaches[id] = strings.Join([]string{worker_name, strconv.Itoa(job_id), step_name, path}, ",") 101 } 102 103 Expect(workerTaskCaches[1]).To(Equal("some-worker,1,some-step,some-path")) 104 Expect(workerTaskCaches[2]).To(Equal("some-worker,2,some-step,some-path")) 105 Expect(workerTaskCaches[3]).To(Equal("some-other-worker,1,some-step,some-path")) 106 107 _ = db.Close() 108 }) 109 }) 110 }) 111 112 func setup_for_down_test(db *sql.DB) { 113 _, err := db.Exec(` 114 INSERT INTO teams(id, name) VALUES 115 (1, 'some-team') 116 `) 117 Expect(err).NotTo(HaveOccurred()) 118 119 _, err = db.Exec(` 120 INSERT INTO workers(name) VALUES 121 ('some-worker'), 122 ('some-other-worker') 123 `) 124 Expect(err).NotTo(HaveOccurred()) 125 126 _, err = db.Exec(` 127 INSERT INTO pipelines(id, team_id, name) VALUES 128 (1, 1, 'pipeline1') 129 `) 130 Expect(err).NotTo(HaveOccurred()) 131 132 _, err = db.Exec(` 133 INSERT INTO jobs(id, pipeline_id, name, config) VALUES 134 (1, 1, 'job1', '{"name":"job1"}'), 135 (2, 1, 'job2', '{"name":"job2"}') 136 `) 137 Expect(err).NotTo(HaveOccurred()) 138 139 _, err = db.Exec(` 140 INSERT INTO task_caches(id, job_id, step_name, path) VALUES 141 (1, 1, 'some-step', 'some-path'), 142 (2, 2, 'some-step', 'some-path') 143 `) 144 Expect(err).NotTo(HaveOccurred()) 145 146 _, err = db.Exec(` 147 INSERT INTO worker_task_caches(id, worker_name, task_cache_id) VALUES 148 (1, 'some-worker', 1), 149 (2, 'some-worker', 2), 150 (3, 'some-other-worker', 1) 151 `) 152 Expect(err).NotTo(HaveOccurred()) 153 } 154 155 func setup_for_up_test(db *sql.DB) { 156 _, err := db.Exec(` 157 INSERT INTO teams(id, name) VALUES 158 (1, 'some-team') 159 `) 160 Expect(err).NotTo(HaveOccurred()) 161 162 _, err = db.Exec(` 163 INSERT INTO workers(name) VALUES 164 ('some-worker'), 165 ('some-other-worker') 166 `) 167 Expect(err).NotTo(HaveOccurred()) 168 169 _, err = db.Exec(` 170 INSERT INTO pipelines(id, team_id, name) VALUES 171 (1, 1, 'pipeline1') 172 `) 173 Expect(err).NotTo(HaveOccurred()) 174 175 _, err = db.Exec(` 176 INSERT INTO jobs(id, pipeline_id, name, config) VALUES 177 (1, 1, 'job1', '{"name":"job1"}'), 178 (2, 1, 'job2', '{"name":"job2"}') 179 `) 180 Expect(err).NotTo(HaveOccurred()) 181 182 _, err = db.Exec(` 183 INSERT INTO worker_task_caches(id, worker_name, job_id, step_name, path) VALUES 184 (1, 'some-worker', 1, 'some-step', 'some-path'), 185 (2, 'some-worker', 2, 'some-step', 'some-path'), 186 (3, 'some-other-worker', 1, 'some-step', 'some-path') 187 `) 188 Expect(err).NotTo(HaveOccurred()) 189 }