1 | assert = require 'assert'
|
2 | port = +process.env.CRIXALIS_PORT + 19
|
3 | zlib = require 'zlib'
|
4 | fs = require 'fs'
|
5 | Crixalis = require '../lib'
|
6 |
|
7 | Crixalis
|
8 | .plugin('compression')
|
9 | .plugin('static', route: yes)
|
10 | .plugin('request')
|
11 | .start('http', port)
|
12 | .unref()
|
13 |
|
14 | Crixalis.staticPath = 't'
|
15 | Crixalis.cachePath = 't/tmp_' + port
|
16 |
|
17 | try
|
18 | fs.mkdirSync('t/tmp_' + port)
|
19 | catch error
|
20 | console.warn error
|
21 |
|
22 | (require 'vows')
|
23 | .describe('static-compression')
|
24 | .addBatch
|
25 | gzip:
|
26 | topic: ->
|
27 | params =
|
28 | host: 'localhost'
|
29 | port: port
|
30 | path: __filename.replace(/^.*(?=\/)/, '')
|
31 | headers: 'accept-encoding': 'gzip'
|
32 |
|
33 | Crixalis.request(params, @callback)
|
34 | return
|
35 |
|
36 | error: (error, result) -> assert.equal error, null
|
37 | result: (error, result) -> assert.equal result.statusCode, 200
|
38 |
|
39 | body:
|
40 | topic: (result) ->
|
41 | zlib.gunzip result.message, @callback
|
42 | return
|
43 |
|
44 | decompress: (error, result) ->
|
45 | assert.equal result.toString(), fs.readFileSync(__filename)
|
46 |
|
47 | headers: (error, result) ->
|
48 | stat = fs.statSync(__filename)
|
49 |
|
50 | assert.notEqual result.headers['content-length'], stat.size
|
51 | assert.equal result.headers['content-length'], result.message.length
|
52 | assert.equal result.headers['last-modified'], stat.mtime.toUTCString()
|
53 | assert.equal result.headers['content-type'], 'application/javascript; charset=utf-8'
|
54 | assert.equal result.headers['content-encoding'], 'gzip'
|
55 | assert.equal result.headers.vary, 'Accept-Encoding'
|
56 | assert.match result.headers.etag, /^"[a-z0-9\/+]+-g"$/i
|
57 |
|
58 | feature: ->
|
59 | assert.isTrue Crixalis.has('static')
|
60 | assert.isTrue Crixalis.has('compression')
|
61 |
|
62 | deflate:
|
63 | topic: ->
|
64 | params =
|
65 | host: 'localhost'
|
66 | port: port
|
67 | path: __filename.replace(/^.*(?=\/)/, '')
|
68 | headers: 'accept-encoding': 'deflate'
|
69 |
|
70 | Crixalis.request(params, @callback)
|
71 | return
|
72 |
|
73 | error: (error, result) -> assert.equal error, null
|
74 | result: (error, result) -> assert.equal result.statusCode, 200
|
75 |
|
76 | body:
|
77 | topic: (result) ->
|
78 | zlib.inflate result.message, @callback
|
79 | return
|
80 |
|
81 | decompress: (error, result) ->
|
82 | assert.equal result.toString(), fs.readFileSync(__filename)
|
83 |
|
84 | headers: (error, result) ->
|
85 | stat = fs.statSync(__filename)
|
86 |
|
87 | assert.notEqual result.headers['content-length'], stat.size
|
88 |
|
89 | assert.equal result.headers['content-length'], result.message.length
|
90 | assert.equal result.headers['last-modified'], stat.mtime.toUTCString()
|
91 | assert.equal result.headers['content-type'], 'application/javascript; charset=utf-8'
|
92 | assert.equal result.headers['content-encoding'], 'deflate'
|
93 | assert.equal result.headers.vary, 'Accept-Encoding'
|
94 | assert.match result.headers.etag, /^"[a-z0-9\/+]+-d"$/i
|
95 |
|
96 | ifmodsince304:
|
97 | topic: ->
|
98 | params =
|
99 | host: 'localhost'
|
100 | port: port
|
101 | path: __filename.replace(/^.*(?=\/)/, '')
|
102 | headers:
|
103 | 'accept-encoding': '*'
|
104 | 'if-modified-since': fs.statSync(__filename).mtime.toUTCString()
|
105 |
|
106 | Crixalis.request(params, @callback)
|
107 | return
|
108 |
|
109 | error: (error, result) -> assert.equal error, null
|
110 | result: (error, result) -> assert.equal result.statusCode, 304
|
111 | body: (error, result) -> assert.equal result.message.toString(), ''
|
112 |
|
113 | headers: (error, result) ->
|
114 | assert.isUndefined result.headers['vary']
|
115 | assert.isUndefined result.headers['content-type']
|
116 | assert.isUndefined result.headers['content-length']
|
117 | assert.isUndefined result.headers['last-modified']
|
118 | assert.isUndefined result.headers['etag']
|
119 |
|
120 | ifnonematch304:
|
121 | topic: ->
|
122 | params =
|
123 | host: 'localhost'
|
124 | port: port
|
125 | path: __filename.replace(/^.*(?=\/)/, '')
|
126 | headers:
|
127 | 'accept-encoding': 'deflate'
|
128 |
|
129 | Crixalis.request params, (error, result) =>
|
130 | params.headers['if-none-match'] = result.headers.etag
|
131 |
|
132 | Crixalis.request(params, @callback)
|
133 |
|
134 | return
|
135 |
|
136 | error: (error, result) -> assert.equal error, null
|
137 | result: (error, result) -> assert.equal result.statusCode, 304
|
138 | body: (error, result) -> assert.equal result.message.toString(), ''
|
139 | headers: (error, result) ->
|
140 | assert.isUndefined result.headers['vary']
|
141 | assert.isUndefined result.headers['content-type']
|
142 | assert.isUndefined result.headers['content-length']
|
143 | assert.isUndefined result.headers['last-modified']
|
144 | assert.isUndefined result.headers['etag']
|
145 |
|
146 | .export(module)
|