var assert = require('assert') , http = require('http') , request = require('../index') ; var numBasicRequests = 0; var basicServer = http.createServer(function (req, res) { console.error('Basic auth server: ', req.method, req.url); numBasicRequests++; var ok; if (req.headers.authorization) { if (req.headers.authorization == 'Basic ' + new Buffer('test:testing2').toString('base64')) { ok = true; } else if ( req.headers.authorization == 'Basic ' + new Buffer(':apassword').toString('base64')) { ok = true; } else { // Bad auth header, don't send back WWW-Authenticate header ok = false; } } else { // No auth header, send back WWW-Authenticate header ok = false; res.setHeader('www-authenticate', 'Basic realm="Private"'); } if (req.url == '/post/') { var expectedContent = 'data_key=data_value'; req.on('data', function(data) { assert.equal(data, expectedContent); console.log('received request data: ' + data); }); assert.equal(req.method, 'POST'); assert.equal(req.headers['content-length'], '' + expectedContent.length); assert.equal(req.headers['content-type'], 'application/x-www-form-urlencoded; charset=utf-8'); } if (ok) { console.log('request ok'); res.end('ok'); } else { console.log('status=401'); res.statusCode = 401; res.end('401'); } }); basicServer.listen(6767); var tests = [ function(next) { request({ 'method': 'GET', 'uri': 'http://localhost:6767/test/', 'auth': { 'user': 'test', 'pass': 'testing2', 'sendImmediately': false } }, function(error, res, body) { assert.equal(res.statusCode, 200); assert.equal(numBasicRequests, 2); next(); }); }, function(next) { // If we don't set sendImmediately = false, request will send basic auth request({ 'method': 'GET', 'uri': 'http://localhost:6767/test2/', 'auth': { 'user': 'test', 'pass': 'testing2' } }, function(error, res, body) { assert.equal(res.statusCode, 200); assert.equal(numBasicRequests, 3); next(); }); }, function(next) { request({ 'method': 'GET', 'uri': 'http://test:testing2@localhost:6767/test2/' }, function(error, res, body) { assert.equal(res.statusCode, 200); assert.equal(numBasicRequests, 4); next(); }); }, function(next) { request({ 'method': 'POST', 'form': { 'data_key': 'data_value' }, 'uri': 'http://localhost:6767/post/', 'auth': { 'user': 'test', 'pass': 'testing2', 'sendImmediately': false } }, function(error, res, body) { assert.equal(res.statusCode, 200); assert.equal(numBasicRequests, 6); next(); }); }, function(next) { assert.doesNotThrow( function() { request({ 'method': 'GET', 'uri': 'http://localhost:6767/allow_empty_user/', 'auth': { 'user': '', 'pass': 'apassword', 'sendImmediately': false } }, function(error, res, body ) { assert.equal(res.statusCode, 200); assert.equal(numBasicRequests, 8); next(); }); }) } ]; function runTest(i) { if (i < tests.length) { tests[i](function() { runTest(i + 1); }); } else { console.log('All tests passed'); basicServer.close(); } } runTest(0);