check / check (push) Waiting to run
`secret add` drops one trailing newline from stdin, so `echo value | secret add name` stores `value`. `secret import` stores a file's bytes unchanged, and `secret get` writes the value with no newline added. The README said none of this, so a PEM key piped into `add` came back one byte short with no hint why. Its entries for `add`, `get` and `import` now state each rule. A new test stores `a\n\n` through `add` and through `import` and checks that `add` kept two bytes and `import` three. No program code changes. The new test passes on the code before this change; it fails when `add` keeps the newline. Model: opus-5-5
48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
//nolint:testpackage // white-box test of unexported internals
|
|
package cli
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/spf13/afero"
|
|
"github.com/spf13/cobra"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
// TestAddDropsOneTrailingNewlineImportKeepsIt pins the rule the README
|
|
// gives: `secret add` drops one trailing newline from stdin, and
|
|
// `secret import` stores the file's bytes unchanged.
|
|
func TestAddDropsOneTrailingNewlineImportKeepsIt(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
fs, vlt := newSizeTestVault(t)
|
|
value := []byte("a\n\n")
|
|
|
|
cmd := &cobra.Command{}
|
|
cmd.SetIn(bytes.NewReader(value))
|
|
|
|
cli := NewCLIInstanceWithStateDir(fs, testStateDir)
|
|
cli.cmd = cmd
|
|
|
|
require.NoError(t, cli.AddSecret("added", false))
|
|
|
|
sourceFile := "/test/value"
|
|
require.NoError(t, afero.WriteFile(fs, sourceFile, value, 0o600))
|
|
require.NoError(t, cli.ImportSecret(cmd, "imported", sourceFile, false))
|
|
|
|
added, err := vlt.GetSecret("added")
|
|
require.NoError(t, err)
|
|
|
|
defer added.Destroy()
|
|
|
|
imported, err := vlt.GetSecret("imported")
|
|
require.NoError(t, err)
|
|
|
|
defer imported.Destroy()
|
|
|
|
assert.Equal(t, []byte("a\n"), added.Bytes())
|
|
assert.Equal(t, []byte("a\n\n"), imported.Bytes())
|
|
}
|