UNPKG

4.34 kBtext/coffeescriptView Raw
1assert = require 'assert'
2port = +process.env.CRIXALIS_PORT + 19
3zlib = require 'zlib'
4fs = require 'fs'
5Crixalis = require '../lib'
6
7Crixalis
8 .plugin('compression')
9 .plugin('static', route: yes)
10 .plugin('request')
11 .start('http', port)
12 .unref()
13
14Crixalis.staticPath = 't'
15Crixalis.cachePath = 't/tmp_' + port
16
17try
18 fs.mkdirSync('t/tmp_' + port)
19catch 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)