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  }