github.com/dgsb/consul@v1.4.5/command/services/register/register_test.go (about)

     1  package register
     2  
     3  import (
     4  	"os"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/hashicorp/consul/agent"
     9  	"github.com/hashicorp/consul/testutil"
    10  	"github.com/mitchellh/cli"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestCommand_noTabs(t *testing.T) {
    15  	t.Parallel()
    16  	if strings.ContainsRune(New(nil).Help(), '\t') {
    17  		t.Fatal("help has tabs")
    18  	}
    19  }
    20  
    21  func TestCommand_Validation(t *testing.T) {
    22  	t.Parallel()
    23  
    24  	ui := cli.NewMockUi()
    25  	c := New(ui)
    26  
    27  	cases := map[string]struct {
    28  		args   []string
    29  		output string
    30  	}{
    31  		"no args or id": {
    32  			[]string{},
    33  			"at least one",
    34  		},
    35  		"args and -name": {
    36  			[]string{"-name", "web", "foo.json"},
    37  			"not both",
    38  		},
    39  	}
    40  
    41  	for name, tc := range cases {
    42  		t.Run(name, func(t *testing.T) {
    43  			require := require.New(t)
    44  
    45  			c.init()
    46  
    47  			// Ensure our buffer is always clear
    48  			if ui.ErrorWriter != nil {
    49  				ui.ErrorWriter.Reset()
    50  			}
    51  			if ui.OutputWriter != nil {
    52  				ui.OutputWriter.Reset()
    53  			}
    54  
    55  			require.Equal(1, c.Run(tc.args))
    56  			output := ui.ErrorWriter.String()
    57  			require.Contains(output, tc.output)
    58  		})
    59  	}
    60  }
    61  
    62  func TestCommand_File(t *testing.T) {
    63  	t.Parallel()
    64  
    65  	require := require.New(t)
    66  	a := agent.NewTestAgent(t, t.Name(), ``)
    67  	defer a.Shutdown()
    68  	client := a.Client()
    69  
    70  	ui := cli.NewMockUi()
    71  	c := New(ui)
    72  
    73  	contents := `{ "Service": { "Name": "web" } }`
    74  	f := testFile(t, "json")
    75  	defer os.Remove(f.Name())
    76  	if _, err := f.WriteString(contents); err != nil {
    77  		t.Fatalf("err: %#v", err)
    78  	}
    79  
    80  	args := []string{
    81  		"-http-addr=" + a.HTTPAddr(),
    82  		f.Name(),
    83  	}
    84  
    85  	require.Equal(0, c.Run(args), ui.ErrorWriter.String())
    86  
    87  	svcs, err := client.Agent().Services()
    88  	require.NoError(err)
    89  	require.Len(svcs, 1)
    90  
    91  	svc := svcs["web"]
    92  	require.NotNil(svc)
    93  }
    94  
    95  func TestCommand_Flags(t *testing.T) {
    96  	t.Parallel()
    97  
    98  	require := require.New(t)
    99  	a := agent.NewTestAgent(t, t.Name(), ``)
   100  	defer a.Shutdown()
   101  	client := a.Client()
   102  
   103  	ui := cli.NewMockUi()
   104  	c := New(ui)
   105  
   106  	args := []string{
   107  		"-http-addr=" + a.HTTPAddr(),
   108  		"-name", "web",
   109  	}
   110  
   111  	require.Equal(0, c.Run(args), ui.ErrorWriter.String())
   112  
   113  	svcs, err := client.Agent().Services()
   114  	require.NoError(err)
   115  	require.Len(svcs, 1)
   116  
   117  	svc := svcs["web"]
   118  	require.NotNil(svc)
   119  }
   120  
   121  func testFile(t *testing.T, suffix string) *os.File {
   122  	f := testutil.TempFile(t, "register-test-file")
   123  	if err := f.Close(); err != nil {
   124  		t.Fatalf("err: %s", err)
   125  	}
   126  
   127  	newName := f.Name() + "." + suffix
   128  	if err := os.Rename(f.Name(), newName); err != nil {
   129  		os.Remove(f.Name())
   130  		t.Fatalf("err: %s", err)
   131  	}
   132  
   133  	f, err := os.Create(newName)
   134  	if err != nil {
   135  		os.Remove(newName)
   136  		t.Fatalf("err: %s", err)
   137  	}
   138  
   139  	return f
   140  }