Files
yay/pkg/download/aur_integration_test.go
T
Jo 15057c8dab misc(ci): add modernize linter and update versioning (#2870)
* add modernize linter

* lint unused

* update imports

* ignore agent info
2026-06-17 21:09:53 +02:00

116 lines
3.4 KiB
Go

//go:build integration
// +build integration
package download
import (
"bytes"
"compress/gzip"
"context"
"io"
"net/http"
"net/http/httptest"
"os"
"strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/Jguer/yay/v13/pkg/settings/exe"
"github.com/Jguer/yay/v13/pkg/text"
)
// WHEN some AUR bases exist and others are fresh
// THEN AURPKGBUILDRepos returns mixed newClone flags
func TestIntegrationAURPKGBUILDReposMixedCloneAndPull(t *testing.T) {
dir := t.TempDir()
testLogger := text.NewLogger(os.Stdout, os.Stderr, strings.NewReader(""), true, "test")
cmdRunner := &exe.OSRunner{Log: testLogger}
cmdBuilder := &exe.CmdBuilder{
Runner: cmdRunner,
GitBin: "git",
GitFlags: []string{},
Log: testLogger,
}
targets := []string{"yay-bin", "yay-git"}
cloned1, err1 := AURPKGBUILDRepos(context.Background(), cmdBuilder, testLogger.Child("dl"),
targets, "https://aur.archlinux.org", dir, false)
require.NoError(t, err1)
assert.EqualValues(t, map[string]bool{"yay-bin": true, "yay-git": true}, cloned1)
cloned2, err2 := AURPKGBUILDRepos(context.Background(), cmdBuilder, testLogger.Child("dl2"),
targets, "https://aur.archlinux.org", dir, false)
require.NoError(t, err2)
assert.EqualValues(t, map[string]bool{"yay-bin": false, "yay-git": false}, cloned2)
}
func TestIntegrationGetPackageScannerGzip(t *testing.T) {
var buf bytes.Buffer
gw := gzip.NewWriter(&buf)
_, err := gw.Write([]byte("line1\nline2\n"))
require.NoError(t, err)
require.NoError(t, gw.Close())
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/packages.gz" {
http.NotFound(w, r)
return
}
w.WriteHeader(http.StatusOK)
_, _ = w.Write(buf.Bytes())
}))
t.Cleanup(srv.Close)
testLogger := text.NewLogger(io.Discard, io.Discard, strings.NewReader(""), true, "test")
sc, err := GetPackageScanner(context.Background(), srv.Client(), srv.URL, testLogger)
require.NoError(t, err)
t.Cleanup(func() { assert.NoError(t, sc.Close()) })
var lines []string
for sc.Scan() {
lines = append(lines, sc.Text())
}
require.NoError(t, sc.Err())
assert.Equal(t, []string{"line1", "line2"}, lines)
}
func TestIntegrationGetPackageScannerRawFallback(t *testing.T) {
body := []byte("alpha\nbeta\n")
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/packages.gz" {
http.NotFound(w, r)
return
}
w.WriteHeader(http.StatusOK)
_, _ = w.Write(body)
}))
t.Cleanup(srv.Close)
testLogger := text.NewLogger(io.Discard, io.Discard, strings.NewReader(""), true, "test")
sc, err := GetPackageScanner(context.Background(), srv.Client(), srv.URL, testLogger)
require.NoError(t, err)
t.Cleanup(func() { assert.NoError(t, sc.Close()) })
var lines []string
for sc.Scan() {
lines = append(lines, sc.Text())
}
require.NoError(t, sc.Err())
assert.Equal(t, []string{"alpha", "beta"}, lines)
}
func TestIntegrationGetPackageScannerHTTPError(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
http.Error(w, "gone", http.StatusNotFound)
}))
t.Cleanup(srv.Close)
testLogger := text.NewLogger(io.Discard, io.Discard, strings.NewReader(""), true, "test")
sc, err := GetPackageScanner(context.Background(), srv.Client(), srv.URL, testLogger)
assert.Error(t, err)
assert.Nil(t, sc)
}