github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/migration/add_resource_pinned_version_test.go (about)

     1  package migration_test
     2  
     3  import (
     4  	"database/sql"
     5  
     6  	. "github.com/onsi/ginkgo"
     7  	. "github.com/onsi/gomega"
     8  )
     9  
    10  var _ = Describe("Add resource pinned version", func() {
    11  	const preMigrationVersion = 1537546150
    12  	const postMigrationVersion = 1538408345
    13  
    14  	var (
    15  		db *sql.DB
    16  	)
    17  
    18  	setupResourceVersions := func(db *sql.DB) {
    19  		_, err := db.Exec(`
    20  			INSERT INTO base_resource_types(id, name) VALUES
    21  			(1, 'some-type')
    22  			`)
    23  		Expect(err).NotTo(HaveOccurred())
    24  
    25  		_, err = db.Exec(`
    26  			INSERT INTO resource_configs(id, base_resource_type_id, source_hash) VALUES
    27  			(1, 1, 'some-source'),
    28  			(2, 1, 'another-source')
    29  			`)
    30  		Expect(err).NotTo(HaveOccurred())
    31  
    32  		_, err = db.Exec(`
    33  			INSERT INTO resources(id, pipeline_id, resource_config_id, name, config, active, paused) VALUES
    34  			(1, 1, 1, 'resource1', '{}', true, true),
    35  			(2, 1, 1, 'resource2', '{}', true, false),
    36  			(3, 1, 2, 'resource3', '{}', true, true)
    37  			`)
    38  		Expect(err).NotTo(HaveOccurred())
    39  
    40  		_, err = db.Exec(`
    41  			INSERT INTO versioned_resources(id, resource_id, check_order, version, metadata, type) VALUES
    42  			(1, 1, 1, '{"version": "1"}', 'null', 'git'),
    43  			(2, 1, 4, '{"version": "4"}', 'null', 'git'),
    44  			(3, 2, 2, '{"version": "2"}', 'null', 'git'),
    45  			(4, 3, 1, '{"version": "1"}', 'null', 'git')
    46  			`)
    47  	}
    48  
    49  	Context("Up", func() {
    50  		It("creates a job tag for each job within every pipeline group", func() {
    51  			db = postgresRunner.OpenDBAtVersion(preMigrationVersion)
    52  
    53  			setup(db)
    54  			setupResourceVersions(db)
    55  
    56  			_ = db.Close()
    57  
    58  			db = postgresRunner.OpenDBAtVersion(postMigrationVersion)
    59  
    60  			rows, err := db.Query(`SELECT id, api_pinned_version FROM resources`)
    61  			Expect(err).NotTo(HaveOccurred())
    62  
    63  			pinnedVersions := make(map[int]string)
    64  
    65  			for rows.Next() {
    66  				var id int
    67  				var version sql.NullString
    68  
    69  				err := rows.Scan(&id, &version)
    70  				Expect(err).NotTo(HaveOccurred())
    71  
    72  				if version.Valid {
    73  					pinnedVersions[id] = version.String
    74  				}
    75  			}
    76  
    77  			_ = db.Close()
    78  
    79  			Expect(pinnedVersions).To(HaveLen(2))
    80  			Expect(pinnedVersions[1]).To(Equal(`{"version": "4"}`))
    81  			Expect(pinnedVersions[3]).To(Equal(`{"version": "1"}`))
    82  		})
    83  	})
    84  })