mirror of
https://github.com/gopasspw/gopass.git
synced 2025-12-08 19:24:54 +00:00
* [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>
232 lines
6.2 KiB
Go
232 lines
6.2 KiB
Go
package tests
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestInsert(t *testing.T) {
|
|
ts := newTester(t)
|
|
defer ts.teardown()
|
|
|
|
ts.initStore()
|
|
|
|
out, err := ts.run("insert")
|
|
require.Error(t, err)
|
|
assert.Equal(t, "\nError: Usage: "+filepath.Base(ts.Binary)+" insert name\n", out)
|
|
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "some/secret"}, []byte("moar"))
|
|
require.NoError(t, err)
|
|
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "some/newsecret"}, []byte("and\nmoar"))
|
|
require.NoError(t, err)
|
|
|
|
t.Run("Regression test for #1573 without actual pipes", func(t *testing.T) {
|
|
out, err = ts.run("show -f some/secret")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "moar", out)
|
|
|
|
out, err = ts.run("show -f some/newsecret")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "and\nmoar", out)
|
|
|
|
out, err = ts.run("show -f some/secret")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "moar", out)
|
|
|
|
out, err = ts.run("show -f some/newsecret")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "and\nmoar", out)
|
|
})
|
|
|
|
t.Run("Regression test for #1595", func(t *testing.T) {
|
|
t.Skip("TODO")
|
|
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "some/other"}, []byte("nope"))
|
|
require.NoError(t, err)
|
|
|
|
out, err = ts.run("insert some/other")
|
|
require.Error(t, err)
|
|
assert.Equal(t, "\nError: not overwriting your current secret\n", out)
|
|
|
|
out, err = ts.run("show -o some/other")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "nope", out)
|
|
|
|
out, err = ts.run("--yes insert some/other")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "Warning: Password is empty or all whitespace", out)
|
|
|
|
out, err = ts.run("insert -f some/other")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "Warning: Password is empty or all whitespace", out)
|
|
|
|
out, err = ts.run("show -o some/other")
|
|
require.Error(t, err)
|
|
assert.Equal(t, "\nError: empty secret\n", out)
|
|
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "-f", "some/other"}, []byte("final"))
|
|
require.NoError(t, err)
|
|
|
|
out, err = ts.run("show -o some/other")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "final", out)
|
|
|
|
// This is arguably not a good behaviour: it should not overwrite the password when we are only working on a key:value.
|
|
out, err = ts.run("insert -f some/other test:inline")
|
|
require.NoError(t, err)
|
|
assert.Empty(t, out)
|
|
|
|
out, err = ts.run("show some/other test")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "inline", out)
|
|
|
|
out, err = ts.run("insert some/other test:inline2")
|
|
require.Error(t, err)
|
|
assert.Equal(t, "\nError: not overwriting your current secret\n", out)
|
|
|
|
out, err = ts.run("show some/other Test")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "inline", out)
|
|
|
|
out, err = ts.run("--yes insert some/other test:inline2")
|
|
require.NoError(t, err)
|
|
assert.Empty(t, out)
|
|
|
|
out, err = ts.run("show some/other Test")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "inline2", out)
|
|
})
|
|
|
|
t.Run("Regression test for #1650 with JSON", func(t *testing.T) {
|
|
json := `Password: SECRET
|
|
--
|
|
glossary": {
|
|
"title": "example glossary",
|
|
"GlossDiv": {
|
|
"title": "S",
|
|
"GlossList": {
|
|
"GlossEntry": {
|
|
"ID": "SGML",
|
|
"SortAs": "SGML",
|
|
"GlossTerm": "Standard Generalized Markup Language",
|
|
"Acronym": "SGML",
|
|
"Abbrev": "ISO 8879:1986",
|
|
"GlossDef": {
|
|
"para": "A meta-markup language, used to create markup languages such as DocBook.",
|
|
"GlossSeeAlso": ["GML", "XML"]
|
|
},
|
|
"GlossSee": "markup"
|
|
}
|
|
}
|
|
}
|
|
}`
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "some/json"}, []byte(json))
|
|
require.NoError(t, err)
|
|
|
|
// using show -n to disable parsing
|
|
out, err = ts.run("show -f -n some/json")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, json, out) //nolint:testifylint
|
|
})
|
|
|
|
t.Run("Regression test for #1600", func(t *testing.T) {
|
|
input := `test1
|
|
test2
|
|
{
|
|
"Creator": "the creator"
|
|
}`
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "some/multilinewithbraces"}, []byte(input))
|
|
require.NoError(t, err)
|
|
|
|
// using show -n to disable parsing
|
|
out, err = ts.run("show -f -n some/multilinewithbraces")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, input, out)
|
|
})
|
|
|
|
t.Run("Regression test for #1601", func(t *testing.T) {
|
|
input := `thepassword
|
|
user: a user
|
|
web: test.com
|
|
user: second user`
|
|
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "some/multikey"}, []byte(input))
|
|
require.NoError(t, err)
|
|
|
|
// using show -n to disable parsing
|
|
out, err = ts.run("show -f -n some/multikey")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, input, out)
|
|
})
|
|
|
|
t.Run("Regression test full support for #1601", func(t *testing.T) {
|
|
t.Skip("Skipping until we support actual key-valueS for KV")
|
|
|
|
input := `thepassword
|
|
user: a user
|
|
web: test.com
|
|
user: second user`
|
|
|
|
output := `thepassword
|
|
web: test.com
|
|
user: a user
|
|
user: second user`
|
|
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "some/multikeyvalues"}, []byte(input))
|
|
require.NoError(t, err)
|
|
|
|
out, err = ts.run("show -f some/multikeyvalues")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, output, out)
|
|
})
|
|
|
|
t.Run("Regression test for #1614", func(t *testing.T) {
|
|
input := `yamltest
|
|
---
|
|
user: 0123`
|
|
|
|
output := `yamltest
|
|
---
|
|
user: 83`
|
|
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "some/yamloctal"}, []byte(input))
|
|
require.NoError(t, err)
|
|
|
|
// with parsing we have 0123 interpreted as octal for 83
|
|
out, err = ts.run("show -f some/yamloctal")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, output, out)
|
|
|
|
// using show -n to disable parsing
|
|
out, err = ts.run("show -f -n some/yamloctal")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, input, out)
|
|
})
|
|
|
|
t.Run("Regression test for #1594", func(t *testing.T) {
|
|
input := `somepasswd
|
|
---
|
|
Test / test.com
|
|
user:myuser
|
|
url: test.com/`
|
|
|
|
_, err = ts.runCmd([]string{ts.Binary, "insert", "some/kvwithspace"}, []byte(input))
|
|
require.NoError(t, err)
|
|
|
|
out, err = ts.run("show -f some/kvwithspace")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, input, out)
|
|
|
|
out, err = ts.run("show -f some/kvwithspace url")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "test.com/", out)
|
|
|
|
out, err = ts.run("show -f some/kvwithspace user")
|
|
require.Error(t, err)
|
|
})
|
|
}
|