From 754482bf5d4922f0553c281ac525daff3f446c22 Mon Sep 17 00:00:00 2001
From: Mura Li <typeless@users.noreply.github.com>
Date: Tue, 20 Jun 2017 19:23:16 +0800
Subject: [PATCH] Add integration test for repository migration (#1983)

---
 Makefile                          | 14 ++++++++
 integrations/repo_migrate_test.go | 70 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 84 insertions(+)
 create mode 100644 integrations/repo_migrate_test.go

diff --git a/Makefile b/Makefile
index 70018cd554..659af47f43 100644
--- a/Makefile
+++ b/Makefile
@@ -164,6 +164,20 @@ test-mysql: integrations.test
 test-pgsql: integrations.test
 	GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/pgsql.ini ./integrations.test
 
+
+.PHONY: bench-sqlite
+bench-sqlite: integrations.sqlite.test
+	GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test -test.bench .
+
+.PHONY: bench-mysql
+bench-mysql: integrations.test
+	GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./integrations.test -test.bench .
+
+.PHONY: bench-pgsql
+bench-pgsql: integrations.test
+	GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/pgsql.ini ./integrations.test -test.bench .
+
+
 .PHONY: integration-test-coverage
 integration-test-coverage: integrations.cover.test
 	GITEA_ROOT=${CURDIR} GITEA_CONF=integrations/mysql.ini ./integrations.cover.test -test.coverprofile=integration.coverage.out
diff --git a/integrations/repo_migrate_test.go b/integrations/repo_migrate_test.go
new file mode 100644
index 0000000000..127c53c431
--- /dev/null
+++ b/integrations/repo_migrate_test.go
@@ -0,0 +1,70 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package integrations
+
+import (
+	"net/http"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func testRepoMigrate(t testing.TB, session *TestSession, cloneAddr, repoName string) *TestResponse {
+	req := NewRequest(t, "GET", "/repo/migrate")
+	resp := session.MakeRequest(t, req)
+	assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
+	htmlDoc := NewHTMLParser(t, resp.Body)
+
+	link, exists := htmlDoc.doc.Find("form.ui.form").Attr("action")
+	assert.True(t, exists, "The template has changed")
+
+	uid, exists := htmlDoc.doc.Find("#uid").Attr("value")
+	assert.True(t, exists, "The template has changed")
+
+	req = NewRequestWithValues(t, "POST", link, map[string]string{
+		"_csrf":      htmlDoc.GetCSRF(),
+		"clone_addr": cloneAddr,
+		"uid":        uid,
+		"repo_name":  repoName,
+	},
+	)
+	req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
+	resp = session.MakeRequest(t, req)
+	assert.EqualValues(t, http.StatusFound, resp.HeaderCode)
+
+	return resp
+}
+
+func TestRepoMigrate(t *testing.T) {
+	prepareTestEnv(t)
+	session := loginUser(t, "user2")
+	testRepoMigrate(t, session, "https://github.com/go-gitea/git.git", "git")
+}
+
+func BenchmarkRepoMigrate(b *testing.B) {
+	samples := []struct {
+		url  string
+		name string
+	}{
+		{url: "https://github.com/go-gitea/gitea.git", name: "gitea"},
+		{url: "https://github.com/ethantkoenig/manyfiles.git", name: "manyfiles"},
+		{url: "https://github.com/moby/moby.git", name: "moby"},
+		{url: "https://github.com/golang/go.git", name: "go"},
+		{url: "https://github.com/torvalds/linux.git", name: "linux"},
+	}
+
+	prepareTestEnv(b)
+	session := loginUser(b, "user2")
+	b.ResetTimer()
+
+	for _, s := range samples {
+		b.Run(s.name, func(b *testing.B) {
+			for i := 0; i < b.N; i++ {
+				testRepoMigrate(b, session, s.url, s.name)
+			}
+
+		})
+	}
+}