1package restore 2 3import ( 4 "io" 5 "os" 6 "path" 7 "strings" 8 "testing" 9 10 "github.com/hashicorp/consul/agent" 11 "github.com/hashicorp/consul/testutil" 12 "github.com/mitchellh/cli" 13) 14 15func TestSnapshotRestoreCommand_noTabs(t *testing.T) { 16 t.Parallel() 17 if strings.ContainsRune(New(cli.NewMockUi()).Help(), '\t') { 18 t.Fatal("help has tabs") 19 } 20} 21 22func TestSnapshotRestoreCommand_Validation(t *testing.T) { 23 t.Parallel() 24 ui := cli.NewMockUi() 25 c := New(ui) 26 27 cases := map[string]struct { 28 args []string 29 output string 30 }{ 31 "no file": { 32 []string{}, 33 "Missing FILE argument", 34 }, 35 "extra args": { 36 []string{"foo", "bar", "baz"}, 37 "Too many arguments", 38 }, 39 } 40 41 for name, tc := range cases { 42 // Ensure our buffer is always clear 43 if ui.ErrorWriter != nil { 44 ui.ErrorWriter.Reset() 45 } 46 if ui.OutputWriter != nil { 47 ui.OutputWriter.Reset() 48 } 49 50 code := c.Run(tc.args) 51 if code == 0 { 52 t.Errorf("%s: expected non-zero exit", name) 53 } 54 55 output := ui.ErrorWriter.String() 56 if !strings.Contains(output, tc.output) { 57 t.Errorf("%s: expected %q to contain %q", name, output, tc.output) 58 } 59 } 60} 61 62func TestSnapshotRestoreCommand(t *testing.T) { 63 t.Parallel() 64 a := agent.NewTestAgent(t.Name(), ``) 65 defer a.Shutdown() 66 client := a.Client() 67 68 ui := cli.NewMockUi() 69 c := New(ui) 70 71 dir := testutil.TempDir(t, "snapshot") 72 defer os.RemoveAll(dir) 73 74 file := path.Join(dir, "backup.tgz") 75 args := []string{ 76 "-http-addr=" + a.HTTPAddr(), 77 file, 78 } 79 80 f, err := os.Create(file) 81 if err != nil { 82 t.Fatalf("err: %v", err) 83 } 84 85 snap, _, err := client.Snapshot().Save(nil) 86 if err != nil { 87 f.Close() 88 t.Fatalf("err: %v", err) 89 } 90 if _, err := io.Copy(f, snap); err != nil { 91 f.Close() 92 t.Fatalf("err: %v", err) 93 } 94 if err := f.Close(); err != nil { 95 t.Fatalf("err: %v", err) 96 } 97 98 code := c.Run(args) 99 if code != 0 { 100 t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) 101 } 102} 103