diff options
author | unclejack <unclejack@users.noreply.github.com> | 2014-04-09 01:56:01 +0300 |
---|---|---|
committer | unclejack <unclejack@users.noreply.github.com> | 2014-04-09 01:56:01 +0300 |
commit | e128a606e39fa63c6b4fd6e53a1d88cf00aad868 (patch) | |
tree | 199ee7eb6678ffecd2ddad95fce794c795ad5183 /server/server_unit_test.go | |
parent | 143c9707a9fafc39e1d9747f528db97b2564f01e (diff) | |
parent | dc9c28f51d669d6b09e81c2381f800f1a33bb659 (diff) | |
download | docker-release-0.10.tar.gz |
Merge pull request #5079 from unclejack/bump_v0.10.0release-0.100.10.1-hotfixes
Bump version to v0.10.0
Diffstat (limited to 'server/server_unit_test.go')
-rw-r--r-- | server/server_unit_test.go | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/server/server_unit_test.go b/server/server_unit_test.go new file mode 100644 index 0000000000..b471c5c581 --- /dev/null +++ b/server/server_unit_test.go @@ -0,0 +1,99 @@ +package server + +import ( + "github.com/dotcloud/docker/utils" + "testing" + "time" +) + +func TestPools(t *testing.T) { + srv := &Server{ + pullingPool: make(map[string]chan struct{}), + pushingPool: make(map[string]chan struct{}), + } + + if _, err := srv.poolAdd("pull", "test1"); err != nil { + t.Fatal(err) + } + if _, err := srv.poolAdd("pull", "test2"); err != nil { + t.Fatal(err) + } + if _, err := srv.poolAdd("push", "test1"); err == nil || err.Error() != "pull test1 is already in progress" { + t.Fatalf("Expected `pull test1 is already in progress`") + } + if _, err := srv.poolAdd("pull", "test1"); err == nil || err.Error() != "pull test1 is already in progress" { + t.Fatalf("Expected `pull test1 is already in progress`") + } + if _, err := srv.poolAdd("wait", "test3"); err == nil || err.Error() != "Unknown pool type" { + t.Fatalf("Expected `Unknown pool type`") + } + if err := srv.poolRemove("pull", "test2"); err != nil { + t.Fatal(err) + } + if err := srv.poolRemove("pull", "test2"); err != nil { + t.Fatal(err) + } + if err := srv.poolRemove("pull", "test1"); err != nil { + t.Fatal(err) + } + if err := srv.poolRemove("push", "test1"); err != nil { + t.Fatal(err) + } + if err := srv.poolRemove("wait", "test3"); err == nil || err.Error() != "Unknown pool type" { + t.Fatalf("Expected `Unknown pool type`") + } +} + +func TestLogEvent(t *testing.T) { + srv := &Server{ + events: make([]utils.JSONMessage, 0, 64), + listeners: make(map[string]chan utils.JSONMessage), + } + + srv.LogEvent("fakeaction", "fakeid", "fakeimage") + + listener := make(chan utils.JSONMessage) + srv.Lock() + srv.listeners["test"] = listener + srv.Unlock() + + srv.LogEvent("fakeaction2", "fakeid", "fakeimage") + + numEvents := len(srv.GetEvents()) + if numEvents != 2 { + t.Fatalf("Expected 2 events, found %d", numEvents) + } + go func() { + time.Sleep(200 * time.Millisecond) + srv.LogEvent("fakeaction3", "fakeid", "fakeimage") + time.Sleep(200 * time.Millisecond) + srv.LogEvent("fakeaction4", "fakeid", "fakeimage") + }() + + setTimeout(t, "Listening for events timed out", 2*time.Second, func() { + for i := 2; i < 4; i++ { + event := <-listener + if event != srv.GetEvents()[i] { + t.Fatalf("Event received it different than expected") + } + } + }) +} + +// FIXME: this is duplicated from integration/commands_test.go +func setTimeout(t *testing.T, msg string, d time.Duration, f func()) { + c := make(chan bool) + + // Make sure we are not too long + go func() { + time.Sleep(d) + c <- true + }() + go func() { + f() + c <- false + }() + if <-c && msg != "" { + t.Fatal(msg) + } +} |