1package leaf 2 3import ( 4 "bytes" 5 "context" 6 "os" 7 "testing" 8 9 plain "github.com/gopasspw/gopass/internal/backend/crypto/plain" 10 "github.com/gopasspw/gopass/internal/backend/storage/fs" 11 "github.com/gopasspw/gopass/internal/out" 12 "github.com/gopasspw/gopass/pkg/ctxutil" 13 "github.com/gopasspw/gopass/pkg/gopass/secrets" 14 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/require" 17) 18 19func TestList(t *testing.T) { 20 ctx := context.Background() 21 ctx = ctxutil.WithExportKeys(ctx, false) 22 23 obuf := &bytes.Buffer{} 24 out.Stdout = obuf 25 defer func() { 26 out.Stdout = os.Stdout 27 }() 28 29 for _, tc := range []struct { 30 name string 31 prep func(s *Store) error 32 out []string 33 }{ 34 { 35 name: "Empty store", 36 prep: func(s *Store) error { return nil }, 37 out: []string{}, 38 }, 39 { 40 name: "Single entry", 41 prep: func(s *Store) error { 42 sec := secrets.New() 43 sec.SetPassword("bar") 44 return s.Set(ctx, "foo", sec) 45 }, 46 out: []string{"foo"}, 47 }, 48 { 49 name: "Multi-entry-single-level", 50 prep: func(s *Store) error { 51 for _, e := range []string{"foo", "bar", "baz"} { 52 sec := secrets.New() 53 sec.SetPassword("bar") 54 if err := s.Set(ctx, e, sec); err != nil { 55 return err 56 } 57 } 58 return nil 59 }, 60 out: []string{"bar", "baz", "foo"}, 61 }, 62 { 63 name: "Multi-entry-multi-level", 64 prep: func(s *Store) error { 65 for _, e := range []string{"foo/bar", "foo/baz", "foo/zab"} { 66 sec := secrets.New() 67 sec.SetPassword("bar") 68 if err := s.Set(ctx, e, sec); err != nil { 69 return err 70 } 71 } 72 return nil 73 }, 74 out: []string{"foo/bar", "foo/baz", "foo/zab"}, 75 }, 76 } { 77 // common setup 78 tempdir, err := os.MkdirTemp("", "gopass-") 79 require.NoError(t, err) 80 81 s := &Store{ 82 alias: "", 83 path: tempdir, 84 crypto: plain.New(), 85 storage: fs.New(tempdir), 86 } 87 88 assert.NoError(t, s.saveRecipients(ctx, []string{"john.doe"}, "test")) 89 90 // prepare store 91 assert.NoError(t, tc.prep(s)) 92 obuf.Reset() 93 94 // run test case 95 out, err := s.List(ctx, "") 96 require.NoError(t, err) 97 assert.Equal(t, tc.out, out) 98 obuf.Reset() 99 100 // common tear down 101 _ = os.RemoveAll(tempdir) 102 } 103} 104