From 2a29bf624536c9daed25966dcaf80d840d0972c3 Mon Sep 17 00:00:00 2001 From: Solomon Hykes Date: Wed, 23 Oct 2013 08:35:26 +0000 Subject: [PATCH] Engine: basic testing harness --- engine/env_test.go | 29 ++++++++++++++++++++++++++++ engine/init_test.go | 46 +++++++++++++++++++++++++++++++++++++++++++++ utils/random.go | 16 ++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 engine/env_test.go create mode 100644 engine/init_test.go create mode 100644 utils/random.go diff --git a/engine/env_test.go b/engine/env_test.go new file mode 100644 index 0000000000..3acbddad77 --- /dev/null +++ b/engine/env_test.go @@ -0,0 +1,29 @@ +package engine + +import ( + "testing" +) + +func TestNewJob(t *testing.T) { + job := mkJob(t, "dummy", "--level=awesome") + if job.Name != "dummy" { + t.Fatalf("Wrong job name: %s", job.Name) + } + if len(job.Args) != 1 { + t.Fatalf("Wrong number of job arguments: %d", len(job.Args)) + } + if job.Args[0] != "--level=awesome" { + t.Fatalf("Wrong job arguments: %s", job.Args[0]) + } +} + +func TestSetenv(t *testing.T) { + job := mkJob(t, "dummy") + job.Setenv("foo", "bar") + if val := job.Getenv("foo"); val != "bar" { + t.Fatalf("Getenv returns incorrect value: %s", val) + } + if val := job.Getenv("nonexistent"); val != "" { + t.Fatalf("Getenv returns incorrect value: %s", val) + } +} diff --git a/engine/init_test.go b/engine/init_test.go new file mode 100644 index 0000000000..b46e0bc9a1 --- /dev/null +++ b/engine/init_test.go @@ -0,0 +1,46 @@ +package engine + +import ( + "testing" + "runtime" + "strings" + "fmt" + "io/ioutil" + "github.com/dotcloud/docker/utils" +) + +var globalTestID string + +func init() { + Register("dummy", func(job *Job) string { return ""; }) +} + +func mkEngine(t *testing.T) *Engine { + // Use the caller function name as a prefix. + // This helps trace temp directories back to their test. + pc, _, _, _ := runtime.Caller(1) + callerLongName := runtime.FuncForPC(pc).Name() + parts := strings.Split(callerLongName, ".") + callerShortName := parts[len(parts)-1] + if globalTestID == "" { + globalTestID = utils.RandomString()[:4] + } + prefix := fmt.Sprintf("docker-test%s-%s-", globalTestID, callerShortName) + root, err := ioutil.TempDir("", prefix) + if err != nil { + t.Fatal(err) + } + eng, err := New(root) + if err != nil { + t.Fatal(err) + } + return eng +} + +func mkJob(t *testing.T, name string, args ...string) *Job { + job, err := mkEngine(t).Job(name, args...) + if err != nil { + t.Fatal(err) + } + return job +} diff --git a/utils/random.go b/utils/random.go new file mode 100644 index 0000000000..d5c37e44d0 --- /dev/null +++ b/utils/random.go @@ -0,0 +1,16 @@ +package utils + +import ( + "io" + "crypto/rand" + "encoding/hex" +) + +func RandomString() string { + id := make([]byte, 32) + _, err := io.ReadFull(rand.Reader, id) + if err != nil { + panic(err) // This shouldn't happen + } + return hex.EncodeToString(id) +}