github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/command/operator_snapshot_restore_test.go (about)

     1  package command
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/hashicorp/nomad/api"
    11  	"github.com/hashicorp/nomad/command/agent"
    12  	"github.com/hashicorp/nomad/nomad/structs"
    13  	"github.com/mitchellh/cli"
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func TestOperatorSnapshotRestore_Works(t *testing.T) {
    18  	t.Parallel()
    19  
    20  	tmpDir, err := ioutil.TempDir("", "nomad-tempdir")
    21  	require.NoError(t, err)
    22  	defer os.RemoveAll(tmpDir)
    23  
    24  	snapshotPath := generateSnapshotFile(t, func(srv *agent.TestAgent, client *api.Client, url string) {
    25  		sampleJob := `
    26  job "snapshot-test-job" {
    27  	type = "service"
    28  	datacenters = [ "dc1" ]
    29  	group "group1" {
    30  		count = 1
    31  		task "task1" {
    32  			driver = "exec"
    33  			resources {
    34  				cpu = 1000
    35  				memory = 512
    36  			}
    37  		}
    38  	}
    39  
    40  }`
    41  
    42  		ui := cli.NewMockUi()
    43  		cmd := &JobRunCommand{Meta: Meta{Ui: ui}}
    44  		cmd.JobGetter.testStdin = strings.NewReader(sampleJob)
    45  
    46  		code := cmd.Run([]string{"--address=" + url, "-detach", "-"})
    47  		require.Zero(t, code)
    48  	})
    49  
    50  	srv, _, url := testServer(t, false, func(c *agent.Config) {
    51  		c.DevMode = false
    52  		c.DataDir = filepath.Join(tmpDir, "server1")
    53  
    54  		c.AdvertiseAddrs.HTTP = "127.0.0.1"
    55  		c.AdvertiseAddrs.RPC = "127.0.0.1"
    56  		c.AdvertiseAddrs.Serf = "127.0.0.1"
    57  	})
    58  
    59  	defer srv.Shutdown()
    60  
    61  	// job is not found before restore
    62  	j, err := srv.Agent.Server().State().JobByID(nil, structs.DefaultNamespace, "snapshot-test-job")
    63  	require.NoError(t, err)
    64  	require.Nil(t, j)
    65  
    66  	ui := cli.NewMockUi()
    67  	cmd := &OperatorSnapshotRestoreCommand{Meta: Meta{Ui: ui}}
    68  
    69  	code := cmd.Run([]string{"--address=" + url, snapshotPath})
    70  	require.Empty(t, ui.ErrorWriter.String())
    71  	require.Zero(t, code)
    72  	require.Contains(t, ui.OutputWriter.String(), "Snapshot Restored")
    73  
    74  	foundJob, err := srv.Agent.Server().State().JobByID(nil, structs.DefaultNamespace, "snapshot-test-job")
    75  	require.NoError(t, err)
    76  	require.Equal(t, "snapshot-test-job", foundJob.ID)
    77  }
    78  
    79  func TestOperatorSnapshotRestore_Fails(t *testing.T) {
    80  	t.Parallel()
    81  
    82  	ui := cli.NewMockUi()
    83  	cmd := &OperatorSnapshotRestoreCommand{Meta: Meta{Ui: ui}}
    84  
    85  	// Fails on misuse
    86  	code := cmd.Run([]string{"some", "bad", "args"})
    87  	require.Equal(t, 1, code)
    88  	require.Contains(t, ui.ErrorWriter.String(), commandErrorText(cmd))
    89  	ui.ErrorWriter.Reset()
    90  
    91  	// Fails when specified file does not exist
    92  	code = cmd.Run([]string{"/unicorns/leprechauns"})
    93  	require.Equal(t, 1, code)
    94  	require.Contains(t, ui.ErrorWriter.String(), "no such file")
    95  }