github.com/pritambaral/docker@v1.4.2-0.20150120174542-b2fe1b3dd952/engine/engine_test.go (about) 1 package engine 2 3 import ( 4 "bytes" 5 "strings" 6 "testing" 7 ) 8 9 func TestRegister(t *testing.T) { 10 if err := Register("dummy1", nil); err != nil { 11 t.Fatal(err) 12 } 13 14 if err := Register("dummy1", nil); err == nil { 15 t.Fatalf("Expecting error, got none") 16 } 17 // Register is global so let's cleanup to avoid conflicts 18 defer unregister("dummy1") 19 20 eng := New() 21 22 //Should fail because global handlers are copied 23 //at the engine creation 24 if err := eng.Register("dummy1", nil); err == nil { 25 t.Fatalf("Expecting error, got none") 26 } 27 28 if err := eng.Register("dummy2", nil); err != nil { 29 t.Fatal(err) 30 } 31 32 if err := eng.Register("dummy2", nil); err == nil { 33 t.Fatalf("Expecting error, got none") 34 } 35 defer unregister("dummy2") 36 } 37 38 func TestJob(t *testing.T) { 39 eng := New() 40 job1 := eng.Job("dummy1", "--level=awesome") 41 42 if job1.handler != nil { 43 t.Fatalf("job1.handler should be empty") 44 } 45 46 h := func(j *Job) Status { 47 j.Printf("%s\n", j.Name) 48 return 42 49 } 50 51 eng.Register("dummy2", h) 52 defer unregister("dummy2") 53 job2 := eng.Job("dummy2", "--level=awesome") 54 55 if job2.handler == nil { 56 t.Fatalf("job2.handler shouldn't be nil") 57 } 58 59 if job2.handler(job2) != 42 { 60 t.Fatalf("handler dummy2 was not found in job2") 61 } 62 } 63 64 func TestEngineShutdown(t *testing.T) { 65 eng := New() 66 if eng.IsShutdown() { 67 t.Fatalf("Engine should not show as shutdown") 68 } 69 eng.Shutdown() 70 if !eng.IsShutdown() { 71 t.Fatalf("Engine should show as shutdown") 72 } 73 } 74 75 func TestEngineCommands(t *testing.T) { 76 eng := New() 77 handler := func(job *Job) Status { return StatusOK } 78 eng.Register("foo", handler) 79 eng.Register("bar", handler) 80 eng.Register("echo", handler) 81 eng.Register("die", handler) 82 var output bytes.Buffer 83 commands := eng.Job("commands") 84 commands.Stdout.Add(&output) 85 commands.Run() 86 expected := "bar\ncommands\ndie\necho\nfoo\n" 87 if result := output.String(); result != expected { 88 t.Fatalf("Unexpected output:\nExpected = %v\nResult = %v\n", expected, result) 89 } 90 } 91 92 func TestEngineString(t *testing.T) { 93 eng1 := New() 94 eng2 := New() 95 s1 := eng1.String() 96 s2 := eng2.String() 97 if eng1 == eng2 { 98 t.Fatalf("Different engines should have different names (%v == %v)", s1, s2) 99 } 100 } 101 102 func TestParseJob(t *testing.T) { 103 eng := New() 104 // Verify that the resulting job calls to the right place 105 var called bool 106 eng.Register("echo", func(job *Job) Status { 107 called = true 108 return StatusOK 109 }) 110 input := "echo DEBUG=1 hello world VERBOSITY=42" 111 job, err := eng.ParseJob(input) 112 if err != nil { 113 t.Fatal(err) 114 } 115 if job.Name != "echo" { 116 t.Fatalf("Invalid job name: %v", job.Name) 117 } 118 if strings.Join(job.Args, ":::") != "hello:::world" { 119 t.Fatalf("Invalid job args: %v", job.Args) 120 } 121 if job.Env().Get("DEBUG") != "1" { 122 t.Fatalf("Invalid job env: %v", job.Env) 123 } 124 if job.Env().Get("VERBOSITY") != "42" { 125 t.Fatalf("Invalid job env: %v", job.Env) 126 } 127 if len(job.Env().Map()) != 2 { 128 t.Fatalf("Invalid job env: %v", job.Env) 129 } 130 if err := job.Run(); err != nil { 131 t.Fatal(err) 132 } 133 if !called { 134 t.Fatalf("Job was not called") 135 } 136 } 137 138 func TestCatchallEmptyName(t *testing.T) { 139 eng := New() 140 var called bool 141 eng.RegisterCatchall(func(job *Job) Status { 142 called = true 143 return StatusOK 144 }) 145 err := eng.Job("").Run() 146 if err == nil { 147 t.Fatalf("Engine.Job(\"\").Run() should return an error") 148 } 149 if called { 150 t.Fatalf("Engine.Job(\"\").Run() should return an error") 151 } 152 }