Merge remote-tracking branch 'upstream/main' into limit-repo-size

This commit is contained in:
DmitryFrolovTri
2023-05-23 06:04:57 +00:00
228 changed files with 6149 additions and 5925 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ import (
var c *web.Route
func TestMain(m *testing.M) {
defer log.Close()
defer log.GetManager().Close()
managerCtx, cancel := context.WithCancel(context.Background())
graceful.InitManager(managerCtx)
+41
View File
@@ -241,3 +241,44 @@ func TestAPICreateRepoForUser(t *testing.T) {
)
MakeRequest(t, req, http.StatusCreated)
}
func TestAPIRenameUser(t *testing.T) {
defer tests.PrepareTestEnv(t)()
adminUsername := "user1"
token := getUserToken(t, adminUsername, auth_model.AccessTokenScopeSudo)
urlStr := fmt.Sprintf("/api/v1/admin/users/%s/rename?token=%s", "user2", token)
req := NewRequestWithValues(t, "POST", urlStr, map[string]string{
// required
"new_name": "User2",
})
MakeRequest(t, req, http.StatusOK)
urlStr = fmt.Sprintf("/api/v1/admin/users/%s/rename?token=%s", "User2", token)
req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
// required
"new_name": "User2-2-2",
})
MakeRequest(t, req, http.StatusOK)
urlStr = fmt.Sprintf("/api/v1/admin/users/%s/rename?token=%s", "User2", token)
req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
// required
"new_name": "user1",
})
// the old user name still be used by with a redirect
MakeRequest(t, req, http.StatusTemporaryRedirect)
urlStr = fmt.Sprintf("/api/v1/admin/users/%s/rename?token=%s", "User2-2-2", token)
req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
// required
"new_name": "user1",
})
MakeRequest(t, req, http.StatusUnprocessableEntity)
urlStr = fmt.Sprintf("/api/v1/admin/users/%s/rename?token=%s", "User2-2-2", token)
req = NewRequestWithValues(t, "POST", urlStr, map[string]string{
// required
"new_name": "user2",
})
MakeRequest(t, req, http.StatusOK)
}
+242
View File
@@ -0,0 +1,242 @@
// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package integration
import (
"archive/tar"
"archive/zip"
"bytes"
"compress/gzip"
"fmt"
"net/http"
"testing"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/packages"
"code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user"
cran_module "code.gitea.io/gitea/modules/packages/cran"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
)
func TestPackageCran(t *testing.T) {
defer tests.PrepareTestEnv(t)()
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
packageName := "test.package"
packageVersion := "1.0.3"
packageAuthor := "KN4CK3R"
packageDescription := "Gitea Test Package"
createDescription := func(name, version string) []byte {
var buf bytes.Buffer
fmt.Fprintln(&buf, "Package:", name)
fmt.Fprintln(&buf, "Version:", version)
fmt.Fprintln(&buf, "Description:", packageDescription)
fmt.Fprintln(&buf, "Imports: abc,\n123")
fmt.Fprintln(&buf, "NeedsCompilation: yes")
fmt.Fprintln(&buf, "License: MIT")
fmt.Fprintln(&buf, "Author:", packageAuthor)
return buf.Bytes()
}
url := fmt.Sprintf("/api/packages/%s/cran", user.Name)
t.Run("Source", func(t *testing.T) {
createArchive := func(filename string, content []byte) *bytes.Buffer {
var buf bytes.Buffer
gw := gzip.NewWriter(&buf)
tw := tar.NewWriter(gw)
hdr := &tar.Header{
Name: filename,
Mode: 0o600,
Size: int64(len(content)),
}
tw.WriteHeader(hdr)
tw.Write(content)
tw.Close()
gw.Close()
return &buf
}
t.Run("Upload", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
uploadURL := url + "/src"
req := NewRequestWithBody(t, "PUT", uploadURL, bytes.NewReader([]byte{}))
MakeRequest(t, req, http.StatusUnauthorized)
req = NewRequestWithBody(t, "PUT", uploadURL, createArchive(
"dummy.txt",
[]byte{},
))
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusBadRequest)
req = NewRequestWithBody(t, "PUT", uploadURL, createArchive(
"package/DESCRIPTION",
createDescription(packageName, packageVersion),
))
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusCreated)
pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeCran)
assert.NoError(t, err)
assert.Len(t, pvs, 1)
pd, err := packages.GetPackageDescriptor(db.DefaultContext, pvs[0])
assert.NoError(t, err)
assert.Nil(t, pd.SemVer)
assert.IsType(t, &cran_module.Metadata{}, pd.Metadata)
assert.Equal(t, packageName, pd.Package.Name)
assert.Equal(t, packageVersion, pd.Version.Version)
pfs, err := packages.GetFilesByVersionID(db.DefaultContext, pvs[0].ID)
assert.NoError(t, err)
assert.Len(t, pfs, 1)
assert.Equal(t, fmt.Sprintf("%s_%s.tar.gz", packageName, packageVersion), pfs[0].Name)
assert.True(t, pfs[0].IsLead)
req = NewRequestWithBody(t, "PUT", uploadURL, createArchive(
"package/DESCRIPTION",
createDescription(packageName, packageVersion),
))
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusConflict)
})
t.Run("Download", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", fmt.Sprintf("%s/src/contrib/%s_%s.tar.gz", url, packageName, packageVersion))
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusOK)
})
t.Run("Enumerate", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", url+"/src/contrib/PACKAGES")
req = AddBasicAuthHeader(req, user.Name)
resp := MakeRequest(t, req, http.StatusOK)
assert.Contains(t, resp.Header().Get("Content-Type"), "text/plain")
body := resp.Body.String()
assert.Contains(t, body, fmt.Sprintf("Package: %s", packageName))
assert.Contains(t, body, fmt.Sprintf("Version: %s", packageVersion))
req = NewRequest(t, "GET", url+"/src/contrib/PACKAGES.gz")
req = AddBasicAuthHeader(req, user.Name)
resp = MakeRequest(t, req, http.StatusOK)
assert.Contains(t, resp.Header().Get("Content-Type"), "application/x-gzip")
})
})
t.Run("Binary", func(t *testing.T) {
createArchive := func(filename string, content []byte) *bytes.Buffer {
var buf bytes.Buffer
archive := zip.NewWriter(&buf)
w, _ := archive.Create(filename)
w.Write(content)
archive.Close()
return &buf
}
t.Run("Upload", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
uploadURL := url + "/bin"
req := NewRequestWithBody(t, "PUT", uploadURL, bytes.NewReader([]byte{}))
MakeRequest(t, req, http.StatusUnauthorized)
req = NewRequestWithBody(t, "PUT", uploadURL, createArchive(
"dummy.txt",
[]byte{},
))
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusBadRequest)
req = NewRequestWithBody(t, "PUT", uploadURL+"?platform=&rversion=", createArchive(
"package/DESCRIPTION",
createDescription(packageName, packageVersion),
))
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusBadRequest)
uploadURL += "?platform=windows&rversion=4.2"
req = NewRequestWithBody(t, "PUT", uploadURL, createArchive(
"package/DESCRIPTION",
createDescription(packageName, packageVersion),
))
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusCreated)
pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeCran)
assert.NoError(t, err)
assert.Len(t, pvs, 1)
pfs, err := packages.GetFilesByVersionID(db.DefaultContext, pvs[0].ID)
assert.NoError(t, err)
assert.Len(t, pfs, 2)
req = NewRequestWithBody(t, "PUT", uploadURL, createArchive(
"package/DESCRIPTION",
createDescription(packageName, packageVersion),
))
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, http.StatusConflict)
})
t.Run("Download", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
cases := []struct {
Platform string
RVersion string
ExpectedStatus int
}{
{"osx", "4.2", http.StatusNotFound},
{"windows", "4.1", http.StatusNotFound},
{"windows", "4.2", http.StatusOK},
}
for _, c := range cases {
req := NewRequest(t, "GET", fmt.Sprintf("%s/bin/%s/contrib/%s/%s_%s.zip", url, c.Platform, c.RVersion, packageName, packageVersion))
req = AddBasicAuthHeader(req, user.Name)
MakeRequest(t, req, c.ExpectedStatus)
}
})
t.Run("Enumerate", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
req := NewRequest(t, "GET", url+"/bin/windows/contrib/4.1/PACKAGES")
MakeRequest(t, req, http.StatusNotFound)
req = NewRequest(t, "GET", url+"/bin/windows/contrib/4.2/PACKAGES")
req = AddBasicAuthHeader(req, user.Name)
resp := MakeRequest(t, req, http.StatusOK)
assert.Contains(t, resp.Header().Get("Content-Type"), "text/plain")
body := resp.Body.String()
assert.Contains(t, body, fmt.Sprintf("Package: %s", packageName))
assert.Contains(t, body, fmt.Sprintf("Version: %s", packageVersion))
req = NewRequest(t, "GET", url+"/bin/windows/contrib/4.2/PACKAGES.gz")
req = AddBasicAuthHeader(req, user.Name)
resp = MakeRequest(t, req, http.StatusOK)
assert.Contains(t, resp.Header().Get("Content-Type"), "application/x-gzip")
})
})
}
+1 -1
View File
@@ -80,7 +80,7 @@ func NewNilResponseHashSumRecorder() *NilResponseHashSumRecorder {
}
func TestMain(m *testing.M) {
defer log.Close()
defer log.GetManager().Close()
managerCtx, cancel := context.WithCancel(context.Background())
graceful.InitManager(managerCtx)
@@ -24,7 +24,9 @@ import (
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/charset"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/testlogger"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/tests"
@@ -35,6 +37,8 @@ import (
var currentEngine *xorm.Engine
func initMigrationTest(t *testing.T) func() {
log.RegisterEventWriter("test", testlogger.NewTestLoggerWriter)
deferFn := tests.PrintCurrentTest(t, 2)
giteaRoot := base.SetupGiteaRoot()
if giteaRoot == "" {
@@ -84,7 +88,7 @@ func initMigrationTest(t *testing.T) func() {
assert.NoError(t, git.InitFull(context.Background()))
setting.LoadDBSetting()
setting.InitLogs(true)
setting.InitLoggersForTest()
return deferFn
}
@@ -292,7 +296,7 @@ func doMigrationTest(t *testing.T, version string) {
return
}
setting.InitSQLLog(false)
setting.InitSQLLoggersForCli(log.INFO)
err := db.InitEngineWithMigration(context.Background(), wrappedMigrate)
assert.NoError(t, err)
+2 -4
View File
@@ -36,6 +36,8 @@ func exitf(format string, args ...interface{}) {
}
func InitTest(requireGitea bool) {
log.RegisterEventWriter("test", testlogger.NewTestLoggerWriter)
giteaRoot := base.SetupGiteaRoot()
if giteaRoot == "" {
exitf("Environment variable $GITEA_ROOT not set")
@@ -246,7 +248,3 @@ func PrintCurrentTest(t testing.TB, skip ...int) func() {
func Printf(format string, args ...interface{}) {
testlogger.Printf(format, args...)
}
func init() {
log.Register("test", testlogger.NewTestLogger)
}