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  }