Skip to content

Commit

Permalink
Improve test coverage (gopasspw#732)
Browse files Browse the repository at this point in the history
  • Loading branch information
dominikschulz authored Mar 28, 2018
1 parent 09299f8 commit 9c690c0
Show file tree
Hide file tree
Showing 23 changed files with 341 additions and 19 deletions.
8 changes: 5 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,15 @@ func main() {
out: colorable.NewColorableStderr(),
}
sv := getVersion()
cli.VersionPrinter = makeVersionPrinter(sv)
cli.VersionPrinter = makeVersionPrinter(os.Stdout, sv)

app := setupApp(ctx, sv)
if err := app.Run(os.Args); err != nil {
log.Fatal(err)
}
}

func makeVersionPrinter(sv semver.Version) func(c *cli.Context) {
func makeVersionPrinter(out io.Writer, sv semver.Version) func(c *cli.Context) {
return func(c *cli.Context) {
buildtime := ""
if bt, err := time.Parse("2006-01-02T15:04:05-0700", date); err == nil {
Expand All @@ -84,7 +84,9 @@ func makeVersionPrinter(sv semver.Version) func(c *cli.Context) {
if buildInfo != "" {
buildInfo = "(" + buildInfo + ") "
}
fmt.Printf("%s %s %s%s %s %s\n",
fmt.Fprintf(
out,
"%s %s %s%s %s %s\n",
name,
sv.String(),
buildInfo,
Expand Down
11 changes: 11 additions & 0 deletions main_test.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package main

import (
"bytes"
"context"
"flag"
"fmt"
"runtime"
"testing"

"github.com/blang/semver"
"github.com/justwatchcom/gopass/pkg/ctxutil"
"github.com/stretchr/testify/assert"
"github.com/urfave/cli"
Expand All @@ -25,3 +29,10 @@ func TestGlobalFlags(t *testing.T) {

assert.Equal(t, true, ctxutil.IsAlwaysYes(withGlobalFlags(ctx, c)))
}

func TestVersionPrinter(t *testing.T) {
buf := &bytes.Buffer{}
vp := makeVersionPrinter(buf, semver.Version{Major: 1})
vp(nil)
assert.Equal(t, fmt.Sprintf("gopass 1.0.0 %s %s %s\n", runtime.Version(), runtime.GOOS, runtime.GOARCH), buf.String())
}
7 changes: 7 additions & 0 deletions pkg/action/audit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,11 @@ func TestAudit(t *testing.T) {

assert.Error(t, act.Audit(ctx, c))
buf.Reset()

// test with filter
fs = flag.NewFlagSet("default", flag.ContinueOnError)
assert.NoError(t, fs.Parse([]string{"foo"}))
c = cli.NewContext(app, fs, nil)
assert.Error(t, act.Audit(ctx, c))
buf.Reset()
}
9 changes: 9 additions & 0 deletions pkg/action/copy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ func TestCopy(t *testing.T) {
}()

app := cli.NewApp()

// copy foo bar
fs := flag.NewFlagSet("default", flag.ContinueOnError)
assert.NoError(t, fs.Parse([]string{"foo", "bar"}))
Expand All @@ -40,6 +41,14 @@ func TestCopy(t *testing.T) {
assert.NoError(t, act.Copy(ctx, c))
buf.Reset()

// copy foo bar (again, should fail)
{
ctx := ctxutil.WithAlwaysYes(ctx, false)
ctx = ctxutil.WithInteractive(ctx, false)
assert.Error(t, act.Copy(ctx, c))
buf.Reset()
}

// copy not-found still-not-there
fs = flag.NewFlagSet("default", flag.ContinueOnError)
assert.NoError(t, fs.Parse([]string{"not-found", "still-not-there"}))
Expand Down
4 changes: 2 additions & 2 deletions pkg/action/create/create_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func TestCreateWebsite(t *testing.T) {
s := creator{mockstore.New("")}

ctx := context.Background()
ctx = ctxutil.WithInteractive(ctx, false)
ctx = ctxutil.WithInteractive(ctx, true)

buf := &bytes.Buffer{}
out.Stdout = buf
Expand Down Expand Up @@ -107,7 +107,7 @@ func TestCreatePIN(t *testing.T) {
s := creator{mockstore.New("")}

ctx := context.Background()
ctx = ctxutil.WithInteractive(ctx, false)
ctx = ctxutil.WithInteractive(ctx, true)

buf := &bytes.Buffer{}
out.Stdout = buf
Expand Down
47 changes: 47 additions & 0 deletions pkg/action/edit_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package action

import (
"bytes"
"context"
"flag"
"os"
"testing"

"github.com/justwatchcom/gopass/pkg/ctxutil"
"github.com/justwatchcom/gopass/pkg/out"
"github.com/justwatchcom/gopass/tests/gptest"
"github.com/stretchr/testify/assert"
"github.com/urfave/cli"
)

func TestEdit(t *testing.T) {
u := gptest.NewUnitTester(t)
defer u.Remove()

ctx := context.Background()
ctx = ctxutil.WithAlwaysYes(ctx, true)
ctx = ctxutil.WithTerminal(ctx, false)
act, err := newMock(ctx, u)
assert.NoError(t, err)

buf := &bytes.Buffer{}
out.Stdout = buf
defer func() {
out.Stdout = os.Stdout
}()

app := cli.NewApp()

// edit
c := cli.NewContext(app, flag.NewFlagSet("default", flag.ContinueOnError), nil)
assert.Error(t, act.Edit(ctx, c))
buf.Reset()

// edit foo
fs := flag.NewFlagSet("default", flag.ContinueOnError)
assert.NoError(t, fs.Parse([]string{"foo"}))
c = cli.NewContext(app, fs, nil)

assert.Error(t, act.Edit(ctx, c))
buf.Reset()
}
51 changes: 51 additions & 0 deletions pkg/action/fsck_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package action

import (
"bytes"
"context"
"flag"
"os"
"strings"
"testing"

"github.com/fatih/color"
"github.com/justwatchcom/gopass/pkg/ctxutil"
"github.com/justwatchcom/gopass/pkg/out"
"github.com/justwatchcom/gopass/tests/gptest"
"github.com/stretchr/testify/assert"
"github.com/urfave/cli"
)

func TestFsck(t *testing.T) {
u := gptest.NewUnitTester(t)
defer u.Remove()

ctx := context.Background()
ctx = ctxutil.WithTerminal(ctx, false)
act, err := newMock(ctx, u)
assert.NoError(t, err)

buf := &bytes.Buffer{}
out.Stdout = buf
stdout = buf
defer func() {
stdout = os.Stdout
out.Stdout = os.Stdout
}()
color.NoColor = true

app := cli.NewApp()

// fsck
c := cli.NewContext(app, flag.NewFlagSet("default", flag.ContinueOnError), nil)
assert.NoError(t, act.Fsck(ctx, c))

// fsck fo
fs := flag.NewFlagSet("default", flag.ContinueOnError)
assert.NoError(t, fs.Parse([]string{"fo"}))
c = cli.NewContext(app, fs, nil)

assert.NoError(t, act.Fsck(ctx, c))
assert.Equal(t, "Extra recipients on foo: [0xFEEDBEEF]\nPushed changes to git remote\nExtra recipients on foo: [0xFEEDBEEF]\nPushed changes to git remote", strings.TrimSpace(buf.String()))
buf.Reset()
}
11 changes: 9 additions & 2 deletions pkg/action/generate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,18 @@ func TestGenerate(t *testing.T) {

app := cli.NewApp()

// generate foobar
// generate
fs := flag.NewFlagSet("default", flag.ContinueOnError)
assert.NoError(t, fs.Parse([]string{"foobar"}))
c := cli.NewContext(app, fs, nil)

assert.Error(t, act.Generate(ctx, c))
buf.Reset()

// generate foobar
fs = flag.NewFlagSet("default", flag.ContinueOnError)
assert.NoError(t, fs.Parse([]string{"foobar"}))
c = cli.NewContext(app, fs, nil)

assert.NoError(t, act.Generate(ctx, c))
buf.Reset()

Expand Down
14 changes: 13 additions & 1 deletion pkg/action/history_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ func TestHistory(t *testing.T) {
defer u.Remove()

ctx := context.Background()
ctx = ctxutil.WithDebug(ctx, true)
ctx = ctxutil.WithAlwaysYes(ctx, true)
ctx = backend.WithRCSBackend(ctx, backend.GitCLI)
ctx = backend.WithCryptoBackend(ctx, backend.Plain)
Expand Down Expand Up @@ -60,4 +59,17 @@ func TestHistory(t *testing.T) {

assert.NoError(t, act.History(ctx, c))
buf.Reset()

// history --password bar
fs = flag.NewFlagSet("default", flag.ContinueOnError)
sf := cli.StringFlag{
Name: "password",
Usage: "password",
}
assert.NoError(t, sf.ApplyWithError(fs))
assert.NoError(t, fs.Parse([]string{"--password=true", "bar"}))
c = cli.NewContext(app, fs, nil)

assert.NoError(t, act.History(ctx, c))
buf.Reset()
}
14 changes: 13 additions & 1 deletion pkg/action/insert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ func TestInsert(t *testing.T) {

ctx := context.Background()
ctx = ctxutil.WithAlwaysYes(ctx, true)
ctx = ctxutil.WithTerminal(ctx, false)
act, err := newMock(ctx, u)
assert.NoError(t, err)

Expand Down Expand Up @@ -52,10 +53,21 @@ func TestInsert(t *testing.T) {
buf.Reset()

assert.NoError(t, act.show(ctx, c, "baz", "", false))
assert.Equal(t, "foobar\n", buf.String())
assert.Equal(t, "foobar", buf.String())
buf.Reset()

// insert zab#key
assert.NoError(t, act.insertYAML(ctx, "zab", "key", []byte("foobar")))

// insert --multiline foo
fs = flag.NewFlagSet("default", flag.ContinueOnError)
bf := cli.BoolFlag{
Name: "multiline",
Usage: "multiline",
}
assert.NoError(t, bf.ApplyWithError(fs))
assert.NoError(t, fs.Parse([]string{"--multiline=true", "bar", "baz"}))
c = cli.NewContext(app, fs, nil)

assert.NoError(t, act.Insert(ctx, c))
}
15 changes: 15 additions & 0 deletions pkg/action/mount_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@ func TestMounts(t *testing.T) {

buf := &bytes.Buffer{}
out.Stdout = buf
stdout = buf
defer func() {
out.Stdout = os.Stdout
stdout = os.Stdout
}()

app := cli.NewApp()
Expand Down Expand Up @@ -68,4 +70,17 @@ func TestMounts(t *testing.T) {

assert.Error(t, act.MountAdd(ctx, c))
buf.Reset()

// add some mounts
assert.NoError(t, u.InitStore("mount1"))
assert.NoError(t, u.InitStore("mount2"))
assert.NoError(t, act.Store.AddMount(ctx, "mount1", u.StoreDir("mount1")))
assert.NoError(t, act.Store.AddMount(ctx, "mount2", u.StoreDir("mount2")))

// print mounts
fs = flag.NewFlagSet("default", flag.ContinueOnError)
c = cli.NewContext(app, fs, nil)

assert.NoError(t, act.MountsPrint(ctx, c))
buf.Reset()
}
4 changes: 4 additions & 0 deletions pkg/action/otp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ func TestOTP(t *testing.T) {
assert.NoError(t, act.OTP(ctx, c))
buf.Reset()

// copy to clipboard
assert.NoError(t, act.otp(ctx, "bar", "", true))
buf.Reset()

// write QR file
fs = flag.NewFlagSet("default", flag.ContinueOnError)
sf := cli.StringFlag{
Expand Down
6 changes: 6 additions & 0 deletions pkg/action/templates_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ func TestTemplates(t *testing.T) {

ctx := context.Background()
ctx = ctxutil.WithAlwaysYes(ctx, true)
ctx = ctxutil.WithTerminal(ctx, false)
act, err := newMock(ctx, u)
assert.NoError(t, err)

Expand Down Expand Up @@ -63,6 +64,11 @@ gopass
// print template
assert.NoError(t, act.TemplatePrint(ctx, c))
assert.Equal(t, "foobar\n", buf.String())
buf.Reset()

// edit template
assert.Error(t, act.TemplateEdit(ctx, c))
buf.Reset()

// remove template
assert.NoError(t, act.TemplateRemove(ctx, c))
Expand Down
1 change: 1 addition & 0 deletions pkg/backend/context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ func TestRCSBackend(t *testing.T) {
assert.Equal(t, Noop, GetRCSBackend(ctx))
assert.Equal(t, GitCLI, GetRCSBackend(WithRCSBackendString(ctx, "gitcli")))
assert.Equal(t, GitCLI, GetRCSBackend(WithRCSBackend(ctx, GitCLI)))
assert.Equal(t, Noop, GetRCSBackend(WithRCSBackendString(ctx, "foobar")))
assert.Equal(t, true, HasRCSBackend(WithRCSBackend(ctx, GitCLI)))
}

Expand Down
29 changes: 29 additions & 0 deletions pkg/config/secrets/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,32 @@ func TestSaveLoad(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, d, data)
}

func TestNew(t *testing.T) {
tempdir, err := ioutil.TempDir("", "gopass-")
assert.NoError(t, err)
defer func() {
_ = os.RemoveAll(tempdir)
}()
pass := "foobar"

cfg, err := New(tempdir, pass)
assert.NoError(t, err)

v, err := cfg.Get("foo")
assert.NoError(t, err)
assert.Equal(t, "", v)

assert.NoError(t, cfg.Set("foo", "bar"))

v, err = cfg.Get("foo")
assert.NoError(t, err)
assert.Equal(t, "bar", v)

cfg, err = New(tempdir, pass)
assert.NoError(t, err)

v, err = cfg.Get("foo")
assert.NoError(t, err)
assert.Equal(t, "bar", v)
}
Loading

0 comments on commit 9c690c0

Please sign in to comment.