mirror of
https://codeberg.org/forgejo/forgejo
synced 2024-11-22 18:04:24 +01:00
122 lines
3.5 KiB
Go
122 lines
3.5 KiB
Go
// Copyright 2024 The Forgejo Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package integration
|
|
|
|
import (
|
|
"archive/zip"
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
packages_model "code.gitea.io/gitea/models/packages"
|
|
"code.gitea.io/gitea/models/unittest"
|
|
user_model "code.gitea.io/gitea/models/user"
|
|
"code.gitea.io/gitea/modules/log"
|
|
packages_module "code.gitea.io/gitea/modules/packages"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
"code.gitea.io/gitea/modules/test"
|
|
doctor "code.gitea.io/gitea/services/doctor"
|
|
packages_service "code.gitea.io/gitea/services/packages"
|
|
"code.gitea.io/gitea/tests"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDoctorPackagesNuget(t *testing.T) {
|
|
defer tests.PrepareTestEnv(t, 1)()
|
|
// use local storage for tests because minio is too flaky
|
|
defer test.MockVariableValue(&setting.Packages.Storage.Type, setting.LocalStorageType)()
|
|
|
|
logger := log.GetLogger("doctor")
|
|
|
|
ctx := db.DefaultContext
|
|
|
|
packageName := "test.package"
|
|
packageVersion := "1.0.3"
|
|
packageAuthors := "KN4CK3R"
|
|
packageDescription := "Gitea Test Package"
|
|
|
|
createPackage := func(id, version string) io.Reader {
|
|
var buf bytes.Buffer
|
|
archive := zip.NewWriter(&buf)
|
|
w, _ := archive.Create("package.nuspec")
|
|
w.Write([]byte(`<?xml version="1.0" encoding="utf-8"?>
|
|
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
|
|
<metadata>
|
|
<id>` + id + `</id>
|
|
<version>` + version + `</version>
|
|
<authors>` + packageAuthors + `</authors>
|
|
<description>` + packageDescription + `</description>
|
|
<dependencies>
|
|
<group targetFramework=".NETStandard2.0">
|
|
<dependency id="Microsoft.CSharp" version="4.5.0" />
|
|
</group>
|
|
</dependencies>
|
|
</metadata>
|
|
</package>`))
|
|
archive.Close()
|
|
return &buf
|
|
}
|
|
|
|
pkg := createPackage(packageName, packageVersion)
|
|
|
|
pkgBuf, err := packages_module.CreateHashedBufferFromReader(pkg)
|
|
assert.NoError(t, err, "Error creating hashed buffer from nupkg")
|
|
defer pkgBuf.Close()
|
|
|
|
doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2})
|
|
assert.NoError(t, err, "Error getting user by ID 2")
|
|
|
|
t.Run("PackagesNugetNuspecCheck", func(t *testing.T) {
|
|
defer tests.PrintCurrentTest(t)()
|
|
pi := &packages_service.PackageInfo{
|
|
Owner: doer,
|
|
PackageType: packages_model.TypeNuGet,
|
|
Name: packageName,
|
|
Version: packageVersion,
|
|
}
|
|
_, _, err := packages_service.CreatePackageAndAddFile(
|
|
ctx,
|
|
&packages_service.PackageCreationInfo{
|
|
PackageInfo: *pi,
|
|
SemverCompatible: true,
|
|
Creator: doer,
|
|
Metadata: nil,
|
|
},
|
|
&packages_service.PackageFileCreationInfo{
|
|
PackageFileInfo: packages_service.PackageFileInfo{
|
|
Filename: strings.ToLower(fmt.Sprintf("%s.%s.nupkg", packageName, packageVersion)),
|
|
},
|
|
Creator: doer,
|
|
Data: pkgBuf,
|
|
IsLead: true,
|
|
},
|
|
)
|
|
assert.NoError(t, err, "Error creating package and adding file")
|
|
|
|
assert.NoError(t, doctor.PackagesNugetNuspecCheck(ctx, logger, true), "Doctor check failed")
|
|
|
|
s, _, pf, err := packages_service.GetFileStreamByPackageNameAndVersion(
|
|
ctx,
|
|
&packages_service.PackageInfo{
|
|
Owner: doer,
|
|
PackageType: packages_model.TypeNuGet,
|
|
Name: packageName,
|
|
Version: packageVersion,
|
|
},
|
|
&packages_service.PackageFileInfo{
|
|
Filename: strings.ToLower(fmt.Sprintf("%s.nuspec", packageName)),
|
|
},
|
|
)
|
|
|
|
assert.NoError(t, err, "Error getting nuspec file stream by package name and version")
|
|
defer s.Close()
|
|
|
|
assert.Equal(t, fmt.Sprintf("%s.nuspec", packageName), pf.Name, "Not a nuspec")
|
|
})
|
|
}
|