github.com/Aestek/consul@v1.2.4-0.20190309222502-b2c31e33971a/command/snapshot/inspect/snapshot_inspect_test.go (about)

     1  package inspect
     2  
     3  import (
     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  
    15  func TestSnapshotInspectCommand_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  
    22  func TestSnapshotInspectCommand_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  
    62  func TestSnapshotInspectCommand(t *testing.T) {
    63  	t.Parallel()
    64  	a := agent.NewTestAgent(t, t.Name(), ``)
    65  	defer a.Shutdown()
    66  	client := a.Client()
    67  
    68  	dir := testutil.TempDir(t, "snapshot")
    69  	defer os.RemoveAll(dir)
    70  
    71  	file := path.Join(dir, "backup.tgz")
    72  
    73  	// Save a snapshot of the current Consul state
    74  	f, err := os.Create(file)
    75  	if err != nil {
    76  		t.Fatalf("err: %v", err)
    77  	}
    78  
    79  	snap, _, err := client.Snapshot().Save(nil)
    80  	if err != nil {
    81  		f.Close()
    82  		t.Fatalf("err: %v", err)
    83  	}
    84  	if _, err := io.Copy(f, snap); err != nil {
    85  		f.Close()
    86  		t.Fatalf("err: %v", err)
    87  	}
    88  	if err := f.Close(); err != nil {
    89  		t.Fatalf("err: %v", err)
    90  	}
    91  
    92  	// Inspect the snapshot
    93  	ui := cli.NewMockUi()
    94  	c := New(ui)
    95  	args := []string{file}
    96  
    97  	code := c.Run(args)
    98  	if code != 0 {
    99  		t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String())
   100  	}
   101  
   102  	output := ui.OutputWriter.String()
   103  	for _, key := range []string{
   104  		"ID",
   105  		"Size",
   106  		"Index",
   107  		"Term",
   108  		"Version",
   109  	} {
   110  		if !strings.Contains(output, key) {
   111  			t.Fatalf("bad %#v, missing %q", output, key)
   112  		}
   113  	}
   114  }