6
"launchpad.net/gocheck"
8
"launchpad.net/goamz/aws"
14
func Test(t *testing.T) {
18
var integration = flag.Bool("i", false, "Enable integration tests")
24
func (s *SuiteI) SetUpSuite(c *gocheck.C) {
26
c.Skip("Integration tests not enabled (-int flag)")
28
auth, err := aws.EnvAuth()
35
type HTTPSuite struct{}
37
var testServer = NewTestHTTPServer("http://localhost:4444", 5e9)
40
func (s *HTTPSuite) SetUpSuite(c *gocheck.C) {
44
func (s *HTTPSuite) TearDownTest(c *gocheck.C) {
45
testServer.FlushRequests()
48
type TestHTTPServer struct {
52
request chan *http.Request
53
response chan *testResponse
57
type testResponse struct {
59
Headers map[string]string
63
func NewTestHTTPServer(url string, timeout int64) *TestHTTPServer {
64
return &TestHTTPServer{URL: url, Timeout: timeout}
67
func (s *TestHTTPServer) Start() {
73
s.request = make(chan *http.Request, 64)
74
s.response = make(chan *testResponse, 64)
75
s.pending = make(chan bool, 64)
77
url, _ := http.ParseURL(s.URL)
78
go http.ListenAndServe(url.Host, s)
80
s.PrepareResponse(202, nil, "Nothing.")
82
// Wait for it to be up.
83
resp, err := http.Get(s.URL)
84
if err == nil && resp.StatusCode == 202 {
87
fmt.Fprintf(os.Stderr, "\nWaiting for fake server to be up... ")
90
fmt.Fprintf(os.Stderr, "done\n\n")
91
s.WaitRequest() // Consume dummy request.
94
// FlushRequests discards requests which were not yet consumed by WaitRequest.
95
func (s *TestHTTPServer) FlushRequests() {
105
func (s *TestHTTPServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
107
var resp *testResponse
109
case resp = <-s.response:
110
case <-time.After(s.Timeout):
111
fmt.Fprintf(os.Stderr, "ERROR: Timeout waiting for test to provide response\n")
112
resp = &testResponse{500, nil, ""}
114
if resp.Headers != nil {
116
for k, v := range resp.Headers {
120
if resp.Status != 0 {
121
w.WriteHeader(resp.Status)
123
w.Write([]byte(resp.Body))
126
func (s *TestHTTPServer) WaitRequest() *http.Request {
128
case req := <-s.request:
131
case <-time.After(s.Timeout):
132
panic("Timeout waiting for goamz request")
137
func (s *TestHTTPServer) PrepareResponse(status int, headers map[string]string, body string) {
138
s.response <- &testResponse{status, headers, body}