From 8917d66571a95f3da232a0c27bc1300210d10fde Mon Sep 17 00:00:00 2001 From: zeripath Date: Mon, 28 Jan 2019 16:18:52 +0000 Subject: [PATCH] Add migration test (#5773) * Add migration test This commit adds a simple migration test for v1.5.3, v1.6.4 and v1.7.0-rc3 Signed-off-by: Andrew Thornton * Automigrate based on available dbs * remove old ini file * Standardise the dialect names --- .drone.yml | 5 + Makefile | 28 +- .../migration-test/gitea-v1.5.3.mysql.sql.gz | Bin 0 -> 9030 bytes .../gitea-v1.5.3.postgres.sql.gz | Bin 0 -> 16612 bytes .../gitea-v1.5.3.sqlite3.sql.gz | Bin 0 -> 3849 bytes .../migration-test/gitea-v1.6.4.mysql.sql.gz | Bin 0 -> 9423 bytes .../gitea-v1.6.4.postgres.sql.gz | Bin 0 -> 17346 bytes .../gitea-v1.6.4.sqlite3.sql.gz | Bin 0 -> 3995 bytes .../migration-test/gitea-v1.7.0.mysql.sql.gz | Bin 0 -> 9682 bytes .../gitea-v1.7.0.postgres.sql.gz | Bin 0 -> 17659 bytes .../gitea-v1.7.0.sqlite3.sql.gz | Bin 0 -> 8165 bytes integrations/migration-test/migration_test.go | 245 ++++++++++++++++++ 12 files changed, 277 insertions(+), 1 deletion(-) create mode 100644 integrations/migration-test/gitea-v1.5.3.mysql.sql.gz create mode 100644 integrations/migration-test/gitea-v1.5.3.postgres.sql.gz create mode 100644 integrations/migration-test/gitea-v1.5.3.sqlite3.sql.gz create mode 100644 integrations/migration-test/gitea-v1.6.4.mysql.sql.gz create mode 100644 integrations/migration-test/gitea-v1.6.4.postgres.sql.gz create mode 100644 integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz create mode 100644 integrations/migration-test/gitea-v1.7.0.mysql.sql.gz create mode 100644 integrations/migration-test/gitea-v1.7.0.postgres.sql.gz create mode 100644 integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz create mode 100644 integrations/migration-test/migration_test.go diff --git a/.drone.yml b/.drone.yml index 68d7198365..560df26606 100644 --- a/.drone.yml +++ b/.drone.yml @@ -127,6 +127,7 @@ pipeline: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs - (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.sqlite.test)' | sh)) & + - make test-sqlite-migration - make test-sqlite when: event: [ push, tag, pull_request ] @@ -141,6 +142,7 @@ pipeline: commands: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs + - make test-mysql-migration - make integration-test-coverage when: event: [ push, pull_request ] @@ -157,6 +159,7 @@ pipeline: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs - (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.test)' | sh)) & + - make test-mysql-migration - make test-mysql when: event: [ tag ] @@ -172,6 +175,7 @@ pipeline: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs - (sleep 1200 && (echo 'kill -ABRT $(pidof gitea) $(pidof integrations.test)' | sh)) & + - make test-pgsql-migration - make test-pgsql when: event: [ push, tag, pull_request ] @@ -186,6 +190,7 @@ pipeline: commands: - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - apt-get install -y git-lfs + - make test-mssql-migration - make test-mssql when: event: [ push, tag, pull_request ] diff --git a/Makefile b/Makefile index b27937b0c7..5201e99b04 100644 --- a/Makefile +++ b/Makefile @@ -35,7 +35,7 @@ endif LDFLAGS := -X "main.Version=$(GITEA_VERSION)" -X "main.Tags=$(TAGS)" -PACKAGES ?= $(filter-out code.gitea.io/gitea/integrations,$(shell $(GO) list ./... | grep -v /vendor/)) +PACKAGES ?= $(filter-out code.gitea.io/gitea/integrations/migration-test,$(filter-out code.gitea.io/gitea/integrations,$(shell $(GO) list ./... | grep -v /vendor/))) SOURCES ?= $(shell find . -name "*.go" -type f) TAGS ?= @@ -197,6 +197,10 @@ test-vendor: vendor test-sqlite: integrations.sqlite.test GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test +.PHONY: test-sqlite-migration +test-sqlite-migration: migrations.sqlite.test + GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./migrations.sqlite.test + generate-ini: sed -e 's|{{TEST_MYSQL_HOST}}|${TEST_MYSQL_HOST}|g' \ -e 's|{{TEST_MYSQL_DBNAME}}|${TEST_MYSQL_DBNAME}|g' \ @@ -218,14 +222,28 @@ generate-ini: test-mysql: integrations.test generate-ini GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./integrations.test +.PHONY: test-mysql-migration +test-mysql-migration: migrations.test generate-ini + GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./migrations.test + .PHONY: test-pgsql test-pgsql: integrations.test generate-ini GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/pgsql.ini ./integrations.test +.PHONY: test-pgsql-migration +test-pgsql-migration: migrations.test generate-ini + GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/pgsql.ini ./migrations.test + + .PHONY: test-mssql test-mssql: integrations.test generate-ini GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mssql.ini ./integrations.test +.PHONY: test-mssql-migration +test-mssql-migration: migrations.test generate-ini + GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mssql.ini ./migrations.test + + .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . @@ -252,6 +270,14 @@ integrations.sqlite.test: $(SOURCES) integrations.cover.test: $(SOURCES) $(GO) test -c code.gitea.io/gitea/integrations -coverpkg $(shell echo $(PACKAGES) | tr ' ' ',') -o integrations.cover.test +.PHONY: migrations.test +migrations.test: $(SOURCES) + $(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.test + +.PHONY: migrations.sqlite.test +migrations.sqlite.test: $(SOURCES) + $(GO) test -c code.gitea.io/gitea/integrations/migration-test -o migrations.sqlite.test -tags 'sqlite sqlite_unlock_notify' + .PHONY: check check: test diff --git a/integrations/migration-test/gitea-v1.5.3.mysql.sql.gz b/integrations/migration-test/gitea-v1.5.3.mysql.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..643b6bab9cad3aa3a5660729e17cb56d10857e21 GIT binary patch literal 9030 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 literal 0 HcmV?d00001 diff --git a/integrations/migration-test/gitea-v1.5.3.postgres.sql.gz b/integrations/migration-test/gitea-v1.5.3.postgres.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..2fcad82111cf00a0fe6368e0bd714c9d5114c043 GIT binary patch literal 16612 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 VZ~8I}UJi%f{Xd(@tyStP0RW?ziRl0U literal 0 HcmV?d00001 diff --git a/integrations/migration-test/gitea-v1.6.4.postgres.sql.gz b/integrations/migration-test/gitea-v1.6.4.postgres.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..8db9022d1c0f7ca4e0d860edcbedea4ba4ec2969 GIT binary patch literal 17346 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 Bz0Uvu literal 0 HcmV?d00001 diff --git a/integrations/migration-test/gitea-v1.7.0.mysql.sql.gz b/integrations/migration-test/gitea-v1.7.0.mysql.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..d0ab10891c08923b4f02f0f092a5cd51fb24ac13 GIT binary patch literal 9682 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

@&D(Ah&L}LjN48)VFsUGZJN9H^DFeG@e9ku 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 literal 0 HcmV?d00001 diff --git a/integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz b/integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz new file mode 100644 index 0000000000000000000000000000000000000000..3155249b07eb08684d2513fa5348e500615fd56d GIT binary patch literal 8165 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.+)\\." + regexp.QuoteMeta(models.DbCfg.Type) + "\\.sql.gz") + if err != nil { + return nil, err + } + + filenames, err := migrationsDir.Readdirnames(-1) + if err != nil { + return nil, err + } + versions := []string{} + for _, filename := range filenames { + if versionRE.MatchString(filename) { + substrings := versionRE.FindStringSubmatch(filename) + versions = append(versions, substrings[1]) + } + } + sort.Strings(versions) + return versions, nil +} + +func readSQLFromFile(version string) (string, error) { + filename := fmt.Sprintf("integrations/migration-test/gitea-v%s.%s.sql.gz", version, models.DbCfg.Type) + + if _, err := os.Stat(filename); os.IsNotExist(err) { + return "", nil + } + + file, err := os.Open(filename) + if err != nil { + return "", err + } + defer file.Close() + + gr, err := gzip.NewReader(file) + if err != nil { + return "", err + } + defer gr.Close() + + bytes, err := ioutil.ReadAll(gr) + if err != nil { + return "", err + } + + return string(bytes), nil +} + +func restoreOldDB(t *testing.T, version string) bool { + data, err := readSQLFromFile(version) + assert.NoError(t, err) + if len(data) == 0 { + log.Printf("No db found to restore for %s version: %s\n", models.DbCfg.Type, version) + return false + } + + switch { + case setting.UseSQLite3: + os.Remove(models.DbCfg.Path) + err := os.MkdirAll(path.Dir(models.DbCfg.Path), os.ModePerm) + assert.NoError(t, err) + + db, err := sql.Open("sqlite3", fmt.Sprintf("file:%s?cache=shared&mode=rwc&_busy_timeout=%d", models.DbCfg.Path, models.DbCfg.Timeout)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(data) + assert.NoError(t, err) + db.Close() + + case setting.UseMySQL: + db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/", + models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", models.DbCfg.Name)) + assert.NoError(t, err) + + _, err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", models.DbCfg.Name)) + assert.NoError(t, err) + + db, err = sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/%s?multiStatements=true", + models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.Name)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(data) + assert.NoError(t, err) + db.Close() + + case setting.UsePostgreSQL: + db, err := sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/?sslmode=%s", + models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.SSLMode)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(fmt.Sprintf("DROP DATABASE IF EXISTS %s", models.DbCfg.Name)) + assert.NoError(t, err) + + _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", models.DbCfg.Name)) + assert.NoError(t, err) + db.Close() + + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", + models.DbCfg.User, models.DbCfg.Passwd, models.DbCfg.Host, models.DbCfg.Name, models.DbCfg.SSLMode)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec(data) + assert.NoError(t, err) + db.Close() + + case setting.UseMSSQL: + host, port := models.ParseMSSQLHostPort(models.DbCfg.Host) + db, err := sql.Open("mssql", fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", + host, port, "master", models.DbCfg.User, models.DbCfg.Passwd)) + assert.NoError(t, err) + defer db.Close() + + _, err = db.Exec("DROP DATABASE IF EXISTS gitea") + assert.NoError(t, err) + + _, err = db.Exec("CREATE DATABASE gitea") + assert.NoError(t, err) + + _, err = db.Exec(data) + assert.NoError(t, err) + db.Close() + } + return true +} + +func wrappedMigrate(x *xorm.Engine) error { + currentEngine = x + return migrations.Migrate(x) +} + +func doMigrationTest(t *testing.T, version string) { + log.Printf("Performing migration test for %s version: %s", models.DbCfg.Type, version) + if !restoreOldDB(t, version) { + return + } + + setting.NewXORMLogService(false) + err := models.SetEngine() + assert.NoError(t, err) + + err = models.NewEngine(wrappedMigrate) + assert.NoError(t, err) + currentEngine.Close() +} + +func TestMigrations(t *testing.T) { + initMigrationTest() + + dialect := models.DbCfg.Type + versions, err := availableVersions() + assert.NoError(t, err) + + if len(versions) == 0 { + log.Printf("No old database versions available to migration test for %s\n", dialect) + return + } + + log.Printf("Preparing to test %d migrations for %s\n", len(versions), dialect) + for _, version := range versions { + doMigrationTest(t, version) + } +}