From f70758dec918b01f0895bb747decfdf110ae52bd Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Fri, 3 Nov 2017 01:51:03 +0800
Subject: [PATCH] Add git clone test on integration test (#1682)

---
 integrations/git_test.go         | 60 ++++++++++++++++++++++++++++++++
 integrations/integration_test.go |  7 ++--
 2 files changed, 65 insertions(+), 2 deletions(-)
 create mode 100644 integrations/git_test.go

diff --git a/integrations/git_test.go b/integrations/git_test.go
new file mode 100644
index 0000000000..5e6334d20a
--- /dev/null
+++ b/integrations/git_test.go
@@ -0,0 +1,60 @@
+// 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 (
+	"context"
+	"fmt"
+	"io/ioutil"
+	"net"
+	"net/http"
+	"os"
+	"path/filepath"
+	"testing"
+	"time"
+
+	"code.gitea.io/git"
+
+	"github.com/Unknwon/com"
+	"github.com/stretchr/testify/assert"
+)
+
+func onGiteaWebRun(t *testing.T, callback func(*testing.T, string)) {
+	s := http.Server{
+		Handler: mac,
+	}
+
+	listener, err := net.Listen("tcp", "")
+	assert.NoError(t, err)
+
+	defer func() {
+		ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
+		s.Shutdown(ctx)
+		cancel()
+	}()
+
+	go s.Serve(listener)
+
+	_, port, err := net.SplitHostPort(listener.Addr().String())
+	assert.NoError(t, err)
+
+	callback(t, fmt.Sprintf("http://localhost:%s/", port))
+}
+
+func TestClone_ViaHTTP_NoLogin(t *testing.T) {
+	prepareTestEnv(t)
+
+	onGiteaWebRun(t, func(t *testing.T, urlPrefix string) {
+		dstPath, err := ioutil.TempDir("", "repo1")
+		assert.NoError(t, err)
+		defer os.RemoveAll(dstPath)
+
+		err = git.Clone(fmt.Sprintf("%suser2/repo1.git", urlPrefix),
+			dstPath, git.CloneRepoOptions{})
+		assert.NoError(t, err)
+
+		assert.True(t, com.IsExist(filepath.Join(dstPath, "README.md")))
+	})
+}
diff --git a/integrations/integration_test.go b/integrations/integration_test.go
index 55014b5a41..eae0638587 100644
--- a/integrations/integration_test.go
+++ b/integrations/integration_test.go
@@ -16,6 +16,7 @@ import (
 	"net/url"
 	"os"
 	"path"
+	"path/filepath"
 	"strings"
 	"testing"
 
@@ -51,7 +52,7 @@ func TestMain(m *testing.M) {
 
 	err := models.InitFixtures(
 		helper,
-		"models/fixtures/",
+		path.Join(filepath.Dir(setting.AppPath), "models/fixtures/"),
 	)
 	if err != nil {
 		fmt.Printf("Error initializing test database: %v\n", err)
@@ -134,7 +135,9 @@ func initIntegrationTest() {
 func prepareTestEnv(t testing.TB) {
 	assert.NoError(t, models.LoadFixtures())
 	assert.NoError(t, os.RemoveAll(setting.RepoRootPath))
-	assert.NoError(t, com.CopyDir("integrations/gitea-repositories-meta", setting.RepoRootPath))
+
+	assert.NoError(t, com.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"),
+		setting.RepoRootPath))
 }
 
 type TestSession struct {