Files
Dominik Schulz 7281ca8ab4 [chore] Migrate to golangci-lint v2 (#3104)
* [chore] Migrate to golangci-lint v2

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [chore] Fix more lint issues

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [chore] Fix more lint issue

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [chore] Fix more lint issues

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [chore] Add more package comments.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [chore] Fix golangci-lint config and the remaining checks

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [fix] Use Go 1.24

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [fix] Fix container builds

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* Fix more failing tests

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* Fix test failure

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* Fix another len assertion

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* Move location tests

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [fix] Fix most remaining lint issues

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [fix] Only run XDG specific tests on linux

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* [fix] Attempt to address on source of flaky failures

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-04-17 08:05:43 +02:00

136 lines
3.9 KiB
Go

package action
import (
"bytes"
"os"
"strings"
"testing"
"github.com/fatih/color"
"github.com/gopasspw/gopass/internal/backend"
"github.com/gopasspw/gopass/internal/config"
"github.com/gopasspw/gopass/internal/out"
"github.com/gopasspw/gopass/pkg/ctxutil"
"github.com/gopasspw/gopass/tests/can"
"github.com/gopasspw/gopass/tests/gptest"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestFsck(t *testing.T) {
u := gptest.NewUnitTester(t)
ctx := config.NewContextInMemory()
ctx = ctxutil.WithTerminal(ctx, false)
act, err := newMock(ctx, u.StoreDir(""))
require.NoError(t, err)
require.NotNil(t, act)
ctx = act.cfg.WithConfig(ctx)
buf := &bytes.Buffer{}
out.Stdout = buf
out.Stderr = buf
stdout = buf
defer func() {
stdout = os.Stdout
out.Stdout = os.Stdout
out.Stderr = os.Stderr
}()
color.NoColor = true
// generate foo/bar
c := gptest.CliCtx(ctx, t, "foo/bar", "24")
require.NoError(t, act.Generate(c), "gopass generate foo/bar 24")
buf.Reset()
// fsck
require.NoError(t, act.Fsck(gptest.CliCtx(ctx, t)))
output := strings.TrimSpace(buf.String())
assert.Contains(t, output, "Checking password store integrity ...")
assert.Contains(t, output, "extra recipients on foo: [0xFEEDBEEF]")
buf.Reset()
// fsck (hidden)
require.NoError(t, act.Fsck(gptest.CliCtx(ctxutil.WithHidden(ctx, true), t)))
output = strings.TrimSpace(buf.String())
assert.NotContains(t, output, "Checking password store integrity ...")
assert.NotContains(t, output, "extra recipients on foo: [0xFEEDBEEF]")
buf.Reset()
// fsck --decrypt
require.NoError(t, act.Fsck(gptest.CliCtxWithFlags(ctx, t, map[string]string{"decrypt": "true"})))
output = strings.TrimSpace(buf.String())
assert.Contains(t, output, "Checking password store integrity ...")
assert.Contains(t, output, "extra recipients on foo: [0xFEEDBEEF]")
buf.Reset()
// fsck foo
require.NoError(t, act.Fsck(gptest.CliCtx(ctx, t, "foo")))
output = strings.TrimSpace(buf.String())
assert.Contains(t, output, "Checking password store integrity ...")
assert.Contains(t, output, "extra recipients on foo: [0xFEEDBEEF]")
buf.Reset()
}
func TestFsckGpg(t *testing.T) {
if testing.Short() {
t.Skip("skipping test in short mode.")
}
u := gptest.NewGUnitTester(t)
ctx := config.NewContextInMemory()
ctx = ctxutil.WithTerminal(ctx, false)
ctx = backend.WithCryptoBackend(ctx, backend.GPGCLI)
act, err := newMock(ctx, u.StoreDir(""))
require.NoError(t, err)
require.NotNil(t, act)
ctx = act.cfg.WithConfig(ctx)
buf := &bytes.Buffer{}
out.Stdout = buf
out.Stderr = buf
stdout = buf
defer func() {
stdout = os.Stdout
out.Stdout = os.Stdout
out.Stderr = os.Stderr
}()
color.NoColor = true
sub, err := act.Store.GetSubStore("")
require.NoError(t, err)
require.NoError(t, sub.ImportMissingPublicKeys(ctx, can.KeyID()))
// generate foo/bar
c := gptest.CliCtx(ctx, t, "foo/bar", "24")
require.NoError(t, act.Generate(c), "gopass generate foo/bar 24")
buf.Reset()
// fsck
require.NoError(t, act.Fsck(gptest.CliCtx(ctx, t)))
output := strings.TrimSpace(buf.String())
assert.Contains(t, output, "Checking password store integrity ...")
buf.Reset()
// fsck (hidden)
require.NoError(t, act.Fsck(gptest.CliCtx(ctxutil.WithHidden(ctx, true), t)))
output = strings.TrimSpace(buf.String())
assert.NotContains(t, output, "Checking password store integrity ...")
assert.NotContains(t, output, "Extra recipients on foo: [0xFEEDBEEF]")
buf.Reset()
// fsck --decrypt
require.NoError(t, act.Fsck(gptest.CliCtxWithFlags(ctx, t, map[string]string{"decrypt": "true"})))
output = strings.TrimSpace(buf.String())
assert.Contains(t, output, "Checking password store integrity ...")
buf.Reset()
// fsck foo
require.NoError(t, act.Fsck(gptest.CliCtx(ctx, t, "foo")))
output = strings.TrimSpace(buf.String())
assert.Contains(t, output, "Checking password store integrity ...")
buf.Reset()
}