summaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/braintree/manners/server_test.go
blob: 0da015566cc60ef1e368e41a9067530ca2177be1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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.")
	}
}