mirror of
https://github.com/gogrlx/snack.git
synced 2026-04-02 05:08:42 -07:00
- Fix addRepo to use 'config-manager addrepo --from-repofile=' for dnf5 (dnf4 uses 'config-manager --add-repo') - Add fedora:latest (dnf5) to containertest matrix - Add IsDNF5 detection integration test - Add RepoManager and NameNormalizer integration test coverage - Rename containertest fedora entry to fedora-dnf4 for clarity
131 lines
2.9 KiB
Go
131 lines
2.9 KiB
Go
//go:build integration
|
|
|
|
package dnf_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/gogrlx/snack"
|
|
"github.com/gogrlx/snack/dnf"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestIntegration_DNF_Detection(t *testing.T) {
|
|
d := dnf.New()
|
|
if !d.Available() {
|
|
t.Skip("dnf not available")
|
|
}
|
|
t.Logf("IsDNF5: %v", d.IsDNF5())
|
|
}
|
|
|
|
func TestIntegration_DNF(t *testing.T) {
|
|
var mgr snack.Manager = dnf.New()
|
|
if !mgr.Available() {
|
|
t.Skip("dnf not available")
|
|
}
|
|
ctx := context.Background()
|
|
|
|
t.Run("Update", func(t *testing.T) {
|
|
err := mgr.Update(ctx)
|
|
require.NoError(t, err)
|
|
})
|
|
|
|
t.Run("Search", func(t *testing.T) {
|
|
pkgs, err := mgr.Search(ctx, "curl")
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, pkgs)
|
|
})
|
|
|
|
t.Run("Info", func(t *testing.T) {
|
|
pkg, err := mgr.Info(ctx, "curl")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, pkg)
|
|
assert.Equal(t, "curl", pkg.Name)
|
|
})
|
|
|
|
t.Run("Install", func(t *testing.T) {
|
|
err := mgr.Install(ctx, snack.Targets("tree"), snack.WithSudo(), snack.WithAssumeYes())
|
|
require.NoError(t, err)
|
|
})
|
|
|
|
t.Run("IsInstalled", func(t *testing.T) {
|
|
installed, err := mgr.IsInstalled(ctx, "tree")
|
|
require.NoError(t, err)
|
|
assert.True(t, installed)
|
|
})
|
|
|
|
t.Run("Version", func(t *testing.T) {
|
|
ver, err := mgr.Version(ctx, "tree")
|
|
require.NoError(t, err)
|
|
assert.NotEmpty(t, ver)
|
|
})
|
|
|
|
t.Run("List", func(t *testing.T) {
|
|
pkgs, err := mgr.List(ctx)
|
|
require.NoError(t, err)
|
|
found := false
|
|
for _, p := range pkgs {
|
|
if p.Name == "tree" {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
assert.True(t, found, "tree should be in installed list")
|
|
})
|
|
|
|
t.Run("Remove", func(t *testing.T) {
|
|
err := mgr.Remove(ctx, snack.Targets("tree"), snack.WithSudo(), snack.WithAssumeYes())
|
|
require.NoError(t, err)
|
|
})
|
|
|
|
t.Run("IsInstalled_After_Remove", func(t *testing.T) {
|
|
installed, err := mgr.IsInstalled(ctx, "tree")
|
|
require.NoError(t, err)
|
|
assert.False(t, installed)
|
|
})
|
|
|
|
t.Run("Capabilities", func(t *testing.T) {
|
|
if vq, ok := mgr.(snack.VersionQuerier); ok {
|
|
ver, err := vq.LatestVersion(ctx, "curl")
|
|
require.NoError(t, err)
|
|
assert.NotEmpty(t, ver)
|
|
|
|
upgrades, err := vq.ListUpgrades(ctx)
|
|
require.NoError(t, err)
|
|
_ = upgrades
|
|
}
|
|
|
|
if cl, ok := mgr.(snack.Cleaner); ok {
|
|
err := cl.Clean(ctx)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
if fo, ok := mgr.(snack.FileOwner); ok {
|
|
owner, err := fo.Owner(ctx, "/usr/bin/dnf")
|
|
if err == nil {
|
|
assert.NotEmpty(t, owner)
|
|
}
|
|
}
|
|
|
|
if g, ok := mgr.(snack.Grouper); ok {
|
|
groups, err := g.GroupList(ctx)
|
|
require.NoError(t, err)
|
|
_ = groups
|
|
}
|
|
|
|
if rm, ok := mgr.(snack.RepoManager); ok {
|
|
repos, err := rm.ListRepos(ctx)
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, repos, "should have at least one repo")
|
|
t.Logf("repos: %d", len(repos))
|
|
}
|
|
|
|
if nn, ok := mgr.(snack.NameNormalizer); ok {
|
|
got := nn.NormalizeName("curl.x86_64")
|
|
assert.Equal(t, "curl", got)
|
|
}
|
|
})
|
|
}
|