github.com/superfly/nomad@v0.10.5-fly/command/job_init_test.go (about)

     1  package command
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/mitchellh/cli"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestInitCommand_Implements(t *testing.T) {
    14  	t.Parallel()
    15  	var _ cli.Command = &JobInitCommand{}
    16  }
    17  
    18  func TestInitCommand_Run(t *testing.T) {
    19  	t.Parallel()
    20  	ui := new(cli.MockUi)
    21  	cmd := &JobInitCommand{Meta: Meta{Ui: ui}}
    22  
    23  	// Fails on misuse
    24  	if code := cmd.Run([]string{"some", "bad", "args"}); code != 1 {
    25  		t.Fatalf("expect exit code 1, got: %d", code)
    26  	}
    27  	if out := ui.ErrorWriter.String(); !strings.Contains(out, commandErrorText(cmd)) {
    28  		t.Fatalf("expect help output, got: %s", out)
    29  	}
    30  	ui.ErrorWriter.Reset()
    31  
    32  	// Ensure we change the cwd back
    33  	origDir, err := os.Getwd()
    34  	if err != nil {
    35  		t.Fatalf("err: %s", err)
    36  	}
    37  	defer os.Chdir(origDir)
    38  
    39  	// Create a temp dir and change into it
    40  	dir, err := ioutil.TempDir("", "nomad")
    41  	if err != nil {
    42  		t.Fatalf("err: %s", err)
    43  	}
    44  	defer os.RemoveAll(dir)
    45  	if err := os.Chdir(dir); err != nil {
    46  		t.Fatalf("err: %s", err)
    47  	}
    48  
    49  	// Works if the file doesn't exist
    50  	if code := cmd.Run([]string{}); code != 0 {
    51  		t.Fatalf("expect exit code 0, got: %d", code)
    52  	}
    53  	content, err := ioutil.ReadFile(DefaultInitName)
    54  	if err != nil {
    55  		t.Fatalf("err: %s", err)
    56  	}
    57  	defaultJob, _ := Asset("command/assets/example.nomad")
    58  	if string(content) != string(defaultJob) {
    59  		t.Fatalf("unexpected file content\n\n%s", string(content))
    60  	}
    61  
    62  	// Works with -short flag
    63  	os.Remove(DefaultInitName)
    64  	if code := cmd.Run([]string{"-short"}); code != 0 {
    65  		require.Zero(t, code, "unexpected exit code: %d", code)
    66  	}
    67  	content, err = ioutil.ReadFile(DefaultInitName)
    68  	require.NoError(t, err)
    69  	shortJob, _ := Asset("command/assets/example-short.nomad")
    70  	require.Equal(t, string(content), string(shortJob))
    71  
    72  	// Fails if the file exists
    73  	if code := cmd.Run([]string{}); code != 1 {
    74  		t.Fatalf("expect exit code 1, got: %d", code)
    75  	}
    76  	if out := ui.ErrorWriter.String(); !strings.Contains(out, "exists") {
    77  		t.Fatalf("expect file exists error, got: %s", out)
    78  	}
    79  }
    80  
    81  func TestInitCommand_defaultJob(t *testing.T) {
    82  	t.Parallel()
    83  	// Ensure the job file is always written with spaces instead of tabs. Since
    84  	// the default job file is embedded in the go file, it's easy for tabs to
    85  	// slip in.
    86  	defaultJob, _ := Asset("command/assets/example.nomad")
    87  	if strings.Contains(string(defaultJob), "\t") {
    88  		t.Error("default job contains tab character - please convert to spaces")
    89  	}
    90  }
    91  
    92  func TestInitCommand_customFilename(t *testing.T) {
    93  	t.Parallel()
    94  	ui := new(cli.MockUi)
    95  	cmd := &JobInitCommand{Meta: Meta{Ui: ui}}
    96  	filename := "custom.nomad"
    97  
    98  	// Ensure we change the cwd back
    99  	origDir, err := os.Getwd()
   100  	if err != nil {
   101  		t.Fatalf("err: %s", err)
   102  	}
   103  	defer os.Chdir(origDir)
   104  
   105  	// Create a temp dir and change into it
   106  	dir, err := ioutil.TempDir("", "nomad")
   107  	if err != nil {
   108  		t.Fatalf("err: %s", err)
   109  	}
   110  	defer os.RemoveAll(dir)
   111  	if err := os.Chdir(dir); err != nil {
   112  		t.Fatalf("err: %s", err)
   113  	}
   114  
   115  	// Works if the file doesn't exist
   116  	if code := cmd.Run([]string{filename}); code != 0 {
   117  		t.Fatalf("expect exit code 0, got: %d", code)
   118  	}
   119  	content, err := ioutil.ReadFile(filename)
   120  	if err != nil {
   121  		t.Fatalf("err: %s", err)
   122  	}
   123  	defaultJob, _ := Asset("command/assets/example.nomad")
   124  	if string(content) != string(defaultJob) {
   125  		t.Fatalf("unexpected file content\n\n%s", string(content))
   126  	}
   127  
   128  	// Works with -short flag
   129  	os.Remove(filename)
   130  	if code := cmd.Run([]string{"-short", filename}); code != 0 {
   131  		require.Zero(t, code, "unexpected exit code: %d", code)
   132  	}
   133  	content, err = ioutil.ReadFile(filename)
   134  	require.NoError(t, err)
   135  	shortJob, _ := Asset("command/assets/example-short.nomad")
   136  	require.Equal(t, string(content), string(shortJob))
   137  
   138  	// Fails if the file exists
   139  	if code := cmd.Run([]string{filename}); code != 1 {
   140  		t.Fatalf("expect exit code 1, got: %d", code)
   141  	}
   142  	if out := ui.ErrorWriter.String(); !strings.Contains(out, "exists") {
   143  		t.Fatalf("expect file exists error, got: %s", out)
   144  	}
   145  }