mirror of
https://github.com/Jguer/yay.git
synced 2025-10-05 00:08:30 -04:00
test(download): test pkgbuild fetching
This commit is contained in:
parent
ee3c51f6f2
commit
afc72daba7
2
cmd.go
2
cmd.go
@ -241,7 +241,7 @@ func handleYay(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
|
||||
|
||||
func handleGetpkgbuild(cmdArgs *settings.Arguments, dbExecutor db.Executor) error {
|
||||
if cmdArgs.ExistsArg("p", "pkgbuild") {
|
||||
return printPkgbuilds(dbExecutor, cmdArgs.Targets)
|
||||
return printPkgbuilds(dbExecutor, config.Runtime.HTTPClient, cmdArgs.Targets)
|
||||
}
|
||||
return getPkgbuilds(cmdArgs.Targets, dbExecutor, cmdArgs.ExistsArg("f", "force"))
|
||||
}
|
||||
|
@ -5,14 +5,18 @@ import (
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
)
|
||||
|
||||
var ErrInvalidRepository = errors.New("invalid repository")
|
||||
var ErrABSPackageNotFound = errors.New("package not found in repos")
|
||||
var ErrInvalidRepository = errors.New(gotext.Get("invalid repository"))
|
||||
var ErrABSPackageNotFound = errors.New(gotext.Get("package not found in repos"))
|
||||
|
||||
const MaxConcurrentFetch = 20
|
||||
const ABSPackageURL = "https://git.archlinux.org/svntogit/packages.git/plain/trunk/PKGBUILD?"
|
||||
const ABSCommunityURL = "https://git.archlinux.org/svntogit/community.git/plain/trunk/PKGBUILD?"
|
||||
const urlPackagePath = "/plain/trunk/PKGBUILD?"
|
||||
|
||||
var ABSPackageURL = "https://git.archlinux.org/svntogit/packages.git"
|
||||
var ABSCommunityURL = "https://git.archlinux.org/svntogit/community.git"
|
||||
|
||||
func getPackageURL(db, pkgName string) (string, error) {
|
||||
values := url.Values{}
|
||||
@ -20,24 +24,28 @@ func getPackageURL(db, pkgName string) (string, error) {
|
||||
nameEncoded := values.Encode()
|
||||
switch db {
|
||||
case "core", "extra", "testing":
|
||||
return ABSPackageURL + nameEncoded, nil
|
||||
return ABSPackageURL + urlPackagePath + nameEncoded, nil
|
||||
case "community", "multilib", "community-testing", "multilib-testing":
|
||||
return ABSCommunityURL + nameEncoded, nil
|
||||
return ABSCommunityURL + urlPackagePath + nameEncoded, nil
|
||||
}
|
||||
return "", ErrInvalidRepository
|
||||
}
|
||||
|
||||
func GetABSPkgbuild(dbName, pkgName string) ([]byte, error) {
|
||||
func GetABSPkgbuild(httpClient *http.Client, dbName, pkgName string) ([]byte, error) {
|
||||
packageURL, err := getPackageURL(dbName, pkgName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := http.Get(packageURL)
|
||||
resp, err := httpClient.Get(packageURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
return nil, ErrABSPackageNotFound
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
|
||||
pkgBuild, err := ioutil.ReadAll(resp.Body)
|
||||
|
141
pkg/download/abs_test.go
Normal file
141
pkg/download/abs_test.go
Normal file
@ -0,0 +1,141 @@
|
||||
package download
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
const gitExtrasPKGBUILD = `pkgname=git-extras
|
||||
pkgver=6.1.0
|
||||
pkgrel=1
|
||||
pkgdesc="GIT utilities -- repo summary, commit counting, repl, changelog population and more"
|
||||
arch=('any')
|
||||
url="https://github.com/tj/${pkgname}"
|
||||
license=('MIT')
|
||||
depends=('git')
|
||||
source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/${pkgver}.tar.gz")
|
||||
sha256sums=('7be0b15ee803d76d2c2e8036f5d9db6677f2232bb8d2c4976691ff7ae026a22f')
|
||||
b2sums=('3450edecb3116e19ffcf918b118aee04f025c06d812e29e8701f35a3c466b13d2578d41c8e1ee93327743d0019bf98bb3f397189e19435f89e3a259ff1b82747')
|
||||
|
||||
package() {
|
||||
cd "${srcdir}/${pkgname}-${pkgver}"
|
||||
|
||||
# avoid annoying interactive prompts if an alias is in your gitconfig
|
||||
export GIT_CONFIG=/dev/null
|
||||
make DESTDIR="${pkgdir}" PREFIX=/usr SYSCONFDIR=/etc install
|
||||
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
||||
}`
|
||||
|
||||
func Test_getPackageURL(t *testing.T) {
|
||||
type args struct {
|
||||
db string
|
||||
pkgName string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want string
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "community package",
|
||||
args: args{
|
||||
db: "community",
|
||||
pkgName: "kitty",
|
||||
},
|
||||
want: "https://git.archlinux.org/svntogit/community.git/plain/trunk/PKGBUILD?h=packages%2Fkitty",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "core package",
|
||||
args: args{
|
||||
db: "core",
|
||||
pkgName: "linux",
|
||||
},
|
||||
want: "https://git.archlinux.org/svntogit/packages.git/plain/trunk/PKGBUILD?h=packages%2Flinux",
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "personal repo package",
|
||||
args: args{
|
||||
db: "sweswe",
|
||||
pkgName: "linux",
|
||||
},
|
||||
want: "",
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := getPackageURL(tt.args.db, tt.args.pkgName)
|
||||
if tt.wantErr {
|
||||
assert.ErrorIs(t, err, ErrInvalidRepository)
|
||||
}
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetABSPkgbuild(t *testing.T) {
|
||||
pkgBuildHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
w.WriteHeader(200)
|
||||
w.Write([]byte(gitExtrasPKGBUILD))
|
||||
})
|
||||
|
||||
notFoundHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
w.WriteHeader(404)
|
||||
})
|
||||
|
||||
PKGBuild := httptest.NewServer(pkgBuildHandler)
|
||||
type args struct {
|
||||
handler http.Handler
|
||||
dbName string
|
||||
pkgName string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want string
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "found package",
|
||||
args: args{
|
||||
handler: pkgBuildHandler,
|
||||
dbName: "core",
|
||||
pkgName: "git-extras",
|
||||
},
|
||||
want: gitExtrasPKGBUILD,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "not found package",
|
||||
args: args{
|
||||
handler: notFoundHandler,
|
||||
dbName: "core",
|
||||
pkgName: "git-extras",
|
||||
},
|
||||
want: "",
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
ABSPackageURL = PKGBuild.URL
|
||||
PKGBuild.Config.Handler = tt.args.handler
|
||||
got, err := GetABSPkgbuild(PKGBuild.Client(), tt.args.dbName, tt.args.pkgName)
|
||||
if tt.wantErr {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
assert.Equal(t, tt.want, string(got))
|
||||
})
|
||||
}
|
||||
}
|
@ -5,18 +5,20 @@ import (
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/leonelquinteros/gotext"
|
||||
)
|
||||
|
||||
const AURPackageURL = "https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?"
|
||||
var AURPackageURL = "https://aur.archlinux.org/cgit/aur.git"
|
||||
|
||||
var ErrAURPackageNotFound = errors.New("package not found in AUR")
|
||||
var ErrAURPackageNotFound = errors.New(gotext.Get("package not found in AUR"))
|
||||
|
||||
func GetAURPkgbuild(pkgName string) ([]byte, error) {
|
||||
func GetAURPkgbuild(httpClient *http.Client, pkgName string) ([]byte, error) {
|
||||
values := url.Values{}
|
||||
values.Set("h", pkgName)
|
||||
pkgURL := AURPackageURL + values.Encode()
|
||||
pkgURL := AURPackageURL + "/plain/PKGBUILD?" + values.Encode()
|
||||
|
||||
resp, err := http.Get(pkgURL)
|
||||
resp, err := httpClient.Get(pkgURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
67
pkg/download/aur_test.go
Normal file
67
pkg/download/aur_test.go
Normal file
@ -0,0 +1,67 @@
|
||||
package download
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestGetAURPkgbuild(t *testing.T) {
|
||||
pkgBuildHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
w.WriteHeader(200)
|
||||
w.Write([]byte(gitExtrasPKGBUILD))
|
||||
})
|
||||
|
||||
notFoundHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
w.WriteHeader(404)
|
||||
})
|
||||
|
||||
PKGBuild := httptest.NewServer(pkgBuildHandler)
|
||||
type args struct {
|
||||
handler http.Handler
|
||||
pkgName string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want string
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "found package",
|
||||
args: args{
|
||||
handler: pkgBuildHandler,
|
||||
pkgName: "git-extras",
|
||||
},
|
||||
want: gitExtrasPKGBUILD,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "not found package",
|
||||
args: args{
|
||||
handler: notFoundHandler,
|
||||
pkgName: "git-extras",
|
||||
},
|
||||
want: "",
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
AURPackageURL = PKGBuild.URL
|
||||
PKGBuild.Config.Handler = tt.args.handler
|
||||
got, err := GetAURPkgbuild(PKGBuild.Client(), tt.args.pkgName)
|
||||
if tt.wantErr {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
assert.Equal(t, tt.want, string(got))
|
||||
})
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package download
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"sync"
|
||||
|
||||
"github.com/Jguer/go-alpm/v2"
|
||||
@ -19,7 +20,7 @@ func getURLName(pkg alpm.IPackage) string {
|
||||
return name
|
||||
}
|
||||
|
||||
func GetPkgbuilds(dbExecutor db.Executor, targets []string, mode settings.TargetMode) (map[string][]byte, error) {
|
||||
func GetPkgbuilds(dbExecutor db.Executor, httpClient *http.Client, targets []string, mode settings.TargetMode) (map[string][]byte, error) {
|
||||
pkgbuilds := make(map[string][]byte, len(targets))
|
||||
var mux sync.Mutex
|
||||
var errs multierror.MultiError
|
||||
@ -51,9 +52,9 @@ func GetPkgbuilds(dbExecutor db.Executor, targets []string, mode settings.Target
|
||||
var pkgbuild []byte
|
||||
|
||||
if aur {
|
||||
pkgbuild, err = GetAURPkgbuild(pkgName)
|
||||
pkgbuild, err = GetAURPkgbuild(httpClient, pkgName)
|
||||
} else {
|
||||
pkgbuild, err = GetABSPkgbuild(dbName, pkgName)
|
||||
pkgbuild, err = GetABSPkgbuild(httpClient, dbName, pkgName)
|
||||
}
|
||||
|
||||
if err == nil {
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@ -213,6 +214,7 @@ func NewConfig() (*Configuration, error) {
|
||||
},
|
||||
PacmanConf: nil,
|
||||
VCSStore: nil,
|
||||
HTTPClient: &http.Client{},
|
||||
}
|
||||
|
||||
newConfig.Runtime.VCSStore = vcs.NewInfoStore(filepath.Join(cacheHome, vcsFileName),
|
||||
|
@ -1,6 +1,8 @@
|
||||
package settings
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/Morganamilo/go-pacmanconf"
|
||||
|
||||
"github.com/Jguer/yay/v10/pkg/settings/exe"
|
||||
@ -24,4 +26,5 @@ type Runtime struct {
|
||||
VCSStore *vcs.InfoStore
|
||||
CmdBuilder *exe.CmdBuilder
|
||||
CmdRunner exe.Runner
|
||||
HTTPClient *http.Client
|
||||
}
|
||||
|
5
print.go
5
print.go
@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -269,8 +270,8 @@ outer:
|
||||
return nil
|
||||
}
|
||||
|
||||
func printPkgbuilds(dbExecutor db.Executor, targets []string) error {
|
||||
pkgbuilds, err := download.GetPkgbuilds(dbExecutor, targets, config.Runtime.Mode)
|
||||
func printPkgbuilds(dbExecutor db.Executor, httpClient *http.Client, targets []string) error {
|
||||
pkgbuilds, err := download.GetPkgbuilds(dbExecutor, httpClient, targets, config.Runtime.Mode)
|
||||
if err != nil {
|
||||
text.Errorln(err)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user