mirror of
https://github.com/thinkjs/thinkjs.git
synced 2026-01-18 14:26:56 +00:00
1574 lines
49 KiB
JavaScript
1574 lines
49 KiB
JavaScript
'use strict';
|
|
|
|
var assert = require('assert');
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var querystring = require('querystring');
|
|
var EventEmitter = require('events').EventEmitter;
|
|
var Socket = require('net').Socket;
|
|
var IncomingMessage = require('http').IncomingMessage;
|
|
var muk = require('muk');
|
|
|
|
var thinkjs = require('../../lib/index.js');
|
|
new thinkjs().load();
|
|
|
|
|
|
var Http = think.safeRequire(path.resolve(__dirname, '../../lib/core/http.js'));
|
|
|
|
var localeIp = '127.0.0.1';
|
|
function noop(data) {
|
|
return data;
|
|
}
|
|
function getDefaultHttp(data) {
|
|
data = data || {};
|
|
if (think.isString(data)) {
|
|
if (data[0] === '{') {
|
|
data = JSON.parse(data);
|
|
} else if (/^[\w]+\=/.test(data)) {
|
|
data = querystring.parse(data);
|
|
} else {
|
|
data = {
|
|
url: data
|
|
};
|
|
}
|
|
}
|
|
var url = data.url || '';
|
|
if (url.indexOf('/') !== 0) {
|
|
url = '/' + url;
|
|
}
|
|
var req = {
|
|
httpVersion: '1.1',
|
|
method: (data.method || 'GET').toUpperCase(),
|
|
url: url,
|
|
headers: think.extend({
|
|
host: data.host || localeIp
|
|
}, data.headers),
|
|
connection: {
|
|
remoteAddress: data.ip || localeIp
|
|
}
|
|
};
|
|
var res = {
|
|
end: data.end || data.close || noop,
|
|
write: data.write || data.send || noop,
|
|
headers: {},
|
|
setHeader: function(name, value) {
|
|
this.headers[name] = value;
|
|
},
|
|
setTimeout: noop,
|
|
connection: {
|
|
remoteAddress: data.ip || localeIp
|
|
}
|
|
};
|
|
if (data.params) {
|
|
req.params = data.params;
|
|
}
|
|
return {
|
|
req: req,
|
|
res: res
|
|
};
|
|
}
|
|
|
|
think.APP_PATH = path.dirname(path.dirname(__dirname)) + think.sep + 'testApp';
|
|
|
|
describe('core/http.js', function() {
|
|
it('is EventEmitter instance, false', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&48');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http instanceof EventEmitter, false);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('response timeout', function(done) {
|
|
var timeoutHttp = getDefaultHttp('/index/index?k=timeout');
|
|
think.config('timeout', 0.01);
|
|
muk(think, 'log', function(){})
|
|
timeoutHttp.res.setTimeout = function(delay, fn) {
|
|
done();
|
|
setTimeout(fn, delay);
|
|
};
|
|
var instance = new Http(timeoutHttp.req, timeoutHttp.res);
|
|
instance.run();
|
|
think.config('timeout', 10);
|
|
});
|
|
it('response timeout false', function(done) {
|
|
var timeoutHttp = getDefaultHttp('/index/index?k=timeout');
|
|
think.config('timeout', 0);
|
|
muk(think, 'log', function(){});
|
|
var flag = false;
|
|
timeoutHttp.res.setTimeout = function(delay, fn) {
|
|
flag = true;
|
|
setTimeout(fn, delay);
|
|
};
|
|
var instance = new Http(timeoutHttp.req, timeoutHttp.res);
|
|
instance.run().then(function(){
|
|
assert.equal(flag, false)
|
|
done();
|
|
});
|
|
think.config('timeout', 10);
|
|
});
|
|
|
|
it('parse pathname /', function(done) {
|
|
var defaultHttp = getDefaultHttp('/');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.pathname, '/');
|
|
done();
|
|
});
|
|
});
|
|
it('parse pathname /', function(done) {
|
|
var defaultHttp = getDefaultHttp({
|
|
url: '/',
|
|
headers: {
|
|
host: 'test.com:1234'
|
|
}
|
|
});
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.pathname, '/');
|
|
assert.deepEqual(http.hostname, 'test.com')
|
|
done();
|
|
});
|
|
});
|
|
it('parse pathname', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index/name/w%2Fww');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.pathname, 'index/index/name/w%2Fww');
|
|
done();
|
|
});
|
|
});
|
|
it('parse pathname 1', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/w%2Fww');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.pathname, 'index/w%2Fww');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('hasPayload', function() {
|
|
var defaultHttp = getDefaultHttp({
|
|
url: '/',
|
|
headers: {
|
|
|
|
}
|
|
});
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
var data = instance.hasPayload();
|
|
assert.equal(data, false)
|
|
});
|
|
it('hasPayload transfer-encoding', function() {
|
|
var defaultHttp = getDefaultHttp({
|
|
url: '/',
|
|
headers: {
|
|
'transfer-encoding': 'gzip'
|
|
}
|
|
});
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
var data = instance.hasPayload();
|
|
assert.equal(data, true)
|
|
});
|
|
it('hasPayload content-length', function() {
|
|
var defaultHttp = getDefaultHttp({
|
|
url: '/',
|
|
headers: {
|
|
'content-length': 100
|
|
}
|
|
});
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
var data = instance.hasPayload();
|
|
assert.equal(data, true)
|
|
});
|
|
|
|
|
|
|
|
it('GET, query', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&1');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.get(), { name: 'maxzhang', '1': '' });
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('GET, set', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&2');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.get({ name: 'thinkjs' });
|
|
assert.equal(http.get('name'), 'thinkjs');
|
|
done();
|
|
});
|
|
});
|
|
it('GET, get multi', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&2');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.get({ name: 'thinkjs', test: 'aaa', dd: 'www' });
|
|
assert.deepEqual(http.get('name,test'), {name: 'thinkjs', test: 'aaa'});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('param', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&3');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.param('name'), 'maxzhang');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('get headers', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&4');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.header(), { host: '127.0.0.1' });
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('get special header', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&5');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.header('user-agent'), '');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('get type', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&6');
|
|
var req = think.extend({}, defaultHttp.req, {
|
|
headers: {
|
|
'content-type': 'application/json'
|
|
}
|
|
})
|
|
var instance = new Http(req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.type(), 'application/json');
|
|
done();
|
|
}).catch(function(err) {
|
|
console.log(err.stack)
|
|
});
|
|
});
|
|
|
|
it('get type, _contentTypeIsSend', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&7');
|
|
var req = think.extend({}, defaultHttp.req, {
|
|
headers: {
|
|
'content-type': 'text/html'
|
|
}
|
|
})
|
|
var instance = new Http(req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._contentTypeIsSend = true;
|
|
http.type('application/json');
|
|
assert.equal(http.type(), 'text/html');
|
|
done();
|
|
}).catch(function(err){
|
|
console.log(err.stack)
|
|
});
|
|
});
|
|
|
|
it('set type', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&8');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req.headers = {
|
|
'content-type': 'text/html'
|
|
};
|
|
instance.run().then(function(http) {
|
|
http.type('application/json');
|
|
assert.equal(http.res.headers['Content-Type'].indexOf('application/json') !== -1, true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set type, lookup mimetype', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&9');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req.headers = {
|
|
'content-type': 'text/html'
|
|
};
|
|
instance.run().then(function(http) {
|
|
http.type('json');
|
|
assert.equal(http.res.headers['Content-Type'].indexOf('application/json') !== -1, true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('get referrer', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&10');
|
|
var req = think.extend({}, defaultHttp.req, {
|
|
headers: {
|
|
'referrer': 'http://www.thinkjs.org/index?name=maxzhang'
|
|
}
|
|
})
|
|
var instance = new Http(req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.referrer('www.thinkjs.org'), 'www.thinkjs.org');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('isAjax 1', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&11');
|
|
var req = think.extend({}, defaultHttp.req, {
|
|
headers: {
|
|
'x-requested-with': 'XMLHttpRequest'
|
|
}
|
|
})
|
|
var instance = new Http(req, defaultHttp.res);
|
|
instance.req.method = 'POST';
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.isAjax(), true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('isAjax 2', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&12');
|
|
var req = think.extend({}, defaultHttp.req, {
|
|
headers: {
|
|
'x-requested-with': 'XMLHttpRequest'
|
|
},
|
|
method: 'POST'
|
|
})
|
|
var instance = new Http(req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.isAjax('GET'), false);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('ip', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&13');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.host = '127.0.0.1:8360';
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.ip(), '127.0.0.1');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('ip with socket', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&14');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.host = '127.0.0.1:8360';
|
|
http.req.socket = {
|
|
remoteAddress: '10.0.0.1'
|
|
};
|
|
assert.equal(http.ip(), '10.0.0.1');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('ip with connection', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&15');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.host = '127.0.0.1:8360';
|
|
http.req.connection = {
|
|
remoteAddress: '10.0.0.1'
|
|
};
|
|
assert.equal(http.ip(), '10.0.0.1');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('ip with ::', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&16');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.host = '127.0.0.1:8360';
|
|
http.req.connection = {
|
|
remoteAddress: '::ff:10.0.0.1'
|
|
};
|
|
assert.equal(http.ip(), '10.0.0.1');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('ip with x-real-ip', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&17');
|
|
var req = think.extend({}, defaultHttp.req, {
|
|
headers: {
|
|
'x-real-ip': '10.0.0.1'
|
|
}
|
|
})
|
|
var instance = new Http(req, defaultHttp.res);
|
|
think.config('proxy_on', true);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.ip(), '10.0.0.1');
|
|
think.config('proxy_on', false);
|
|
done();
|
|
}).catch(function(err){
|
|
console.log(err.stack)
|
|
});
|
|
});
|
|
|
|
it('ip with x-forwarded-for', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&18');
|
|
var req = think.extend({}, defaultHttp.req, {
|
|
headers: {
|
|
'x-forwarded-for': '10.0.0.1'
|
|
}
|
|
})
|
|
var instance = new Http(req, defaultHttp.res);
|
|
think.config('proxy_on', true);
|
|
instance.req.headers = {
|
|
'x-forwarded-for': '10.0.0.1'
|
|
};
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.ip(true), '10.0.0.1');
|
|
think.config('proxy_on', false);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('ip, is not ip', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&19');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
var fn = think.isIP;
|
|
think.isIP = function() { return false; };
|
|
instance.run().then(function(http) {
|
|
http.host = '127.0.0.1:8360';
|
|
http.req.connection = {
|
|
remoteAddress: '10.0.0.1'
|
|
};
|
|
assert.equal(http.ip(), '127.0.0.1');
|
|
think.isIP = fn;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set header', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&20');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.setHeader;
|
|
http.res.headersSent = false;
|
|
http.res.setHeader = function(name, value) {
|
|
assert.equal(name, 'name');
|
|
assert.equal(value, 'maxzhang');
|
|
http.res.setHeader = fn;
|
|
done();
|
|
};
|
|
http.header('name', 'maxzhang');
|
|
});
|
|
});
|
|
|
|
it('set header, headersSent', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&21');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.res.headersSent = true;
|
|
http.header('name', 'maxzhang');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set header, _contentTypeIsSend', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&22');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req.headers = {
|
|
'content-type': 'text/html'
|
|
};
|
|
instance.run().then(function(http) {
|
|
http.res.headersSent = false;
|
|
http.header('Content-Type', 'application/json');
|
|
http.header('Content-Type', 'text/html');
|
|
assert.equal(http.res.headers['Content-Type'].indexOf('application/json') !== -1, true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set status', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&23');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.res.headersSent = false;
|
|
http.status(302);
|
|
assert.equal(http.res.statusCode, 302);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set status return', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&23');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.res.headersSent = false;
|
|
var data = http.status(302);
|
|
assert.equal(http.res.statusCode, 302);
|
|
assert.equal(data, http);
|
|
done();
|
|
});
|
|
});
|
|
it('set status default', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&24');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.res.headersSent = false;
|
|
http.status();
|
|
assert.equal(http.res.statusCode, 200);
|
|
done();
|
|
});
|
|
});
|
|
it('get file 1', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&24');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._file = {image: {name: 'welefen'}}
|
|
var data = http.file('image');
|
|
assert.deepEqual(data, {name: 'welefen'})
|
|
done();
|
|
});
|
|
});
|
|
it('get file 2', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&24');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._file = {image: {name: 'welefen'}}
|
|
var data = http.file('image');
|
|
data.name = 'suredy';
|
|
assert.deepEqual(http._file, {image: {name: 'welefen'}})
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('get user agent', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang');
|
|
var req = think.extend({}, defaultHttp.req, {
|
|
headers: {
|
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2478.0 Safari/537.36'
|
|
}
|
|
})
|
|
var instance = new Http(req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.userAgent(), 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2478.0 Safari/537.36');
|
|
done();
|
|
})
|
|
});
|
|
|
|
it('get empty user agent', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&25');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.userAgent(), '');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set cookie', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&26');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.cookie('name', 'maxzhang');
|
|
assert.deepEqual(http._sendCookie, {
|
|
'name': {
|
|
'path': '/',
|
|
'domain': '',
|
|
'httponly': false,
|
|
'secure': false,
|
|
'timeout': 0,
|
|
'name': 'name',
|
|
'value': 'maxzhang'
|
|
}
|
|
});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set cookie with timeout', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&27');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.cookie('name', 'maxzhang', 10000);
|
|
assert.equal(http._sendCookie.name.expires !== undefined, true);
|
|
assert.equal(http._sendCookie.name.expires instanceof Date, true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set cookie with timeout 1', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&28');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var opts = {
|
|
timeout: 20000
|
|
};
|
|
http.cookie('name', 'maxzhang', opts);
|
|
http.cookie('name', 'maxzhang', opts);
|
|
assert.equal(http._sendCookie.name.expires !== undefined, true);
|
|
assert.equal(http._sendCookie.name.timeout, 20000);
|
|
assert.equal(http._sendCookie.name.expires instanceof Date, true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set cookie, remove cookie', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&29');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.cookie('name', null);
|
|
assert.equal(http._sendCookie.name.expires !== undefined, true);
|
|
assert.equal(http._sendCookie.name.expires instanceof Date, true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('set cookie, with options', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&30');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.cookie('name', 'maxzhang', {
|
|
'path': '/xxx/',
|
|
'domain': 'thinkjs.org'
|
|
});
|
|
assert.deepEqual(http._sendCookie, {
|
|
'name': {
|
|
'path': '/xxx/',
|
|
'domain': 'thinkjs.org',
|
|
'httponly': false,
|
|
'secure': false,
|
|
'timeout': 0,
|
|
'name': 'name',
|
|
'value': 'maxzhang'
|
|
}
|
|
});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('send cookie', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&31');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.cookie('name', 'maxzhang', {
|
|
'path': '/xxx/',
|
|
'domain': 'thinkjs.org'
|
|
});
|
|
var fn = http.res.setHeader;
|
|
http.res.headersSent = false;
|
|
http.res.setHeader = function(name, value) {
|
|
assert.equal(name, 'Set-Cookie');
|
|
assert.deepEqual(value, ['name=maxzhang; Domain=thinkjs.org; Path=/xxx/']);
|
|
assert.deepEqual(http._sendCookie, {
|
|
'name': {
|
|
'path': '/xxx/',
|
|
'domain': 'thinkjs.org',
|
|
'httponly': false,
|
|
'secure': false,
|
|
'timeout': 0,
|
|
'name': 'name',
|
|
'value': 'maxzhang'
|
|
}
|
|
});
|
|
http.res.setHeader = fn;
|
|
done();
|
|
};
|
|
http.cookie(true);
|
|
});
|
|
});
|
|
|
|
it('send cookie empty', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&32');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.cookie(true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('send cookie multi', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&33');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.cookie('name', 'maxzhang', {
|
|
'path': '/xxx/',
|
|
'domain': 'thinkjs.org'
|
|
});
|
|
http.cookie('value', 'suredy');
|
|
var fn = http.res.setHeader;
|
|
http.res.headersSent = false;
|
|
http.res.setHeader = function(name, value) {
|
|
assert.equal(name, 'Set-Cookie');
|
|
assert.deepEqual(value, ['name=maxzhang; Domain=thinkjs.org; Path=/xxx/', 'value=suredy; Path=/']);
|
|
assert.deepEqual(http._sendCookie, {
|
|
'name': {
|
|
'path': '/xxx/',
|
|
'domain': 'thinkjs.org',
|
|
'httponly': false,
|
|
'secure': false,
|
|
'timeout': 0,
|
|
'name': 'name',
|
|
'value': 'maxzhang'
|
|
},
|
|
'value': {
|
|
'path': '/',
|
|
'domain': '',
|
|
'httponly': false,
|
|
'secure': false,
|
|
'timeout': 0,
|
|
'name': 'value',
|
|
'value': 'suredy'
|
|
}
|
|
});
|
|
http.res.setHeader = fn;
|
|
done();
|
|
};
|
|
http.cookie(true);
|
|
});
|
|
});
|
|
|
|
it('redirect empty', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&34');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.setHeader;
|
|
muk(think, 'log', function(){})
|
|
http.res.setHeader = function(name, value) {
|
|
assert.equal(name, 'Location');
|
|
assert.equal(value, '/');
|
|
http.res.setHeader = fn;
|
|
};
|
|
var fn1 = http.res.end;
|
|
http.res.end = function() {
|
|
http.res.end = fn1;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
http.redirect();
|
|
assert.equal(http.res.statusCode, 302);
|
|
});
|
|
});
|
|
|
|
it('redirect url', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&35');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.setHeader;
|
|
http.res.setHeader = function(name, value) {
|
|
assert.equal(name, 'Location');
|
|
assert.equal(value, 'http://www.thinkjs.org');
|
|
http.res.setHeader = fn;
|
|
};
|
|
var fn1 = http.res.end;
|
|
muk(think, 'log', function(){})
|
|
http.res.end = function() {
|
|
http.res.end = fn1;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
http.redirect('http://www.thinkjs.org', 301);
|
|
assert.equal(http.res.statusCode, 301);
|
|
});
|
|
});
|
|
|
|
it('sendTime empty', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&36');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.setHeader;
|
|
http.res.setHeader = function(name) {
|
|
assert.equal(name, 'X-EXEC-TIME');
|
|
http.res.setHeader = fn;
|
|
done();
|
|
};
|
|
http.sendTime();
|
|
});
|
|
});
|
|
|
|
it('sendTime name', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.setHeader;
|
|
http.res.setHeader = function(name) {
|
|
assert.equal(name, 'X-TEST');
|
|
http.res.setHeader = fn;
|
|
done();
|
|
};
|
|
http.sendTime('TEST');
|
|
});
|
|
});
|
|
it('get post data, all', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._post = {};
|
|
var data = http.post();
|
|
assert.deepEqual(data, {});
|
|
done();
|
|
});
|
|
});
|
|
it('get post data, all 2', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._post = {a: ['EXP', 2]};
|
|
var data = http.post();
|
|
assert.deepEqual(data, {
|
|
a: ['EXP ', 2]
|
|
});
|
|
http._post = {};
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('get post data, all 3', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._post = {a: {EXP: 2}};
|
|
var data = http.post();
|
|
assert.deepEqual(data, {
|
|
a: {'EXP ': 2}
|
|
});
|
|
http._post = {};
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('get get data, all 2', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._get = {a: ['EXP', 2]};
|
|
var data = http.get();
|
|
assert.deepEqual(data, {
|
|
a: ['EXP ', 2]
|
|
});
|
|
http._get = {};
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('get get data, all 3', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._get = {a: {EXP: 2}};
|
|
var data = http.get();
|
|
assert.deepEqual(data, {
|
|
a: {'EXP ': 2}
|
|
});
|
|
http._get = {};
|
|
done();
|
|
});
|
|
});
|
|
|
|
|
|
it('get post data, name', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._post = {name: 'test'};
|
|
var data = http.post('name');
|
|
assert.deepEqual(data, 'test');
|
|
done();
|
|
});
|
|
});
|
|
it('get post data, name, multi', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._post = {name: 'test', aaa: 'b'};
|
|
var data = http.post('name,aaa');
|
|
assert.deepEqual(data, {name: 'test', 'aaa': 'b'});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('get post data, 0', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._post = {name: 0};
|
|
var data = http.post('name');
|
|
assert.deepEqual(data, 0);
|
|
done();
|
|
});
|
|
});
|
|
it('get post data, false', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._post = {name: false};
|
|
var data = http.post('name');
|
|
assert.deepEqual(data, false);
|
|
done();
|
|
});
|
|
});
|
|
it('get post data, undefined', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&37');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http._post = {name: 0};
|
|
var data = http.post('name111');
|
|
assert.deepEqual(data, '');
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('write empty', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&38');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
assert.equal(http.write(), undefined);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('write array', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&39');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.res.write = function(content) {
|
|
assert.equal(content, '[1,2,3]');
|
|
http.res.write = fn;
|
|
done();
|
|
};
|
|
http.write([1, 2, 3]);
|
|
});
|
|
});
|
|
|
|
it('write obj', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&40');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.res.write = function(content) {
|
|
assert.equal(content, '{"name":"maxzhang"}');
|
|
http.res.write = fn;
|
|
done();
|
|
};
|
|
http.write({
|
|
name: 'maxzhang'
|
|
});
|
|
});
|
|
});
|
|
|
|
it('write str', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&41');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.res.write = function(content) {
|
|
assert.equal(content, 'maxzhang');
|
|
http.res.write = fn;
|
|
done();
|
|
};
|
|
http.write('maxzhang');
|
|
});
|
|
});
|
|
|
|
it('write str', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&42');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
var buffer = new Buffer(10);
|
|
http.res.write = function(content) {
|
|
assert.equal(content, buffer);
|
|
http.res.write = fn;
|
|
done();
|
|
};
|
|
http.write(buffer);
|
|
});
|
|
});
|
|
|
|
it('write true', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&43');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.res.write = function(content) {
|
|
assert.equal(content, 'true');
|
|
http.res.write = fn;
|
|
done();
|
|
};
|
|
http.write(true);
|
|
});
|
|
});
|
|
|
|
it('write no encoding', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.res.write = function(content) {
|
|
assert.equal(content, 'true');
|
|
http.res.write = fn;
|
|
done();
|
|
};
|
|
http.write(true);
|
|
});
|
|
});
|
|
|
|
it('success', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&44');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.res.write = function(content) {
|
|
assert.equal(content, '{"errno":0,"errmsg":"success","data":{"name":"thinkjs"}}');
|
|
http.res.write = fn;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
|
|
};
|
|
http.success({ 'name': 'thinkjs' }, 'success');
|
|
});
|
|
});
|
|
|
|
it('fail', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&2');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.res.write = function(content) {
|
|
assert.equal(content, '{"errno":500,"errmsg":"error","data":{"name":"thinkjs"}}');
|
|
http.res.write = fn;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
http.fail(500, 'error', { 'name': 'thinkjs' });
|
|
});
|
|
});
|
|
|
|
it('fail with object', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&45');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.res.write = function(content) {
|
|
assert.equal(content, '{"errno":500,"errmsg":"error","data":{"name":"thinkjs"}}');
|
|
http.res.write = fn;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
http.fail({
|
|
errno: 500,
|
|
errmsg: 'error',
|
|
data: { 'name': 'thinkjs' }
|
|
});
|
|
});
|
|
});
|
|
|
|
it('jsonp', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&3');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.get('callback', 'callback1');
|
|
http.res.write = function(content) {
|
|
assert.equal(content, 'callback1({"name":"thinkjs"})');
|
|
http.res.write = fn;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
http.jsonp({ 'name': 'thinkjs' });
|
|
});
|
|
});
|
|
|
|
it('jsonp without callback', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&46');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.res.write = function(content) {
|
|
assert.equal(content, '{"name":"thinkjs"}');
|
|
http.res.write = fn;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
http.jsonp({ 'name': 'thinkjs' });
|
|
});
|
|
});
|
|
|
|
it('jsonp, empty data', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&47');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
var fn = http.res.write;
|
|
http.get('callback', 'callback1');
|
|
http.res.write = function(content) {
|
|
assert.equal(content, 'callback1()');
|
|
http.res.write = fn;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
http.jsonp();
|
|
});
|
|
});
|
|
|
|
it('get cookie from set', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index?name=maxzhang&47');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.run().then(function(http) {
|
|
http.cookie('wwwwww', 'sss');
|
|
var value = http.cookie('wwwwww');
|
|
assert.equal(value, 'sss');
|
|
done();
|
|
});
|
|
});
|
|
|
|
/*
|
|
describe('HTTP POST', function() {
|
|
it('hasPostData false', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&4');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
assert.equal(instance.hasPostData(), false);
|
|
done();
|
|
});
|
|
|
|
it('hasPostData true', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&5');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.http.req.headers['transfer-encoding'] = 'gzip';
|
|
instance.run().then(function() {
|
|
assert.equal(instance.hasPostData(), true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('hasPostData true', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&6');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
delete instance.http.req.headers['transfer-encoding'];
|
|
instance.http.req.headers['content-length'] = 100;
|
|
assert.equal(instance.hasPostData(), true);
|
|
done();
|
|
});
|
|
|
|
it('common post, no data', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&7');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage();
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.method = 'POST';
|
|
instance.run().then(function() {
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('common post, set POST data', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&8');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.method = 'POST';
|
|
instance.run().then(function(http) {
|
|
http.post({ name: 'maxzhang' });
|
|
assert.deepEqual(http.post(), {
|
|
name: 'maxzhang'
|
|
});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('common post with data', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&9');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.req.emit('data', new Buffer('name=maxzhang'));
|
|
instance.req.emit('end');
|
|
});
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.post(), {
|
|
name: 'maxzhang'
|
|
});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('common post with data1', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&10');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.req.emit('data', new Buffer('name=maxzhang&value=suredy'));
|
|
instance.req.emit('end');
|
|
});
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.post(), {
|
|
name: 'maxzhang',
|
|
value: 'suredy'
|
|
});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('common post with json data', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&11');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip',
|
|
'content-type': 'application/json'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.req.emit('data', new Buffer('{"name":"maxzhang"}'));
|
|
instance.req.emit('end');
|
|
});
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.post(), {
|
|
name: 'maxzhang'
|
|
});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('common post, parse querystring error', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&12');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.req.emit('data', new Buffer('name=maxzhang'));
|
|
instance.req.emit('end');
|
|
});
|
|
var fn = querystring.parse;
|
|
querystring.parse = function() {
|
|
throw new Error('test');
|
|
};
|
|
instance.res.end = function() {
|
|
assert.equal(instance.res.statusCode, 400);
|
|
querystring.parse = fn;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
instance.run();
|
|
});
|
|
|
|
it('common post error', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&13');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip'
|
|
};
|
|
instance.req.method = 'POST';
|
|
instance.res.statusCode = 200;
|
|
process.nextTick(function() {
|
|
instance.req.emit('error', new Error('test'));
|
|
});
|
|
think.config('post.max_fields', 150);
|
|
think.config('post.max_fields_size', 1000);
|
|
instance.run();
|
|
instance.res.end = function() {
|
|
assert.equal(instance.res.statusCode, 400);
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
});
|
|
|
|
it('common post.max_fields', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&14');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
var arr = [];
|
|
for (var i = 0; i < 100; i++) {
|
|
arr.push(Math.random() + '=' + Date.now());
|
|
}
|
|
instance.req.emit('data', new Buffer(arr.join('&')));
|
|
instance.req.emit('end');
|
|
});
|
|
think.config('post.max_fields', 50);
|
|
var fn = instance.res.end;
|
|
instance.res.statusCode = 200;
|
|
instance.res.end = function() {
|
|
assert.equal(instance.res.statusCode, 400);
|
|
instance.res.end = fn;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
instance.run();
|
|
});
|
|
|
|
it('common post.max_fields_size', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&15');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
var arr = [];
|
|
for (var i = 0; i < 40; i++) {
|
|
arr.push(Math.random() + '=' + (new Array(1000).join(Math.random() + '')));
|
|
}
|
|
instance.req.emit('data', new Buffer(arr.join('&')));
|
|
instance.req.emit('end');
|
|
});
|
|
think.config('post.max_fields', 50);
|
|
think.config('post.max_fields_size', 1000);
|
|
var fn = instance.res.end;
|
|
instance.res.statusCode = 200;
|
|
instance.res.end = function() {
|
|
assert.equal(instance.res.statusCode, 400);
|
|
instance.res.end = fn;
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 20)
|
|
};
|
|
instance.run();
|
|
});
|
|
|
|
it('file upload', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&16');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
var log = think.log;
|
|
think.log = function(){};
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip',
|
|
'content-type': 'multipart/form-data; boundary=maxzhang'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.form.emit('file', 'image', 'maxzhang');
|
|
instance.form.emit('close');
|
|
});
|
|
think.config('post.max_fields', 150);
|
|
think.config('post.max_fields_size', 1000);
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.file(), {
|
|
image: 'maxzhang'
|
|
});
|
|
think.log = log;
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('file upload, same name files', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&17');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip',
|
|
'content-type': 'multipart/form-data; boundary=maxzhang'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.form.emit('file', 'image', 'maxzhang1');
|
|
instance.form.emit('file', 'image', 'maxzhang2');
|
|
instance.form.emit('close');
|
|
});
|
|
think.config('post.max_fields', 150);
|
|
think.config('post.max_fields_size', 1000);
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.file(), {
|
|
image: ['maxzhang1', 'maxzhang2']
|
|
});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('file upload, field', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&18');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip',
|
|
'content-type': 'multipart/form-data; boundary=maxzhang'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.form.emit('field', 'image', 'maxzhang');
|
|
instance.form.emit('close');
|
|
});
|
|
think.config('post.max_fields', 150);
|
|
think.config('post.max_fields_size', 1000);
|
|
instance.run().then(function(http) {
|
|
assert.deepEqual(http.post(), {
|
|
image: 'maxzhang'
|
|
});
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('file upload, error', function(done) {
|
|
muk(think, 'log', function(){})
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&19');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip',
|
|
'content-type': 'multipart/form-data; boundary=maxzhang'
|
|
};
|
|
instance.req.method = 'POST';
|
|
instance.res.statusCode = 200;
|
|
|
|
process.nextTick(function() {
|
|
instance.form.emit('error', new Error('test'));
|
|
});
|
|
think.config('post.max_fields', 150);
|
|
think.config('post.max_fields_size', 1000);
|
|
instance.run();
|
|
instance.res.end = function() {
|
|
assert.equal(instance.res.statusCode, 400);
|
|
setTimeout(function(){
|
|
muk.restore();
|
|
done();
|
|
}, 30)
|
|
};
|
|
});
|
|
|
|
it('file upload, clear tmp file', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&20');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
var log = think.log;
|
|
think.log = function(){};
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip',
|
|
'content-type': 'multipart/form-data; boundary=maxzhang'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.form.emit('file', 'image', 'maxzhang');
|
|
instance.form.emit('close');
|
|
});
|
|
think.config('post.max_fields', 150);
|
|
think.config('post.max_fields_size', 1000);
|
|
var fn = fs.unlink;
|
|
var fn1 = think.isFile;
|
|
think.isFile = function() { return true; };
|
|
fs.unlink = function(filepath) {
|
|
fs.unlink = fn;
|
|
think.isFile = fn1;
|
|
think.log = log;
|
|
done();
|
|
};
|
|
instance.run().then(function(http) {
|
|
http._end();
|
|
});
|
|
});
|
|
|
|
|
|
it('ajax file upload', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post&21');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip',
|
|
'x-filename': '1.js'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.req.emit('data', new Buffer('maxzhang'));
|
|
instance.req.emit('end');
|
|
});
|
|
think.config('post.max_fields', 150);
|
|
think.config('post.max_fields_size', 1000);
|
|
instance.run().then(function(http) {
|
|
var file = http.file().file;
|
|
assert.equal(file.originalFilename, '1.js');
|
|
assert.equal(file.size, 8);
|
|
assert.equal(file.path.indexOf('.js') > -1, true);
|
|
done();
|
|
});
|
|
});
|
|
|
|
/*
|
|
it('ajax file upload error', function(done) {
|
|
var defaultHttp = getDefaultHttp('/index/index&method=post');
|
|
var instance = new Http(defaultHttp.req, defaultHttp.res);
|
|
instance.req = new IncomingMessage(new Socket());
|
|
instance.req.url = defaultHttp.req.url;
|
|
instance.req.headers = {
|
|
'transfer-encoding': 'gzip',
|
|
'x-filename': '1.js'
|
|
};
|
|
instance.req.method = 'POST';
|
|
process.nextTick(function() {
|
|
instance.req.emit('error', new Error('test'));
|
|
});
|
|
think.config('post.max_fields', 150);
|
|
think.config('post.max_fields_size', 1000);
|
|
instance.run();
|
|
instance.res.end = function() {
|
|
assert.equal(instance.res.statusCode, 400);
|
|
done();
|
|
};
|
|
});
|
|
*/
|
|
|
|
|
|
//});
|
|
|
|
});
|