项目文件夹

文件
2026-07-13 12:27:58 +08:00

76 行
2.3 KiB
Go

package leaf
import (
"bytes"
"os"
"path/filepath"
"testing"
"github.com/gopasspw/gopass/internal/backend"
_ "github.com/gopasspw/gopass/internal/backend/crypto"
"github.com/gopasspw/gopass/internal/backend/crypto/gpg"
_ "github.com/gopasspw/gopass/internal/backend/storage"
"github.com/gopasspw/gopass/internal/config"
"github.com/gopasspw/gopass/internal/out"
"github.com/gopasspw/gopass/pkg/gopass/secrets"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestSet(t *testing.T) {
ctx := gpg.WithAlwaysTrust(config.NewContextInMemory(), true)
s, err := createSubStore(t)
require.NoError(t, err)
sec := secrets.NewAKV()
sec.SetPassword("foo")
_, err = sec.Write([]byte("bar"))
require.NoError(t, err)
require.NoError(t, s.Set(ctx, "zab/zab", sec))
require.Error(t, s.Set(ctx, "../../../../../etc/passwd", sec))
require.NoError(t, s.Set(ctx, "zab", sec))
}
// TestSetWarnsAboutInvalidRecipient verifies that when a recipient has no
// useable key (e.g. because it is expired or not present in the keyring),
// gopass emits a visible warning instead of silently omitting that recipient.
func TestSetWarnsAboutInvalidRecipient(t *testing.T) {
buf := &bytes.Buffer{}
oldStderr := out.Stderr
out.Stderr = buf
t.Cleanup(func() { out.Stderr = oldStderr })
dir := t.TempDir()
sd := filepath.Join(dir, "sub")
// 0xDEADBEEF is in the plain backend's static key list; 0xBADKEY is not.
_, _, err := createStore(sd, []string{"0xDEADBEEF", "0xBADKEY"}, nil)
require.NoError(t, err)
t.Setenv("GOPASS_HOMEDIR", dir)
t.Setenv("CHECKPOINT_DISABLE", "true")
t.Setenv("GOPASS_NO_NOTIFY", "true")
t.Setenv("GOPASS_DISABLE_ENCRYPTION", "true")
t.Setenv("GNUPGHOME", filepath.Join(dir, ".gnupg"))
require.NoError(t, os.Unsetenv("PAGER"))
ctx := gpg.WithAlwaysTrust(config.NewContextInMemory(), true)
ctx, err = backend.WithCryptoBackendString(ctx, "plain")
require.NoError(t, err)
ctx, err = backend.WithStorageBackendString(ctx, "fs")
require.NoError(t, err)
s, err := New(ctx, "", sd)
require.NoError(t, err)
sec := secrets.NewAKV()
sec.SetPassword("hunter2")
require.NoError(t, s.Set(ctx, "test/entry", sec))
// A warning about the recipient with no useable key must have been printed.
assert.Contains(t, buf.String(), "0xBADKEY")
}