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 }