diff --git a/drivers/rawexec/driver_test.go b/drivers/rawexec/driver_test.go index dad5810c5..35c095899 100644 --- a/drivers/rawexec/driver_test.go +++ b/drivers/rawexec/driver_test.go @@ -12,12 +12,15 @@ import ( "testing" "time" + "github.com/hashicorp/hcl2/hcl" ctestutil "github.com/hashicorp/nomad/client/testutil" "github.com/hashicorp/nomad/helper/testlog" "github.com/hashicorp/nomad/helper/testtask" "github.com/hashicorp/nomad/helper/uuid" basePlug "github.com/hashicorp/nomad/plugins/base" "github.com/hashicorp/nomad/plugins/drivers" + "github.com/hashicorp/nomad/plugins/shared" + "github.com/hashicorp/nomad/plugins/shared/hclspec" "github.com/hashicorp/nomad/testutil" "github.com/stretchr/testify/require" ) @@ -111,14 +114,16 @@ func TestRawExecDriver_StartWait(t *testing.T) { ID: uuid.Generate(), Name: "test", } - task.EncodeDriverConfig(&TaskConfig{ - Command: "go", - Args: []string{"version"}, - }) + + taskConfig := map[string]interface{}{} + taskConfig["command"] = "go" + taskConfig["args"] = []string{"version"} + + encodeDriverHelper(require, task, taskConfig) cleanup := harness.MkAllocDir(task, false) defer cleanup() - handle, err := harness.StartTask(task) + handle, _, err := harness.StartTask(task) require.NoError(err) ch, err := harness.WaitTask(context.Background(), handle.Config.ID) @@ -138,14 +143,17 @@ func TestRawExecDriver_StartWaitStop(t *testing.T) { ID: uuid.Generate(), Name: "test", } - task.EncodeDriverConfig(&TaskConfig{ - Command: testtask.Path(), - Args: []string{"sleep", "100s"}, - }) + + taskConfig := map[string]interface{}{} + taskConfig["command"] = testtask.Path() + taskConfig["args"] = []string{"sleep", "100s"} + + encodeDriverHelper(require, task, taskConfig) + cleanup := harness.MkAllocDir(task, false) defer cleanup() - handle, err := harness.StartTask(task) + handle, _, err := harness.StartTask(task) require.NoError(err) ch, err := harness.WaitTask(context.Background(), handle.Config.ID) @@ -196,15 +204,17 @@ func TestRawExecDriver_StartWaitRecoverWaitStop(t *testing.T) { ID: uuid.Generate(), Name: "sleep", } - task.EncodeDriverConfig(&TaskConfig{ - Command: testtask.Path(), - Args: []string{"sleep", "100s"}, - }) + taskConfig := map[string]interface{}{} + taskConfig["command"] = testtask.Path() + taskConfig["args"] = []string{"sleep", "100s"} + + encodeDriverHelper(require, task, taskConfig) + testtask.SetTaskConfigEnv(task) cleanup := harness.MkAllocDir(task, false) defer cleanup() - handle, err := harness.StartTask(task) + handle, _, err := harness.StartTask(task) require.NoError(err) ch, err := harness.WaitTask(context.Background(), task.ID) @@ -277,17 +287,14 @@ func TestRawExecDriver_Start_Wait_AllocDir(t *testing.T) { exp := []byte("win") file := "output.txt" outPath := fmt.Sprintf(`%s/%s`, task.TaskDir().SharedAllocDir, file) - task.EncodeDriverConfig(&TaskConfig{ - Command: testtask.Path(), - Args: []string{ - "sleep", "1s", "write", - string(exp), outPath, - }, - }) + taskConfig := map[string]interface{}{} + taskConfig["command"] = testtask.Path() + taskConfig["args"] = []string{"sleep", "1s", "write", string(exp), outPath} + encodeDriverHelper(require, task, taskConfig) testtask.SetTaskConfigEnv(task) - _, err := harness.StartTask(task) + _, _, err := harness.StartTask(task) require.NoError(err) // Task should terminate quickly @@ -331,14 +338,13 @@ func TestRawExecDriver_Start_Kill_Wait_Cgroup(t *testing.T) { cleanup := harness.MkAllocDir(task, false) defer cleanup() - task.EncodeDriverConfig(&TaskConfig{ - Command: testtask.Path(), - Args: []string{"fork/exec", pidFile, "pgrp", "0", "sleep", "20s"}, - }) - + taskConfig := map[string]interface{}{} + taskConfig["command"] = testtask.Path() + taskConfig["args"] = []string{"fork/exec", pidFile, "pgrp", "0", "sleep", "20s"} + encodeDriverHelper(require, task, taskConfig) testtask.SetTaskConfigEnv(task) - _, err := harness.StartTask(task) + _, _, err := harness.StartTask(task) require.NoError(err) // Find the process @@ -419,14 +425,13 @@ func TestRawExecDriver_Exec(t *testing.T) { cleanup := harness.MkAllocDir(task, false) defer cleanup() - task.EncodeDriverConfig(&TaskConfig{ - Command: testtask.Path(), - Args: []string{"sleep", "9000s"}, - }) - + taskConfig := map[string]interface{}{} + taskConfig["command"] = testtask.Path() + taskConfig["args"] = []string{"sleep", "9000s"} + encodeDriverHelper(require, task, taskConfig) testtask.SetTaskConfigEnv(task) - _, err := harness.StartTask(task) + _, _, err := harness.StartTask(task) require.NoError(err) // Exec a command that should work @@ -443,3 +448,15 @@ func TestRawExecDriver_Exec(t *testing.T) { require.NoError(harness.DestroyTask(task.ID, true)) } + +func encodeDriverHelper(require *require.Assertions, task *drivers.TaskConfig, taskConfig map[string]interface{}) { + evalCtx := &hcl.EvalContext{ + Functions: shared.GetStdlibFuncs(), + } + spec, diag := hclspec.Convert(taskConfigSpec) + require.False(diag.HasErrors()) + taskConfigCtyVal, diag := shared.ParseHclInterface(taskConfig, spec, evalCtx) + require.False(diag.HasErrors()) + err := task.EncodeDriverConfig(taskConfigCtyVal) + require.Nil(err) +} diff --git a/drivers/rawexec/driver_unix_test.go b/drivers/rawexec/driver_unix_test.go index 7558df44f..b23e021d3 100644 --- a/drivers/rawexec/driver_unix_test.go +++ b/drivers/rawexec/driver_unix_test.go @@ -4,12 +4,13 @@ package rawexec import ( "context" + "runtime" + "testing" + "fmt" "io/ioutil" "path/filepath" - "runtime" "strings" - "testing" "time" "github.com/hashicorp/nomad/helper/testlog" @@ -39,13 +40,14 @@ func TestRawExecDriver_User(t *testing.T) { cleanup := harness.MkAllocDir(task, false) defer cleanup() - task.EncodeDriverConfig(&TaskConfig{ - Command: testtask.Path(), - Args: []string{"sleep", "45s"}, - }) + taskConfig := map[string]interface{}{} + taskConfig["command"] = testtask.Path() + taskConfig["args"] = []string{"sleep", "45s"} + encodeDriverHelper(require, task, taskConfig) testtask.SetTaskConfigEnv(task) - _, err := harness.StartTask(task) + + _, _, err := harness.StartTask(task) require.Error(err) msg := "unknown user alice" require.Contains(err.Error(), msg) @@ -69,10 +71,12 @@ func TestRawExecDriver_Signal(t *testing.T) { cleanup := harness.MkAllocDir(task, true) defer cleanup() - task.EncodeDriverConfig(&TaskConfig{ - Command: "/bin/bash", - Args: []string{"test.sh"}, - }) + taskConfig := map[string]interface{}{} + taskConfig["command"] = "/bin/bash" + taskConfig["args"] = []string{"test.sh"} + + encodeDriverHelper(require, task, taskConfig) + testtask.SetTaskConfigEnv(task) testFile := filepath.Join(task.TaskDir().Dir, "test.sh") testData := []byte(` @@ -88,7 +92,7 @@ done require.NoError(ioutil.WriteFile(testFile, testData, 0777)) testtask.SetTaskConfigEnv(task) - _, err := harness.StartTask(task) + _, _, err := harness.StartTask(task) require.NoError(err) go func() { diff --git a/plugins/drivers/utils.go b/plugins/drivers/utils.go index ddf97fb6b..dd0da0614 100644 --- a/plugins/drivers/utils.go +++ b/plugins/drivers/utils.go @@ -136,8 +136,10 @@ func resourcesFromProto(pb *proto.Resources) *Resources { } func resourcesToProto(r *Resources) *proto.Resources { + if r == nil { + return nil + } var pb proto.Resources - if r.NomadResources != nil { pb.RawResources = &proto.RawResources{ Cpu: int64(r.NomadResources.CPU), @@ -404,3 +406,7 @@ func resourceUsageFromProto(pb *proto.TaskResourceUsage) *cstructs.ResourceUsage MemoryStats: &memory, } } + +func BytesToMB(bytes int64) int64 { + return bytes / (1024 * 1024) +}