Files
DemoApp/node_modules/gzippo/test/test-static.js
2013-02-14 08:18:17 -05:00

203 lines
5.4 KiB
JavaScript

var assert = require('assert')
, fs = require('fs')
, express = require('express')
, join = require('path').join
, gzippo = require('../')
;
var fixtures = join(__dirname, 'fixtures')
, port = 32123
, app
, request = require('./request')({ port: port })
;
// builds a `request` callback which asserts that the response's statusCode is
// what we expect
function statusCode(expected, callback) {
return function(err, res, data) {
if (err) throw err;
assert.equal(res.statusCode, expected);
callback();
};
}
// read a fixture file synchronously
function file(name) {
return fs.readFileSync(join(fixtures, name));
}
describe('gzippo.staticGzip', function() {
app = express();
app.use(gzippo.staticGzip(fixtures));
app.use(app.router);
app.listen(port);
// set up a new server for each test
// beforeEach(function(done) {
// });
// afterEach(function() {
// app.exit();
// });
it('should gzip static .json file', function(done) {
request('/user.json', { 'Accept-Encoding': 'gzip' },
function(err, res, data) {
if (err) throw err;
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-type'], 'application/json; charset=UTF-8');
assert.equal(data.length, '69');
assert.equal(res.headers['content-encoding'], 'gzip');
assert.deepEqual(data, file('user.gzip'));
done();
}
);
});
// it('should get a route', function(done) {
// request('/', { },
// function(err, res, data) {
// console.log(data.toString());
// if (err) throw err;
// assert.equal(res.statusCode, 200);
// assert.deepEqual(data, 'ok');
// done();
// }
// );
// });
it('should gzip static .js file', function(done) {
request('/test.js', { 'Accept-Encoding': 'gzip' },
function(err, res, data) {
if (err) throw err;
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-type'], 'application/javascript; charset=UTF-8');
assert.equal(data.length, '35');
assert.equal(res.headers['content-encoding'], 'gzip');
assert.deepEqual(data, file('test.js.gzip'));
done();
}
);
});
it('should serve a .js file uncompressed when the accept-encoding header has not been set', function(done) {
request('/test.js', {}, function(err, res, data) {
if (err) throw err;
assert.equal(res.statusCode, 200);
assert.equal(data.length, '15');
assert.deepEqual(data, file('test.js'));
done();
});
});
it('should successfully gzip a utf-8 file', function(done) {
request('/utf8.txt', { 'Accept-Encoding': 'gzip' },
function(err, res, data) {
if (err) throw err;
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-type'], 'text/plain; charset=UTF-8');
assert.equal(data.length, '2031');
assert.equal(res.headers['content-encoding'], 'gzip');
assert.deepEqual(data, file('utf8.txt.gz'));
done();
}
);
});
it('should cache a previously gzipped utf-8 file (and respond with a 304 Not Modified)', function(done) {
request('/utf8.txt', { 'Accept-Encoding': 'gzip' },
function(err, res, data) {
if (err) throw err;
assert.equal(res.statusCode, 200);
var headers = {
'Accept-Encoding': 'gzip',
'If-Modified-Since': res.headers['last-modified']
};
request('/utf8.txt', headers, statusCode(304, done));
}
);
});
it('should set max age resources which are passed to the default static content provider', function(done) {
request('/tomg.co.png', {},
function(err, res, data) {
if (err) throw err;
assert.equal(res.statusCode, 200);
assert.notEqual(res.headers['cache-control'].indexOf('max-age=604800'), -1);
done();
}
);
});
it('should allow normal traversal', function(done) {
request('/nom/../tomg.co.png', {},
function(err, res, data) {
if (err) throw err;
assert.equal(res.statusCode, 200);
assert.deepEqual(data, file('tomg.co.png'));
done();
}
);
});
it('should redirect on directories', function(done) {
request('/js', {}, statusCode(301, done));
});
it('should work for paths containing URI-encoded spaces', function(done) {
request('/space%20the%20final%20frontier/tomg.co.png', { 'Accept-Encoding': 'gzip' }, statusCode(200, done));
});
it('should not let the user access files outside of the static directory (urlencoded)', function(done) {
request('/../test-static.js', { 'Accept-Encoding': 'gzip' }, statusCode(403, done));
});
it('should not let the user access files outside of the static directory', function(done) {
request('/%2e%2e/test-static.js', { 'Accept-Encoding': 'gzip' }, statusCode(403, done));
});
it('should not let the user access files from root of file system', function(done) {
request('/etc/password', { 'Accept-Encoding': 'gzip' }, statusCode(404, done));
});
it('should serve index.html for directories (if found)', function(done) {
request('/index_test/', { 'Accept-Encoding': 'gzip' },
function(err, res, data) {
if (err) throw err;
assert.equal(res.statusCode, 200);
// assert.equal(res.headers['content-length'], '616');
done();
}
);
});
});