Commit ead7567d authored by indexzero's avatar indexzero

[api] Updated http-proxy to work with vows

parent 30b68c15
...@@ -45,14 +45,14 @@ exports.NodeProxy.prototype = { ...@@ -45,14 +45,14 @@ exports.NodeProxy.prototype = {
this.events = []; this.events = [];
this.onData = function () { this.onData = function () {
self.events.push(["data"].concat(self.toArray(arguments))); self.events.push(['data'].concat(self.toArray(arguments)));
}; };
this.onEnd = function () { this.onEnd = function () {
self.events.push(["end"].concat(self.toArray(arguments))); self.events.push(['end'].concat(self.toArray(arguments)));
}; };
req.addListener("data", this.onData); req.addListener('data', this.onData);
req.addListener("end", this.onEnd); req.addListener('end', this.onEnd);
}, },
proxyRequest: function (server, port, req, res) { proxyRequest: function (server, port, req, res) {
...@@ -67,45 +67,45 @@ exports.NodeProxy.prototype = { ...@@ -67,45 +67,45 @@ exports.NodeProxy.prototype = {
var reverse_proxy = c.request(req.method, req.url, req.headers); var reverse_proxy = c.request(req.method, req.url, req.headers);
// Add a listener for the connection timeout event // Add a listener for the connection timeout event
reverse_proxy.connection.addListener('error', function(err) { reverse_proxy.connection.addListener('error', function (err) {
res.writeHead(200, {'Content-Type': 'text/plain'}); res.writeHead(200, {'Content-Type': 'text/plain'});
if(req.method !== 'HEAD') { if(req.method !== 'HEAD') {
res.write('Not a HEAD request'); res.write('An error has occurred: ' + sys.puts(JSON.stringify(err)));
} }
res.end(); res.end();
}); });
// Add a listener for the reverse_proxy response event // Add a listener for the reverse_proxy response event
reverse_proxy.addListener("response", function (response) { reverse_proxy.addListener('response', function (response) {
// Set the response headers of the client response // Set the response headers of the client response
res.writeHead(response.statusCode, response.headers); res.writeHead(response.statusCode, response.headers);
// Add event handler for the proxied response in chunks // Add event handler for the proxied response in chunks
response.addListener("data", function (chunk) { response.addListener('data', function (chunk) {
if(req.method !== 'HEAD') { if(req.method !== 'HEAD') {
res.write(chunk, 'binary'); res.write(chunk, 'binary');
this.body += chunk; self.body += chunk;
} }
}); });
// Add event listener for end of proxied response // Add event listener for end of proxied response
response.addListener("end", function () { response.addListener('end', function () {
// Remark: Emit the end event for testability
self.emitter.emit('end', null, self.body);
res.end(); res.end();
}); });
}); });
// Chunk the client request body as chunks from the proxied request come in // Chunk the client request body as chunks from the proxied request come in
req.addListener("data", function (chunk) { req.addListener('data', function (chunk) {
reverse_proxy.write(chunk, 'binary'); reverse_proxy.write(chunk, 'binary');
}) })
// At the end of the client request, we are going to stop the proxied request // At the end of the client request, we are going to stop the proxied request
req.addListener("end", function () { req.addListener('end', function () {
// Remark: Emit the end event for testability
self.emitter.emit('something', self.body);
reverse_proxy.end(); reverse_proxy.end();
}); });
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
var vows = require('vows'), var vows = require('vows'),
sys = require('sys'), sys = require('sys'),
eyes = require('eyes'),
assert = require('assert'), assert = require('assert'),
http = require('http'); http = require('http');
...@@ -19,7 +20,7 @@ var NodeProxy = require('node-proxy').NodeProxy; ...@@ -19,7 +20,7 @@ var NodeProxy = require('node-proxy').NodeProxy;
// Simple 'hello world' response for test purposes // Simple 'hello world' response for test purposes
// //
var helloWorld = function(req, res) { var helloWorld = function(req, res) {
res.sendHeader(200, {'Content-Type': 'text/plain'}); res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('hello world') res.write('hello world')
res.end(); res.end();
}; };
...@@ -54,22 +55,20 @@ var startProxyTest = function () { ...@@ -54,22 +55,20 @@ var startProxyTest = function () {
return proxy; return proxy;
}; };
var proxy = startProxyTest();
proxy.emitter.addListener('something', function (body) {
sys.puts(body);
})
/*vows.describe('node-proxy').addBatch({ vows.describe('node-proxy').addBatch({
"When an incoming request is proxied to the helloNode server" : { "When an incoming request is proxied to the helloNode server" : {
topic: function () { topic: function () {
// Create the proxy and start listening
var proxy = startProxyTest(); var proxy = startProxyTest();
proxy.emitter.addListener('end', this.callback); proxy.emitter.addListener('end', this.callback);
var client = http.createClient(8080, '127.0.0.1'); var client = http.createClient(8080, '127.0.0.1');
client.request('GET', '/'); var request = client.request('GET', '/');
request.end();
}, },
"it should received 'hello world'": function (num) { "it should received 'hello world'": function (err, body) {
sys.puts('got callback'); assert.equal(body, 'hello world');
//assert.equal(body, 'hello world');
} }
} }
}).export(module);*/ }).export(module);
\ No newline at end of file \ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment