b99693b807
Currently when data is imported via `consul kv import` it overwrites keys under the root key. Since `consul kv export` can retrieve data for the given prefix, i.e. part of the KV tree, importing it under root may be not what users want. To mirror prefix behavior from export this PR adds prefix feature to the import command that adds prefix to all keys that are imported.
125 lines
2.1 KiB
Go
125 lines
2.1 KiB
Go
package imp
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/consul/agent"
|
|
"github.com/mitchellh/cli"
|
|
)
|
|
|
|
func TestKVImportCommand_noTabs(t *testing.T) {
|
|
t.Parallel()
|
|
if strings.ContainsRune(New(nil).Help(), '\t') {
|
|
t.Fatal("help has tabs")
|
|
}
|
|
}
|
|
|
|
func TestKVImportCommand(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("too slow for testing.Short")
|
|
}
|
|
|
|
t.Parallel()
|
|
a := agent.NewTestAgent(t, ``)
|
|
defer a.Shutdown()
|
|
client := a.Client()
|
|
|
|
const json = `[
|
|
{
|
|
"key": "foo",
|
|
"flags": 0,
|
|
"value": "YmFyCg=="
|
|
},
|
|
{
|
|
"key": "foo/a",
|
|
"flags": 0,
|
|
"value": "YmF6Cg=="
|
|
}
|
|
]`
|
|
|
|
ui := cli.NewMockUi()
|
|
c := New(ui)
|
|
c.testStdin = strings.NewReader(json)
|
|
|
|
args := []string{
|
|
"-http-addr=" + a.HTTPAddr(),
|
|
"-",
|
|
}
|
|
|
|
code := c.Run(args)
|
|
if code != 0 {
|
|
t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
|
|
}
|
|
|
|
pair, _, err := client.KV().Get("foo", nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if strings.TrimSpace(string(pair.Value)) != "bar" {
|
|
t.Fatalf("bad: expected: bar, got %s", pair.Value)
|
|
}
|
|
|
|
pair, _, err = client.KV().Get("foo/a", nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if strings.TrimSpace(string(pair.Value)) != "baz" {
|
|
t.Fatalf("bad: expected: baz, got %s", pair.Value)
|
|
}
|
|
}
|
|
|
|
func TestKVImportPrefixCommand(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("too slow for testing.Short")
|
|
}
|
|
|
|
t.Parallel()
|
|
a := agent.NewTestAgent(t, ``)
|
|
defer a.Shutdown()
|
|
client := a.Client()
|
|
|
|
const json = `[
|
|
{
|
|
"key": "foo",
|
|
"flags": 0,
|
|
"value": "YmFyCg=="
|
|
}
|
|
]`
|
|
|
|
ui := cli.NewMockUi()
|
|
c := New(ui)
|
|
c.testStdin = strings.NewReader(json)
|
|
|
|
args := []string{
|
|
"-http-addr=" + a.HTTPAddr(),
|
|
"-prefix=" + "sub/",
|
|
"-",
|
|
}
|
|
|
|
code := c.Run(args)
|
|
if code != 0 {
|
|
t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
|
|
}
|
|
|
|
pair, _, err := client.KV().Get("foo", nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if pair != nil {
|
|
t.Fatalf("bad: expected: nil, got %+v", pair)
|
|
}
|
|
|
|
pair, _, err = client.KV().Get("sub/foo", nil)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if strings.TrimSpace(string(pair.Value)) != "bar" {
|
|
t.Fatalf("bad: expected: bar, got %s", pair.Value)
|
|
}
|
|
}
|