forked from basecamp/pow
/
test_http_server.coffee
118 lines (107 loc) · 4.24 KB
/
test_http_server.coffee
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
http = require "http"
{HttpServer} = require ".."
async = require "async"
{testCase} = require "nodeunit"
{prepareFixtures, fixturePath, createConfiguration, swap, serve} = require "./lib/test_helper"
serveRoot = (root, options, callback) ->
unless callback
callback = options
options = {}
configuration = createConfiguration
hostRoot: fixturePath(root),
dstPort: options.dstPort ? 80
serve new HttpServer(configuration), callback
module.exports = testCase
setUp: (proceed) ->
prepareFixtures proceed
"serves requests from multiple apps": (test) ->
test.expect 4
serveRoot "apps", (request, done) ->
async.parallel [
(proceed) ->
request "GET", "/", host: "hello.dev", (body) ->
test.same "Hello", body
proceed()
(proceed) ->
request "GET", "/", host: "www.hello.dev", (body) ->
test.same "Hello", body
proceed()
(proceed) ->
request "GET", "/", host: "env.dev", (body) ->
test.same "Hello Pow", JSON.parse(body).POW_TEST
proceed()
(proceed) ->
request "GET", "/", host: "pid.dev", (body) ->
test.ok body.match /^\d+$/
proceed()
], ->
done -> test.done()
"responds with a custom 503 when a domain isn't configured": (test) ->
test.expect 2
serveRoot "apps", (request, done) ->
request "GET", "/redirect", host: "nonexistent.dev", (body, response) ->
test.same 503, response.statusCode
test.same "NonexistentDomain", response.headers["x-pow-handler"]
done -> test.done()
"responds with a custom 500 when an app can't boot": (test) ->
test.expect 2
serveRoot "apps", (request, done) ->
request "GET", "/", host: "error.dev", (body, response) ->
test.same 500, response.statusCode
test.same "ApplicationException", response.headers["x-pow-handler"]
done -> test.done()
"recovering from a boot error": (test) ->
test.expect 3
config = fixturePath "apps/error/config.ru"
ok = fixturePath "apps/error/ok.ru"
serveRoot "apps", (request, done) ->
request "GET", "/", host: "error.dev", (body, response) ->
test.same 500, response.statusCode
swap config, ok, (err, unswap) ->
request "GET", "/", host: "error.dev", (body, response) ->
test.same 200, response.statusCode
test.same "OK", body
done -> unswap -> test.done()
"respects public-facing port in redirects": (test) ->
test.expect 2
async.series [
(proceed) ->
serveRoot "apps", dstPort: 80, (request, done) ->
request "GET", "/redirect", host: "hello.dev", (body, response) ->
test.same "http://hello.dev/", response.headers.location
done proceed
(proceed) ->
serveRoot "apps", dstPort: 81, (request, done) ->
request "GET", "/redirect", host: "hello.dev", (body, response) ->
test.same "http://hello.dev:81/", response.headers.location
done proceed
], test.done
"serves static assets in public/": (test) ->
test.expect 2
serveRoot "apps", (request, done) ->
request "GET", "/robots.txt", host: "hello.dev", (body, response) ->
test.same 200, response.statusCode
test.same "User-Agent: *\nDisallow: /\n", body
done -> test.done()
"serves static assets from non-Rack applications": (test) ->
test.expect 3
async.series [
(proceed) ->
serveRoot "apps", (request, done) ->
request "GET", "/", host: "static.dev", (body, response) ->
test.same 200, response.statusCode
test.same "<!doctype html>\nhello world!\n", body
done proceed
(proceed) ->
serveRoot "apps", (request, done) ->
request "GET", "/nonexistent", host: "static.dev", (body, response) ->
test.same 404, response.statusCode
done proceed
], test.done
"post request": (test) ->
test.expect 2
serveRoot "apps", (request, done) ->
request "POST", "/post", host: "hello.dev", data: "foo=bar", (body, response) ->
test.same 200, response.statusCode
test.same "foo=bar", body
done -> test.done()