From d0d536c1e5a9a342694ffa5f14ef8fbe8dcfa8bd Mon Sep 17 00:00:00 2001 From: James Nylen Date: Wed, 16 Jan 2013 18:43:58 -0500 Subject: [PATCH] Add tests for basic and digest auth --- tests/run.js | 4 ++- tests/test-basic-auth.js | 66 +++++++++++++++++++++++++++++++++++++ tests/test-digest-auth.js | 69 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 tests/test-basic-auth.js create mode 100644 tests/test-digest-auth.js diff --git a/tests/run.js b/tests/run.js index d5d1ee840..45d28af60 100644 --- a/tests/run.js +++ b/tests/run.js @@ -4,10 +4,12 @@ var spawn = require('child_process').spawn ; var tests = [ - 'test-body.js' + 'test-basic-auth.js' + , 'test-body.js' , 'test-cookie.js' , 'test-cookiejar.js' , 'test-defaults.js' + , 'test-digest-auth.js' , 'test-errors.js' , 'test-form.js' , 'test-follow-all-303.js' diff --git a/tests/test-basic-auth.js b/tests/test-basic-auth.js new file mode 100644 index 000000000..0a42dfe9b --- /dev/null +++ b/tests/test-basic-auth.js @@ -0,0 +1,66 @@ +var assert = require('assert') + , http = require('http') + , request = require('../main') + ; + +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 { + // 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 (ok) { + console.log('request ok'); + res.end('ok'); + } else { + console.log('status=401'); + res.statusCode = 401; + res.end('401'); + } +}); + +basicServer.listen(6767); + +request({ + 'method': 'GET', + 'uri': 'http://localhost:6767/test/', + 'auth': { + 'user': 'test', + 'pass': 'testing2', + 'sendImmediately': false + } +}, function(error, response, body) { + assert.equal(response.statusCode, 200); + assert.equal(numBasicRequests, 2); + + // 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, response, body) { + assert.equal(response.statusCode, 200); + assert.equal(numBasicRequests, 3); + + console.log('All tests passed'); + basicServer.close(); + }); +}); diff --git a/tests/test-digest-auth.js b/tests/test-digest-auth.js new file mode 100644 index 000000000..151af126c --- /dev/null +++ b/tests/test-digest-auth.js @@ -0,0 +1,69 @@ +var assert = require('assert') + , http = require('http') + , request = require('../main') + ; + +// Test digest auth +// Using header values captured from interaction with Apache + +var numDigestRequests = 0; + +var digestServer = http.createServer(function (req, res) { + console.error('Digest auth server: ', req.method, req.url); + numDigestRequests++; + + var ok; + + if (req.headers.authorization) { + if (req.headers.authorization == 'Digest username="test", realm="Private", nonce="WpcHS2/TBAA=dffcc0dbd5f96d49a5477166649b7c0ae3866a93", uri="/test/", qop="auth", response="54753ce37c10cb20b09b769f0bed730e", nc="1", cnonce=""') { + 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', 'Digest realm="Private", nonce="WpcHS2/TBAA=dffcc0dbd5f96d49a5477166649b7c0ae3866a93", algorithm=MD5, qop="auth"'); + } + + if (ok) { + console.log('request ok'); + res.end('ok'); + } else { + console.log('status=401'); + res.statusCode = 401; + res.end('401'); + } +}); + +digestServer.listen(6767); + +request({ + 'method': 'GET', + 'uri': 'http://localhost:6767/test/', + 'auth': { + 'user': 'test', + 'pass': 'testing', + 'sendImmediately': false + } +}, function(error, response, body) { + assert.equal(response.statusCode, 200); + assert.equal(numDigestRequests, 2); + + // If we don't set sendImmediately = false, request will send basic auth + request({ + 'method': 'GET', + 'uri': 'http://localhost:6767/test/', + 'auth': { + 'user': 'test', + 'pass': 'testing' + } + }, function(error, response, body) { + assert.equal(response.statusCode, 401); + assert.equal(numDigestRequests, 3); + + console.log('All tests passed'); + digestServer.close(); + }); +});