github.com/hernad/nomad@v1.6.112/command/alloc_stop_test.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package command
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/hernad/nomad/ci"
    10  	"github.com/mitchellh/cli"
    11  	"github.com/shoenig/test/must"
    12  )
    13  
    14  var _ cli.Command = (*AllocStopCommand)(nil)
    15  
    16  func TestAllocStop_Fails(t *testing.T) {
    17  	srv, _, url := testServer(t, false, nil)
    18  	defer srv.Shutdown()
    19  
    20  	ui := cli.NewMockUi()
    21  	cmd := &AllocStopCommand{Meta: Meta{Ui: ui}}
    22  
    23  	// Fails on misuse
    24  	code := cmd.Run([]string{"some", "garbage", "args"})
    25  	must.One(t, code)
    26  
    27  	out := ui.ErrorWriter.String()
    28  	must.StrContains(t, out, commandErrorText(cmd))
    29  
    30  	ui.ErrorWriter.Reset()
    31  
    32  	// Fails on connection failure
    33  	code = cmd.Run([]string{"-address=nope", "foobar"})
    34  	must.One(t, code)
    35  
    36  	out = ui.ErrorWriter.String()
    37  	must.StrContains(t, out, "Error querying allocation")
    38  
    39  	ui.ErrorWriter.Reset()
    40  
    41  	// Fails on missing alloc
    42  	code = cmd.Run([]string{"-address=" + url, "26470238-5CF2-438F-8772-DC67CFB0705C"})
    43  	must.One(t, code)
    44  
    45  	out = ui.ErrorWriter.String()
    46  	must.StrContains(t, out, "No allocation(s) with prefix or id")
    47  	ui.ErrorWriter.Reset()
    48  
    49  	// Fail on identifier with too few characters
    50  	code = cmd.Run([]string{"-address=" + url, "2"})
    51  	must.One(t, code)
    52  
    53  	out = ui.ErrorWriter.String()
    54  	must.StrContains(t, out, "must contain at least two characters")
    55  	ui.ErrorWriter.Reset()
    56  
    57  	// Identifiers with uneven length should produce a query result
    58  	code = cmd.Run([]string{"-address=" + url, "123"})
    59  	must.One(t, code)
    60  
    61  	out = ui.ErrorWriter.String()
    62  	must.StrContains(t, out, "No allocation(s) with prefix or id")
    63  }
    64  
    65  func TestAllocStop_Run(t *testing.T) {
    66  	ci.Parallel(t)
    67  
    68  	srv, client, url := testServer(t, true, nil)
    69  	defer srv.Shutdown()
    70  
    71  	// Wait for a node to be ready
    72  	waitForNodes(t, client)
    73  
    74  	ui := cli.NewMockUi()
    75  	cmd := &AllocStopCommand{Meta: Meta{Ui: ui}}
    76  
    77  	jobID := "job1_sfx"
    78  	job1 := testJob(jobID)
    79  	resp, _, err := client.Jobs().Register(job1, nil)
    80  	must.NoError(t, err)
    81  
    82  	code := waitForSuccess(ui, client, fullId, t, resp.EvalID)
    83  	must.Zero(t, code)
    84  
    85  	// get an alloc id
    86  	allocID := ""
    87  	if allocs, _, err := client.Jobs().Allocations(jobID, false, nil); err == nil {
    88  		if len(allocs) > 0 {
    89  			allocID = allocs[0].ID
    90  		}
    91  	}
    92  	must.NotEq(t, "", allocID)
    93  
    94  	// Wait for alloc to be running
    95  	waitForAllocRunning(t, client, allocID)
    96  
    97  	code = cmd.Run([]string{"-address=" + url, allocID})
    98  	must.Zero(t, code)
    99  }