From 47c4ab686327e80a517b8882d6c76c0664dcbe01 Mon Sep 17 00:00:00 2001 From: Ryan Uber Date: Wed, 21 Jan 2015 13:37:32 -0800 Subject: [PATCH] command: test maint command --- command/maint.go | 6 +++ command/maint_test.go | 103 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 command/maint_test.go diff --git a/command/maint.go b/command/maint.go index e689541c9a..b0ee4d3112 100644 --- a/command/maint.go +++ b/command/maint.go @@ -70,6 +70,12 @@ func (c *MaintCommand) Run(args []string) int { return 1 } + // Print help if no args given + if len(args) == 0 { + c.Ui.Error(c.Help()) + return 1 + } + // Ensure we don't have conflicting args if !enable && !disable { c.Ui.Error("One of -enable or -disable must be specified") diff --git a/command/maint_test.go b/command/maint_test.go new file mode 100644 index 0000000000..c8c1a263a9 --- /dev/null +++ b/command/maint_test.go @@ -0,0 +1,103 @@ +package command + +import ( + "strings" + "testing" + + "github.com/hashicorp/consul/consul/structs" + "github.com/mitchellh/cli" +) + +func TestMaintCommand_implements(t *testing.T) { + var _ cli.Command = &MaintCommand{} +} + +func TestMaintCommandRun_NoArgs(t *testing.T) { + ui := new(cli.MockUi) + c := &MaintCommand{Ui: ui} + + if code := c.Run([]string{}); code != 1 { + t.Fatalf("expected return code 1, got %d", code) + } + + if strings.TrimSpace(ui.ErrorWriter.String()) != c.Help() { + t.Fatalf("bad:\n%s", ui.ErrorWriter.String()) + } +} + +func TestMaintCommandRun_EnableNodeMaintenance(t *testing.T) { + a1 := testAgent(t) + defer a1.Shutdown() + + ui := new(cli.MockUi) + c := &MaintCommand{Ui: ui} + + args := []string{ + "-http-addr=" + a1.httpAddr, + "-enable", + "-reason=broken", + } + code := c.Run(args) + if code != 0 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + + if !strings.Contains(ui.OutputWriter.String(), "now enabled") { + t.Fatalf("bad: %#v", ui.OutputWriter.String()) + } +} + +func TestMaintCommandRun_EnableServiceMaintenance(t *testing.T) { + a1 := testAgent(t) + defer a1.Shutdown() + + // Register the service + service := &structs.NodeService{ + ID: "test", + Service: "test", + } + if err := a1.agent.AddService(service, nil, false); err != nil { + t.Fatalf("err: %v", err) + } + + ui := new(cli.MockUi) + c := &MaintCommand{Ui: ui} + + args := []string{ + "-http-addr=" + a1.httpAddr, + "-enable", + "-service=test", + "-reason=broken", + } + code := c.Run(args) + if code != 0 { + t.Fatalf("bad: %d. %#v", code, ui.ErrorWriter.String()) + } + + if !strings.Contains(ui.OutputWriter.String(), "now enabled") { + t.Fatalf("bad: %#v", ui.OutputWriter.String()) + } +} + +func TestMaintCommandRun_EnableServiceMaintenance_Fails(t *testing.T) { + a1 := testAgent(t) + defer a1.Shutdown() + + ui := new(cli.MockUi) + c := &MaintCommand{Ui: ui} + + args := []string{ + "-http-addr=" + a1.httpAddr, + "-enable", + "-service=redis", + "-reason=broken", + } + code := c.Run(args) + if code != 1 { + t.Fatalf("expected response code 1, got %d", code) + } + + if !strings.Contains(ui.ErrorWriter.String(), "No service registered") { + t.Fatalf("bad: %#v", ui.ErrorWriter.String()) + } +}