diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 4379008..6692ff5 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -20,3 +20,11 @@ jobs: run: /app/bin/golangci-lint run ./... - name: Run Build and Tests run: make test + - name: Run Integration Tests + continue-on-error: true + run: | + useradd -m yay && + chown -R yay:yay . && + cp -r ~/go/ /home/yay/go/ && + chown -R yay:yay /home/yay/go/ && + su yay -c "make test-integration" diff --git a/Dockerfile b/Dockerfile index 6af4ded..1a89eef 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM docker.io/jguer/yay-builder:latest -LABEL maintainer="Jguer,joaogg3 at google mail" +LABEL maintainer="Jguer,docker@jguer.space" ARG VERSION ARG PREFIX diff --git a/Makefile b/Makefile index 45963e7..fed54fb 100644 --- a/Makefile +++ b/Makefile @@ -53,6 +53,10 @@ test_lint: test lint test: $(GO) test -race -covermode=atomic $(FLAGS) ./... +.PHONY: test-integration +test-integration: + $(GO) test -tags=integration $(FLAGS) ./... + .PHONY: build build: $(BIN) diff --git a/aur_source_test.go b/aur_source_test.go index 14d8061..907ff01 100644 --- a/aur_source_test.go +++ b/aur_source_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package main import ( diff --git a/ci.Dockerfile b/ci.Dockerfile index 1c49db7..d72f4b1 100644 --- a/ci.Dockerfile +++ b/ci.Dockerfile @@ -1,4 +1,5 @@ FROM docker.io/jguer/yay-builder:latest +LABEL maintainer="Jguer,docker@jguer.space" ENV GO111MODULE=on WORKDIR /app diff --git a/clean_test.go b/clean_test.go index 4023311..1d5d356 100644 --- a/clean_test.go +++ b/clean_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package main import ( diff --git a/cmd_test.go b/cmd_test.go index 68fb890..40f3326 100644 --- a/cmd_test.go +++ b/cmd_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package main import ( diff --git a/local_install_test.go b/local_install_test.go index f43615d..7bd8da7 100644 --- a/local_install_test.go +++ b/local_install_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package main import ( diff --git a/pkg/completion/completion_test.go b/pkg/completion/completion_test.go index 7664be9..5af0bea 100644 --- a/pkg/completion/completion_test.go +++ b/pkg/completion/completion_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package completion import ( diff --git a/pkg/db/ialpm/alpm_test.go b/pkg/db/ialpm/alpm_test.go index cccc9f2..87884d7 100644 --- a/pkg/db/ialpm/alpm_test.go +++ b/pkg/db/ialpm/alpm_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package ialpm import ( diff --git a/pkg/dep/dep_graph_test.go b/pkg/dep/dep_graph_test.go index 992b826..63bd104 100644 --- a/pkg/dep/dep_graph_test.go +++ b/pkg/dep/dep_graph_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package dep import ( diff --git a/pkg/download/abs_test.go b/pkg/download/abs_test.go index e2b44b7..e4f6acc 100644 --- a/pkg/download/abs_test.go +++ b/pkg/download/abs_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package download import ( diff --git a/pkg/download/aur_test.go b/pkg/download/aur_test.go index 752f375..aa61a11 100644 --- a/pkg/download/aur_test.go +++ b/pkg/download/aur_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package download import ( diff --git a/pkg/download/unified_integration_test.go b/pkg/download/unified_integration_test.go new file mode 100644 index 0000000..8e5be72 --- /dev/null +++ b/pkg/download/unified_integration_test.go @@ -0,0 +1,105 @@ +//go:build integration +// +build integration + +package download + +import ( + "context" + "net/http" + "os" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/Jguer/aur" + + mockaur "github.com/Jguer/yay/v12/pkg/dep/mock" + "github.com/Jguer/yay/v12/pkg/settings/exe" + "github.com/Jguer/yay/v12/pkg/settings/parser" + "github.com/Jguer/yay/v12/pkg/text" +) + +func TestIntegrationPKGBUILDReposDefinedDBClone(t *testing.T) { + dir := t.TempDir() + + mockClient := &mockaur.MockAUR{ + GetFn: func(ctx context.Context, query *aur.Query) ([]aur.Pkg, error) { + return []aur.Pkg{{}}, nil // fakes a package found for all + }, + } + targets := []string{"core/linux", "yay-bin", "yay-git"} + + 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, + } + searcher := &testDBSearcher{ + absPackagesDB: map[string]string{"linux": "core"}, + } + cloned, err := PKGBUILDRepos(context.Background(), searcher, mockClient, + cmdBuilder, + targets, parser.ModeAny, "https://aur.archlinux.org", dir, false) + + assert.NoError(t, err) + assert.EqualValues(t, map[string]bool{"core/linux": true, "yay-bin": true, "yay-git": true}, cloned) +} + +func TestIntegrationPKGBUILDReposNotExist(t *testing.T) { + dir := t.TempDir() + + mockClient := &mockaur.MockAUR{ + GetFn: func(ctx context.Context, query *aur.Query) ([]aur.Pkg, error) { + return []aur.Pkg{{}}, nil // fakes a package found for all + }, + } + targets := []string{"core/yay", "yay-bin", "yay-git"} + 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, + } + + searcher := &testDBSearcher{ + absPackagesDB: map[string]string{"yay": "core"}, + } + cloned, err := PKGBUILDRepos(context.Background(), searcher, mockClient, + cmdBuilder, + targets, parser.ModeAny, "https://aur.archlinux.org", dir, false) + + assert.Error(t, err) + assert.EqualValues(t, map[string]bool{"yay-bin": true, "yay-git": true}, cloned) +} + +// GIVEN 2 aur packages and 1 in repo +// WHEN defining as specified targets +// THEN all aur be found and cloned +func TestIntegrationPKGBUILDFull(t *testing.T) { + mockClient := &mockaur.MockAUR{ + GetFn: func(ctx context.Context, query *aur.Query) ([]aur.Pkg, error) { + return []aur.Pkg{{}}, nil + }, + } + + targets := []string{"core/linux", "aur/yay-bin", "yay-git"} + searcher := &testDBSearcher{ + absPackagesDB: map[string]string{"linux": "core"}, + } + + fetched, err := PKGBUILDs(searcher, mockClient, &http.Client{}, + targets, "https://aur.archlinux.org", parser.ModeAny) + + assert.NoError(t, err) + + for _, target := range targets { + assert.Contains(t, fetched, target) + assert.NotEmpty(t, fetched[target]) + } +} diff --git a/pkg/download/unified_test.go b/pkg/download/unified_test.go index eaf2600..b9e5f94 100644 --- a/pkg/download/unified_test.go +++ b/pkg/download/unified_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package download import ( @@ -5,6 +8,7 @@ import ( "net/http" "os" "path/filepath" + "strings" "testing" "github.com/stretchr/testify/assert" @@ -15,6 +19,7 @@ import ( mockaur "github.com/Jguer/yay/v12/pkg/dep/mock" "github.com/Jguer/yay/v12/pkg/settings/exe" "github.com/Jguer/yay/v12/pkg/settings/parser" + "github.com/Jguer/yay/v12/pkg/text" ) // GIVEN 2 aur packages and 1 in repo @@ -31,6 +36,8 @@ func TestPKGBUILDReposDefinedDBPull(t *testing.T) { }, } + testLogger := text.NewLogger(os.Stdout, os.Stderr, strings.NewReader(""), true, "test") + os.MkdirAll(filepath.Join(dir, "yay", ".git"), 0o777) targets := []string{"core/yay", "yay-bin", "yay-git"} @@ -42,6 +49,7 @@ func TestPKGBUILDReposDefinedDBPull(t *testing.T) { Runner: cmdRunner, GitBin: "/usr/local/bin/git", GitFlags: []string{}, + Log: testLogger, }, } searcher := &testDBSearcher{ diff --git a/pkg/intrange/intrange_test.go b/pkg/intrange/intrange_test.go index 471cba2..0893808 100644 --- a/pkg/intrange/intrange_test.go +++ b/pkg/intrange/intrange_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package intrange import ( diff --git a/pkg/news/news_test.go b/pkg/news/news_test.go index 2afecce..779d31b 100644 --- a/pkg/news/news_test.go +++ b/pkg/news/news_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package news import ( diff --git a/pkg/pgp/keys_test.go b/pkg/pgp/keys_test.go index 4600bb5..3ac0df7 100644 --- a/pkg/pgp/keys_test.go +++ b/pkg/pgp/keys_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package pgp import ( diff --git a/pkg/query/query_builder_test.go b/pkg/query/query_builder_test.go index 19af1ca..1ef90cf 100644 --- a/pkg/query/query_builder_test.go +++ b/pkg/query/query_builder_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package query import ( diff --git a/pkg/query/source_test.go b/pkg/query/source_test.go index 9cad275..131d8b0 100644 --- a/pkg/query/source_test.go +++ b/pkg/query/source_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package query import ( diff --git a/pkg/query/version_diff_test.go b/pkg/query/version_diff_test.go index 01b0c3f..16fceca 100644 --- a/pkg/query/version_diff_test.go +++ b/pkg/query/version_diff_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package query import ( diff --git a/pkg/settings/config_test.go b/pkg/settings/config_test.go index 458e2d9..8a228f5 100644 --- a/pkg/settings/config_test.go +++ b/pkg/settings/config_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package settings import ( diff --git a/pkg/settings/dirs_test.go b/pkg/settings/dirs_test.go index 8503367..582b945 100644 --- a/pkg/settings/dirs_test.go +++ b/pkg/settings/dirs_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package settings import ( diff --git a/pkg/settings/migrations_test.go b/pkg/settings/migrations_test.go index dee0f7e..b8f203e 100644 --- a/pkg/settings/migrations_test.go +++ b/pkg/settings/migrations_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package settings import ( diff --git a/pkg/settings/pacman_test.go b/pkg/settings/pacman_test.go index 38a65d2..527d513 100644 --- a/pkg/settings/pacman_test.go +++ b/pkg/settings/pacman_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package settings import ( diff --git a/pkg/settings/parser/parser_test.go b/pkg/settings/parser/parser_test.go index 0e4956a..a1628c8 100644 --- a/pkg/settings/parser/parser_test.go +++ b/pkg/settings/parser/parser_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package parser import ( diff --git a/pkg/settings/runtime_test.go b/pkg/settings/runtime_test.go index 84f8369..3946713 100644 --- a/pkg/settings/runtime_test.go +++ b/pkg/settings/runtime_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package settings_test import ( diff --git a/pkg/text/text_test.go b/pkg/text/text_test.go index 3a67043..ddafeac 100644 --- a/pkg/text/text_test.go +++ b/pkg/text/text_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package text import ( diff --git a/pkg/upgrade/service_test.go b/pkg/upgrade/service_test.go index dfa9781..93d8e4e 100644 --- a/pkg/upgrade/service_test.go +++ b/pkg/upgrade/service_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package upgrade import ( diff --git a/pkg/upgrade/sources_test.go b/pkg/upgrade/sources_test.go index ddeec51..a01329e 100644 --- a/pkg/upgrade/sources_test.go +++ b/pkg/upgrade/sources_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package upgrade import ( diff --git a/pkg/upgrade/upgrade_test.go b/pkg/upgrade/upgrade_test.go index 712d4a0..2dfa26d 100644 --- a/pkg/upgrade/upgrade_test.go +++ b/pkg/upgrade/upgrade_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package upgrade import ( diff --git a/pkg/vcs/vcs_test.go b/pkg/vcs/vcs_test.go index 53e8746..05a2bb9 100644 --- a/pkg/vcs/vcs_test.go +++ b/pkg/vcs/vcs_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package vcs import ( diff --git a/preparer_test.go b/preparer_test.go index ca8b992..2bc5f8a 100644 --- a/preparer_test.go +++ b/preparer_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package main import ( diff --git a/print_test.go b/print_test.go index 9258951..d24d465 100644 --- a/print_test.go +++ b/print_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package main import ( @@ -27,7 +30,7 @@ import ( func TestPrintUpdateList(t *testing.T) { // The current method of capturing os.Stdout hinders parallelization. // Setting of global settings.NoConfirm in printUpdateList also hinders parallelization. - //t.Parallel() + // t.Parallel() pacmanBin := t.TempDir() + "/pacman" f, err := os.OpenFile(pacmanBin, os.O_RDONLY|os.O_CREATE, 0o755) require.NoError(t, err) diff --git a/query_test.go b/query_test.go index fe71e62..c013c20 100644 --- a/query_test.go +++ b/query_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package main import ( diff --git a/sync_test.go b/sync_test.go index bad51b2..bc675d9 100644 --- a/sync_test.go +++ b/sync_test.go @@ -1,3 +1,6 @@ +//go:build !integration +// +build !integration + package main import (