Skip to content

Commit 9618f24

Browse files
committed
Add integration test
1 parent d7e67c2 commit 9618f24

File tree

2 files changed

+119
-0
lines changed

2 files changed

+119
-0
lines changed

integrations/lfs_getobject_test.go

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
// Copyright 2019 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package integrations
6+
7+
import (
8+
"archive/zip"
9+
"bytes"
10+
"crypto/sha256"
11+
"encoding/hex"
12+
"io"
13+
"io/ioutil"
14+
"net/http"
15+
"testing"
16+
17+
"code.gitea.io/gitea/models"
18+
"code.gitea.io/gitea/modules/gzip"
19+
"code.gitea.io/gitea/modules/lfs"
20+
"code.gitea.io/gitea/modules/setting"
21+
"github.com/stretchr/testify/assert"
22+
23+
gzipp "github.com/klauspost/compress/gzip"
24+
)
25+
26+
func GenerateLFSOid(content io.Reader) (string, error) {
27+
h := sha256.New()
28+
if _, err := io.Copy(h, content); err != nil {
29+
return "", err
30+
}
31+
sum := h.Sum(nil)
32+
return hex.EncodeToString(sum), nil
33+
}
34+
35+
func storeObjectInRepo(t *testing.T, repositoryID int64, content *[]byte) string {
36+
oid, err := GenerateLFSOid(bytes.NewReader(*content))
37+
assert.NoError(t, err)
38+
lfsMetaObject := &models.LFSMetaObject{Oid: oid, Size: int64(len(*content)), RepositoryID: repositoryID}
39+
lfsMetaObject, err = models.NewLFSMetaObject(lfsMetaObject)
40+
assert.NoError(t, err)
41+
contentStore := &lfs.ContentStore{BasePath: setting.LFS.ContentPath}
42+
if !contentStore.Exists(lfsMetaObject) {
43+
err := contentStore.Put(lfsMetaObject, bytes.NewReader(*content))
44+
assert.NoError(t, err)
45+
}
46+
return oid
47+
}
48+
49+
func doLfs(t *testing.T, content *[]byte, expectGzip bool) {
50+
prepareTestEnv(t)
51+
repo, err := models.GetRepositoryByOwnerAndName("user2", "repo1")
52+
assert.NoError(t, err)
53+
oid := storeObjectInRepo(t, repo.ID, content)
54+
55+
session := loginUser(t, "user2")
56+
57+
// Request OID
58+
req := NewRequest(t, "GET", "/user2/repo1.git/info/lfs/objects/"+oid+"/test")
59+
req.Header.Set("Accept-Encoding", "gzip")
60+
resp := session.MakeRequest(t, req, http.StatusOK)
61+
62+
contentEncoding := resp.Header().Get("Content-Encoding")
63+
if !expectGzip || !setting.EnableGzip {
64+
assert.NotContains(t, contentEncoding, "gzip")
65+
66+
result := resp.Body.Bytes()
67+
assert.Equal(t, *content, result)
68+
} else {
69+
assert.Contains(t, contentEncoding, "gzip")
70+
gzippReader, err := gzipp.NewReader(resp.Body)
71+
assert.NoError(t, err)
72+
result, err := ioutil.ReadAll(gzippReader)
73+
assert.NoError(t, err)
74+
assert.Equal(t, *content, result)
75+
}
76+
77+
}
78+
79+
func TestGetLFSSmall(t *testing.T) {
80+
content := []byte("A very small file\n")
81+
doLfs(t, &content, false)
82+
}
83+
84+
func TestGetLFSLarge(t *testing.T) {
85+
content := make([]byte, gzip.MinSize*10)
86+
for i := range content {
87+
content[i] = byte(i % 256)
88+
}
89+
doLfs(t, &content, true)
90+
}
91+
92+
func TestGetLFSGzip(t *testing.T) {
93+
b := make([]byte, gzip.MinSize*10)
94+
for i := range b {
95+
b[i] = byte(i % 256)
96+
}
97+
outputBuffer := bytes.NewBuffer([]byte{})
98+
gzippWriter := gzipp.NewWriter(outputBuffer)
99+
gzippWriter.Write(b)
100+
gzippWriter.Close()
101+
content := outputBuffer.Bytes()
102+
doLfs(t, &content, false)
103+
}
104+
105+
func TestGetLFSZip(t *testing.T) {
106+
b := make([]byte, gzip.MinSize*10)
107+
for i := range b {
108+
b[i] = byte(i % 256)
109+
}
110+
outputBuffer := bytes.NewBuffer([]byte{})
111+
zipWriter := zip.NewWriter(outputBuffer)
112+
fileWriter, err := zipWriter.Create("default")
113+
assert.NoError(t, err)
114+
fileWriter.Write(b)
115+
zipWriter.Close()
116+
content := outputBuffer.Bytes()
117+
doLfs(t, &content, false)
118+
}

integrations/sqlite.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ LFS_CONTENT_PATH = data/lfs-sqlite
3030
OFFLINE_MODE = false
3131
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
3232
APP_DATA_PATH = integrations/gitea-integration-sqlite/data
33+
ENABLE_GZIP = true
3334

3435
[mailer]
3536
ENABLED = false

0 commit comments

Comments
 (0)