bot18
Version:
A high-frequency cryptocurrency trading bot by Zenbot creator @carlos8f
218 lines (204 loc) • 7.29 kB
JavaScript
assert = require('assert');
util = require('util');
http = require('http');
path = require('path');
fs = require('fs');
dish = require('./');
listen = function (fn) {
var server = http.createServer();
server.listen(0, function () {
fn(server, server.address().port);
});
};
request = require('superagent');
describe('basic test', function () {
var server, baseUrl;
before(function (done) {
listen(function (s, port) {
server = s;
baseUrl = 'http://localhost:' + port;
done();
});
});
it('serve a string', function (done) {
server.once('request', dish('hello :D'));
request
.get(baseUrl + '/')
.set('Accept-Encoding', 'deflate')
.end(function (err, res) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-length'], 8);
// etag should be sha1
assert.equal(res.headers['etag'], '18eddd4897daa9d6096014988cd07f7b688ac46f');
// last-modified should be set
assert(res.headers['last-modified']);
// content-type should be default
assert.equal(res.headers['content-type'], 'application/octet-stream');
// proper content
var data = '';
res.on('data', function (chunk) {
data += chunk;
});
res.once('end', function () {
assert.equal(data, 'hello :D');
done();
});
});
});
it('override content-type', function (done) {
server.once('request', dish('<partytime>carlos</partytime>', {headers: {'Content-Type': 'text/html'}}));
request
.get(baseUrl + '/')
.set('Accept-Encoding', 'deflate')
.end(function (err, res) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-length'], 29);
// etag should be sha1
assert.equal(res.headers['etag'], '0280e0568eb75bdecb28837d0ac3082140817468');
// last-modified should be set
assert(res.headers['last-modified']);
// content-type should be default
assert.equal(res.headers['content-type'], 'text/html');
// proper content
assert.equal(res.text, '<partytime>carlos</partytime>');
done();
});
});
it('serve a text file', function (done) {
server.once('request', dish.file('hello.txt'));
request
.get(baseUrl + '/')
.set('If-Modified-Since', 'Fri, 18 Jan 2013 20:50:19 GMT')
.set('If-None-Match', 'c01b3f9f12197efbde09ae7870fb39d092a6f6f9')
.set('Accept-Encoding', 'deflate')
.end(function (err, res) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-length'], 20);
// etag should be sha1
assert.equal(res.headers['etag'], '430ce34d020724ed75a196dfc2ad67c77772d169');
// last-modified should be set
assert(res.headers['last-modified']);
// content-type should be text/plain
assert.equal(res.headers['content-type'], 'text/plain');
// proper content
assert.equal(res.text, 'hello world!');
done();
});
});
it('serve an image', function (done) {
server.once('request', dish.file('pirate_flag.png'));
request
.get(baseUrl + '/')
.set('Accept-Encoding', 'gzip, deflate')
.end(function (err, res) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-length'], 15673);
// etag should be sha1
assert.equal(res.headers['etag'], 'c01b3f9f12197efbde09ae7870fb39d092a6f6f9');
// last-modified should be set
assert(res.headers['last-modified']);
// content-type should be text/plain
assert.equal(res.headers['content-type'], 'image/png');
// proper content
assert.deepEqual(res.body, fs.readFileSync('pirate_flag.png'))
done();
});
});
it('serve buffer', function (done) {
server.once('request', dish(fs.readFileSync('pirate_flag.png'), {headers: {'Content-Type': 'image/png'}}));
request
.get(baseUrl + '/')
.set('Accept-Encoding', 'gzip, deflate')
.end(function (err, res) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-length'], 15673);
// etag should be sha1
assert.equal(res.headers['etag'], 'c01b3f9f12197efbde09ae7870fb39d092a6f6f9');
// last-modified should be set
assert(res.headers['last-modified']);
// content-type should be text/plain
assert.equal(res.headers['content-type'], 'image/png');
// proper content
assert.deepEqual(res.body, fs.readFileSync('pirate_flag.png'));
done();
});
});
var lastModified, eTag;
it('serve gzipped', function (done) {
server.on('request', dish.file('hello.txt'));
request
.get(baseUrl + '/')
.set('Accept-Encoding', 'gzip, deflate')
.end(function (err, res) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-length'], 32);
// etag should be sha1
assert.equal(res.headers['etag'], '430ce34d020724ed75a196dfc2ad67c77772d169');
eTag = res.headers['etag'];
// last-modified should be set
assert(res.headers['last-modified']);
lastModified = res.headers['last-modified'];
// content-type should be text/plain
assert.equal(res.headers['content-type'], 'text/plain');
// proper content
assert.equal(res.text, 'hello world!');
done();
});
});
it('if-none-match', function (done) {
request
.get(baseUrl + '/')
.set('If-None-Match', eTag)
.set('Accept-Encoding', 'deflate')
.end(function (err, res) {
assert(err);
assert.equal(err.status, 304);
assert.equal(res.statusCode, 304);
assert(!res.text);
done();
});
});
it('if-modified-since', function (done) {
request
.get(baseUrl + '/')
.set('If-Modified-Since', lastModified)
.end(function (err, res) {
assert(err);
assert.equal(err.status, 304);
assert.equal(res.statusCode, 304);
assert(!res.text);
done();
});
});
it('serve 200 again', function (done) {
request
.get(baseUrl + '/')
.set('If-Modified-Since', 'Fri, 18 Jan 2013 20:50:19 GMT')
.set('If-None-Match', 'c01b3f9f12197efbde09ae7870fb39d092a6f6f9')
.set('Accept-Encoding', 'deflate')
.end(function (err, res) {
assert.ifError(err);
assert.equal(res.statusCode, 200);
assert.equal(res.headers['content-length'], 20);
// etag should be sha1
assert.equal(res.headers['etag'], '430ce34d020724ed75a196dfc2ad67c77772d169');
// last-modified should be set
assert(res.headers['last-modified']);
// content-type should be text/plain
assert.equal(res.headers['content-type'], 'text/plain');
// proper content
assert.equal(res.text, 'hello world!');
done();
});
});
it('shut down server', function (done) {
server.once('close', done);
server.close();
});
});