Skip to content

Commit

Permalink
command: test init
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanuber committed Sep 30, 2015
1 parent 2401816 commit 3a3aa18
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 7 deletions.
20 changes: 13 additions & 7 deletions command/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ Usage: nomad init
Creates an example job file that can be used as a starting
point to customize further.
`
return strings.TrimSpace(helpText)
}
Expand All @@ -35,15 +34,22 @@ func (c *InitCommand) Synopsis() string {
}

func (c *InitCommand) Run(args []string) int {
// Check for misuse
if len(args) != 0 {
c.Ui.Error(c.Help())
return 1
}

// Check if the file already exists
_, err := os.Stat(DefaultInitName)
if err == nil || !os.IsNotExist(err) {
c.Ui.Error(fmt.Sprintf("Job '%s' already exists", DefaultInitName))
return 1
} else if !os.IsNotExist(err) {
if err != nil && !os.IsNotExist(err) {
c.Ui.Error(fmt.Sprintf("Failed to stat '%s': %v", DefaultInitName, err))
return 1
}
if !os.IsNotExist(err) {
c.Ui.Error(fmt.Sprintf("Job '%s' already exists", DefaultInitName))
return 1
}

// Write out the example
err = ioutil.WriteFile(DefaultInitName, []byte(defaultJob), 0660)
Expand All @@ -57,7 +63,7 @@ func (c *InitCommand) Run(args []string) int {
return 0
}

const defaultJob = `
var defaultJob = strings.TrimSpace(`
# There can only be a single job definition per file.
# Create a job with ID and Name 'example'
job "example" {
Expand Down Expand Up @@ -122,4 +128,4 @@ job "example" {
}
}
}
`
`)
65 changes: 65 additions & 0 deletions command/init_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package command

import (
"io/ioutil"
"os"
"strings"
"testing"

"github.com/mitchellh/cli"
)

func TestInitCommand_Implements(t *testing.T) {
var _ cli.Command = &InitCommand{}
}

func TestInitCommand_Run(t *testing.T) {
ui := new(cli.MockUi)
cmd := &InitCommand{Meta: Meta{Ui: ui}}

// Fails on misuse
if code := cmd.Run([]string{"some", "bad", "args"}); code != 1 {
t.Fatalf("expect exit code 1, got: %d", code)
}
if out := ui.ErrorWriter.String(); !strings.Contains(out, cmd.Help()) {
t.Fatalf("expect help output, got: %s", out)
}
ui.ErrorWriter.Reset()

// Ensure we change the cwd back
origDir, err := os.Getwd()
if err != nil {
t.Fatalf("err: %s", err)
}
defer os.Chdir(origDir)

// Create a temp dir and change into it
dir, err := ioutil.TempDir("", "nomad")
if err != nil {
t.Fatalf("err: %s", err)
}
defer os.RemoveAll(dir)
if err := os.Chdir(dir); err != nil {
t.Fatalf("err: %s", err)
}

// Works if the file doesn't exist
if code := cmd.Run([]string{}); code != 0 {
t.Fatalf("expect exit code 0, got: %d", code)
}
content, err := ioutil.ReadFile(DefaultInitName)
if err != nil {
t.Fatalf("err: %s", err)
}
if string(content) != defaultJob {
t.Fatalf("unexpected file content\n\n%s", string(content))
}

// Fails if the file exists
if code := cmd.Run([]string{}); code != 1 {
t.Fatalf("expect exit code 1, got: %d", code)
}
if out := ui.ErrorWriter.String(); !strings.Contains(out, "exists") {
t.Fatalf("expect file exists error, got: %s", out)
}
}

0 comments on commit 3a3aa18

Please sign in to comment.