summaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/braintree/manners/server_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'Godeps/_workspace/src/github.com/braintree/manners/server_test.go')
-rw-r--r--Godeps/_workspace/src/github.com/braintree/manners/server_test.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/github.com/braintree/manners/server_test.go b/Godeps/_workspace/src/github.com/braintree/manners/server_test.go
new file mode 100644
index 000000000..0da015566
--- /dev/null
+++ b/Godeps/_workspace/src/github.com/braintree/manners/server_test.go
@@ -0,0 +1,71 @@
+package manners
+
+import (
+ "net/http"
+ "testing"
+)
+
+// Tests that the server allows in-flight requests to complete before shutting
+// down.
+func TestGracefulness(t *testing.T) {
+ ready := make(chan bool)
+ done := make(chan bool)
+
+ exited := false
+
+ handler := newBlockingHandler(ready, done)
+ server := NewServer()
+
+ go func() {
+ err := server.ListenAndServe(":7000", handler)
+ if err != nil {
+ t.Error(err)
+ }
+
+ exited = true
+ }()
+
+ go func() {
+ _, err := http.Get("http://localhost:7000")
+ if err != nil {
+ t.Error(err)
+ }
+ }()
+
+ // This will block until the server is inside the handler function.
+ <-ready
+
+ server.Shutdown <- true
+ <-done
+
+ if exited {
+ t.Fatal("The request did not complete before server exited")
+ } else {
+ // The handler is being allowed to run to completion; test passes.
+ }
+}
+
+// Tests that the server begins to shut down when told to and does not accept
+// new requests
+func TestShutdown(t *testing.T) {
+ handler := newTestHandler()
+ server := NewServer()
+ exited := make(chan bool)
+
+ go func() {
+ err := server.ListenAndServe(":7100", handler)
+ if err != nil {
+ t.Error(err)
+ }
+ exited <- true
+ }()
+
+ server.Shutdown <- true
+
+ <-exited
+ _, err := http.Get("http://localhost:7100")
+
+ if err == nil {
+ t.Fatal("Did not receive an error when trying to connect to server.")
+ }
+}