From 5357d8dd1e272e0bf9a952f06929fd3b9b1531a3 Mon Sep 17 00:00:00 2001 From: Eran Hammer Date: Mon, 4 Mar 2013 10:50:04 -0800 Subject: [PATCH] shot 0.1.0, Buffer response type, encoding --- examples/injection.js | 2 +- lib/response/buffer.js | 25 +++++++ lib/response/generic.js | 139 ++++++++++++++++++----------------- lib/response/headers.js | 26 ++++++- lib/response/index.js | 124 ++++++++++++++++--------------- lib/response/obj.js | 7 +- lib/response/raw.js | 5 +- lib/response/text.js | 5 +- lib/response/view.js | 1 + lib/server.js | 7 +- package.json | 2 +- test/integration/auth.js | 4 +- test/integration/pack.js | 2 +- test/integration/request.js | 2 +- test/integration/response.js | 91 ++++++++++++----------- 15 files changed, 250 insertions(+), 192 deletions(-) create mode 100755 lib/response/buffer.js diff --git a/examples/injection.js b/examples/injection.js index eb0df89ed..7c30b3a46 100755 --- a/examples/injection.js +++ b/examples/injection.js @@ -28,7 +28,7 @@ internals.main = function () { server.inject(req, function (res) { - console.log(res.result || res.readPayload()); + console.log(res.result); }); }; diff --git a/lib/response/buffer.js b/lib/response/buffer.js new file mode 100755 index 000000000..26677cd47 --- /dev/null +++ b/lib/response/buffer.js @@ -0,0 +1,25 @@ +// Load modules + +var Generic = require('./generic'); +var Utils = require('../utils'); + + +// Declare internals + +var internals = {}; + + +// Buffer response (Base -> Generic -> Buffer) + +exports = module.exports = internals.Buffer = function (buffer) { + + Generic.call(this); + this.variety = 'buffer'; + this.varieties.buffer = true; + + this._payload.push(buffer); + + return this; +}; + +Utils.inherits(internals.Buffer, Generic); diff --git a/lib/response/generic.js b/lib/response/generic.js index 334446abf..eb363c38e 100755 --- a/lib/response/generic.js +++ b/lib/response/generic.js @@ -16,7 +16,7 @@ var internals = {}; // Generic response (Base -> Generic) -exports = module.exports = internals.Generic = function () { +exports = module.exports = internals.Generic = function () { Utils.assert(this.constructor !== internals.Generic, 'Generic must not be instantiated directly'); @@ -28,166 +28,167 @@ exports = module.exports = internals.Generic = function () { this._payload = []; this._headers = {}; - return this; + return this; }; Utils.inherits(internals.Generic, Base); -internals.Generic.prototype.getTtl = function () { +internals.Generic.prototype.getTtl = function () { - return this._code === 200 ? this._flags.ttl : 0; + return this._code === 200 ? this._flags.ttl : 0; }; -internals.Generic.prototype._prepare = function (request, callback) { +internals.Generic.prototype._prepare = function (request, callback) { var self = this; this._wasPrepared = true; + this._flags.encoding = this._flags.encoding || 'utf-8'; var length = 0; - this._payload.forEach(function (chunk) { - length += Buffer.byteLength(chunk); + this._payload.forEach(function (chunk) { + + if (Buffer.isBuffer(chunk)) { + length += chunk.length; + } + else { + length += Buffer.byteLength(chunk, self._flags.encoding); + } }); - if (request.jsonp) { + if (request.jsonp) { this.header('Content-Type', 'text/javascript'); length += request.jsonp.length + 3; var payload = [request.jsonp, '(']; - this._payload.forEach(function (chunk) { - payload.push(chunk.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029')); + this._payload.forEach(function (chunk) { + + payload.push(Buffer.isBuffer(chunk) ? chunk : chunk.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029')); }); payload.push(');'); - this._payload = payload; + this._payload = payload; } this.header('Content-Length', length); - if (this._flags.location) { - this._headers.Location = Headers.location(this._flags.location, request); + if (this._flags.location) { + this._headers.Location = Headers.location(this._flags.location, request); } Headers.cache(this, request); Headers.cors(this, request); - Headers.state(this, request, function (err) { + Headers.content(this, request); + Headers.state(this, request, function (err) { - if (err) { - return callback(err); + if (err) { + return callback(err); } - return callback(self); - }); + return callback(self); + }); }; -internals.Generic.prototype._transmit = function (request, callback) { +internals.Generic.prototype._transmit = function (request, callback) { var self = this; - var prepare = function () { - + var prepare = function () { + if (!self._payload.length || - request.method === 'head') { + request.method === 'head') { - return send(); + return send(); } var availableEncodings = ['gzip', 'deflate', 'identity']; var negotiator = new Negotiator(request.raw.req); var encoding = negotiator.preferredEncoding(availableEncodings); - if (encoding === 'gzip') { - return prepareGzip(); - } - if (encoding === 'deflate') { - return prepareDeflate(); + if (['gzip', 'deflate'].indexOf(encoding) !== -1) { + return compress(encoding); } - return send(self._payload); + return send(self._payload); }; - var prepareGzip = function () { + var compress = function (encoding) { - Async.map(self._payload, Zlib.gzip, function (err, results) { + var encoder = (encoding === 'gzip' ? Zlib.gzip : Zlib.deflate); + Async.map(self._payload, encoder, function (err, results) { var length = 0; - results.forEach(function (result) { + results.forEach(function (result) { - length += result.length; + length += result.length; }); - self.header('Content-Encoding', 'gzip'); + self.header('Content-Encoding', encoding); self.header('Vary', 'Accept-Encoding'); self.header('Content-Length', length); - return send(results); - }); + return send(results); + }); }; - var prepareDeflate = function () { - - Async.map(self._payload, Zlib.deflate, function (err, results) { + var send = function (payload) { - var length = 0; - results.forEach(function (result) { - - length += result.length; - }); - - self.header('Content-Encoding', 'deflate'); - self.header('Vary', 'Accept-Encoding'); - self.header('Content-Length', length); + request.raw.res.once('error', function (err) { - return send(results); - }); - }; - - var send = function (payload) { - - request.raw.res.once('error', function (err) { - - callback(err); + callback(err); }); request.raw.res.writeHead(self._code, self._headers); if (payload && - payload.length) { + payload.length) { - payload.forEach(function (chunk) { + payload.forEach(function (chunk) { - request.raw.res.write(chunk); - }); + if (Buffer.isBuffer(chunk)) { + request.raw.res.write(chunk); + } + else { + request.raw.res.write(chunk, self._flags.encoding); + } + }); } request.raw.res.end(); - callback(); + callback(); }; - prepare(); + prepare(); }; -internals.Generic.prototype.header = function (key, value) { +internals.Generic.prototype.header = function (key, value) { this._headers[key] = value; - return this; + return this; }; -internals.Generic.prototype.type = function (type) { +internals.Generic.prototype.type = function (type) { this._headers['Content-Type'] = type; - return this; + return this; }; -internals.Generic.prototype.created = function (uri) { +internals.Generic.prototype.created = function (uri) { this._code = 201; this._flags.location = uri; - return this; + return this; +}; + + +internals.Generic.prototype.encoding = function (encoding) { + + this._flags.encoding = encoding; + return this; }; diff --git a/lib/response/headers.js b/lib/response/headers.js index 8e679a1e7..9c4f0ca7d 100755 --- a/lib/response/headers.js +++ b/lib/response/headers.js @@ -8,6 +8,13 @@ var State = require('../state'); var internals = {}; +exports.location = function (uri, request) { + + var isAbsolute = (uri.match(/^\w+\:\/\//)); + return (isAbsolute ? uri : request.server.settings.uri + (uri.charAt(0) === '/' ? '' : '/') + uri); +}; + + exports.cache = function (response, request) { var ttl = response.getTtl(); @@ -70,10 +77,21 @@ exports.cors = function (response, request) { }; -exports.location = function (uri, request) { - - var isAbsolute = (uri.match(/^\w+\:\/\//)); - return (isAbsolute ? uri : request.server.settings.uri + (uri.charAt(0) === '/' ? '' : '/') + uri); +exports.content = function (response, request) { + + var type = response._headers['Content-Type']; + if (!type) { + return; + } + + var hasParams = (type.indexOf(';') !== -1); + if (hasParams && + type.match(/[; ]charset=/)) { + + return; + } + + response._headers['Content-Type'] = type + (hasParams ? ', ' : '; ') + 'charset=' + response._flags.encoding; }; diff --git a/lib/response/index.js b/lib/response/index.js index cf72b1e94..38a24c4c6 100755 --- a/lib/response/index.js +++ b/lib/response/index.js @@ -8,15 +8,15 @@ var Utils = require('../utils'); // Declare internals -var internals = { - maxNestedPreparations: 5 +var internals = { + maxNestedPreparations: 5 }; /* /-- Raw /-- Stream -----|--- File Base --| | - \-- Generic --| /-- Text ----|-- Redirection + \-- Generic --|--- Buffer /-- Text ----|-- Redirection | | \-- Cacheable --|--- Empty | @@ -46,6 +46,7 @@ exports.Directory = internals.Directory = require('./directory'); exports.Raw = internals.Raw = require('./raw'); exports.Redirection = internals.Redirection = require('./redirection'); exports.View = internals.View = require('./view'); +exports.Buffer = internals.Buffer = require('./buffer'); // Internal response types @@ -55,114 +56,117 @@ internals.Cached = require('./cached'); // Utilities -exports.generate = function (result, onSend) { +exports.generate = function (result, onSend) { var response = null; if (result === null || result === undefined || - result === '') { + result === '') { - response = new internals.Empty(); + response = new internals.Empty(); } - else if (typeof result === 'string' || Buffer.isBuffer(result)) { - response = new internals.Text(result); + else if (typeof result === 'string') { + response = new internals.Text(result); } - else if (typeof result === 'object') { - if (result.variety || - result.isBoom) { - - response = result; + else if (typeof result === 'object') { + if (Buffer.isBuffer(result)) { + response = new internals.Buffer(result); } - else if (result instanceof Error) { - response = new Boom(result); + else if (result.variety || + result.isBoom) { + + response = result; } - else if (result instanceof Stream) { - response = new internals.Stream(result); + else if (result instanceof Error) { + response = new Boom(result); } + else if (result instanceof Stream) { + response = new internals.Stream(result); + } } - if (!response) { - response = new internals.Obj(result); + if (!response) { + response = new internals.Obj(result); } Utils.assert(response && (response.variety || response.isBoom), 'Invalid response object'); // Safety - if (onSend) { - response.send = function () { + if (onSend) { + response.send = function () { delete response.send; - onSend(); - }; + onSend(); + }; } - return response; + return response; }; -exports._respond = function (item, request, callback) { +exports._respond = function (item, request, callback) { var errorPrepared = false; var prepareCount = 0; - var prepare = function (response) { + var prepare = function (response) { if (!response || - (!response.variety && !response.isBoom)) { + (!response.variety && !response.isBoom)) { - response = Boom.internal('Unexpected response item', response); + response = Boom.internal('Unexpected response item', response); } - if (response.isBoom) { - response = new internals.Error(response); + if (response.isBoom) { + response = new internals.Error(response); } - if (!response._prepare) { - return etag(response); + if (!response._prepare) { + return etag(response); } - response._prepare(request, function (result) { + response._prepare(request, function (result) { - if (!result._wasPrepared) { + if (!result._wasPrepared) { ++prepareCount; if (prepareCount > internals.maxNestedPreparations) { // Prevent prepare loops result = new internals.Error(Boom.internal('Response prepare count exceeded maximum allowed', item)); - return send(result); + return send(result); } - if (result.isBoom) { - if (errorPrepared) { + if (result.isBoom) { + if (errorPrepared) { result = new internals.Error(result); - return send(result); + return send(result); } errorPrepared = true; // Prevent error loops } - return prepare(result); + return prepare(result); } - return etag(result); - }); + return etag(result); + }); }; - var etag = function (response) { + var etag = function (response) { if (request.method !== 'get' && - request.method !== 'head') { + request.method !== 'head') { - return send(response); + return send(response); } // Process ETag var etag = response._headers && response._headers.etag; if (etag && - request.raw.req.headers['if-none-match'] === etag) { + request.raw.req.headers['if-none-match'] === etag) { var unchanged = new internals.Empty(); unchanged._code = 304; - return prepare(unchanged); + return prepare(unchanged); } // Process If-Modified-Since headers @@ -171,22 +175,22 @@ exports._respond = function (item, request, callback) { var lastModifiedHeader = response._headers && response._headers['Last-Modified']; if (ifModifiedSinceHeader && - lastModifiedHeader) { + lastModifiedHeader) { var ifModifiedSince = Date.parse(ifModifiedSinceHeader); var lastModified = Date.parse(lastModifiedHeader); if (ifModifiedSince && lastModified && - ifModifiedSince >= lastModified) { + ifModifiedSince >= lastModified) { var unchanged = new internals.Empty(); unchanged._code = 304; - return prepare(unchanged); - } + return prepare(unchanged); + } } - return send(response); + return send(response); }; var send = function (response) { @@ -194,21 +198,23 @@ exports._respond = function (item, request, callback) { // Injection if (response._payload && - response._payload.length) { + response._payload.length) { - if (Shot.isInjection(request.raw.req)) { - request.raw.res.hapi = { result: response.raw || response._payload.join('') }; - } + if (Shot.isInjection(request.raw.req) && + response.hasOwnProperty('raw')) { + + request.raw.res.hapi = { result: response.raw }; + } } - response._transmit(request, function () { + response._transmit(request, function () { request.log(['http', 'response', response.variety]); - return callback(); - }); + return callback(); + }); }; - prepare(item); + prepare(item); }; diff --git a/lib/response/obj.js b/lib/response/obj.js index 57aebd4d8..10c6a47c3 100755 --- a/lib/response/obj.js +++ b/lib/response/obj.js @@ -11,14 +11,14 @@ var internals = {}; // Obj response (Base -> Generic -> Cacheable -> Obj) -exports = module.exports = internals.Obj = function (object, type) { +exports = module.exports = internals.Obj = function (object, type, encoding) { Cacheable.call(this); this.variety = 'obj'; this.varieties.obj = true; this.raw = object; // Can change if reference is modified - this.update(type); // Convert immediately to snapshot content + this.update(type, encoding); // Convert immediately to snapshot content return this; }; @@ -26,8 +26,9 @@ exports = module.exports = internals.Obj = function (object, type) { Utils.inherits(internals.Obj, Cacheable); -internals.Obj.prototype.update = function (type) { +internals.Obj.prototype.update = function (type, encoding) { this._payload = [JSON.stringify(this.raw)]; this._headers['Content-Type'] = type || this._headers['Content-Type'] || 'application/json'; + this._flags.encoding = encoding || 'utf-8'; }; diff --git a/lib/response/raw.js b/lib/response/raw.js index b4677c748..d682e4bf7 100755 --- a/lib/response/raw.js +++ b/lib/response/raw.js @@ -49,15 +49,14 @@ internals.Raw.prototype.begin = function (callback) { // Sent headers + Headers.cache(this, this._request); + Headers.cors(this, this._request); Headers.state(this, this._request, function (err) { if (err) { self._request.log(['http', 'response', 'direct', 'state'], err); // Note the error as the callback error is likely to be ignored } - Headers.cache(self, self._request); - Headers.cors(self, self._request); - for (var i = 0, il = internals.decorators.length; i < il; ++i) { var name = internals.decorators[i]; delete self[name]; diff --git a/lib/response/text.js b/lib/response/text.js index 56107d6e1..e7c6401f8 100755 --- a/lib/response/text.js +++ b/lib/response/text.js @@ -25,13 +25,14 @@ exports = module.exports = internals.Text = function (text, type) { Utils.inherits(internals.Text, Cacheable); -internals.Text.prototype.message = function (text, type) { +internals.Text.prototype.message = function (text, type, encoding) { if (text) { - this._payload = [text.toString()]; + this._payload = [text]; } this._headers['Content-Type'] = type || 'text/html'; + this._flags.encoding = encoding || 'utf-8'; return this; }; diff --git a/lib/response/view.js b/lib/response/view.js index 37bc1cbb1..7321017b4 100755 --- a/lib/response/view.js +++ b/lib/response/view.js @@ -41,6 +41,7 @@ internals.View.prototype._prepare = function (request, callback) { this._payload = [rendered]; this._headers['Content-Type'] = (this.view.manager.settings.engine && this.view.manager.settings.engine['Content-Type']) || 'text/html'; + this._flags.encoding = (this.view.manager.settings.engine && this.view.manager.settings.engine.encoding) || 'utf-8'; return Cacheable.prototype._prepare.call(this, request, callback); }; diff --git a/lib/server.js b/lib/server.js index 075304b18..18a0090b0 100755 --- a/lib/server.js +++ b/lib/server.js @@ -336,9 +336,12 @@ internals.Server.prototype.inject = function (options, callback) { var onEnd = function (res) { - if (res.raw.res.hapi) { + if (res.raw.res.hapi) { res.result = res.raw.res.hapi.result; - delete res.raw.res.hapi; + delete res.raw.res.hapi; + } + else { + res.result = res.result || res.payload; } callback(res); diff --git a/package.json b/package.json index 940ccaaa0..30373be28 100755 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "boom": "0.3.x", "joi": "0.1.x", "hawk": "0.10.x", - "shot": "0.0.x", + "shot": "0.1.x", "oz": "0.1.x", "async": "0.1.x", "request": "2.14.x", diff --git a/test/integration/auth.js b/test/integration/auth.js index ecafc8014..dc3ed8060 100755 --- a/test/integration/auth.js +++ b/test/integration/auth.js @@ -462,8 +462,8 @@ describe('Auth', function () { server.inject(request, function (res) { - expect(res.result).to.exist; - var envelope = JSON.parse(res.readPayload()); + expect(res.payload).to.exist; + var envelope = JSON.parse(res.payload); expect(envelope.app).to.equal('123'); done(); }); diff --git a/test/integration/pack.js b/test/integration/pack.js index 60137c17e..79861d134 100755 --- a/test/integration/pack.js +++ b/test/integration/pack.js @@ -182,7 +182,7 @@ describe('Pack', function () { server.inject({ method: 'GET', url: '/file' }, function (res) { - expect(res.readPayload()).to.equal('

{{message}}

'); + expect(res.result).to.equal('

{{message}}

'); done(); }); }); diff --git a/test/integration/request.js b/test/integration/request.js index 121d6808c..f126dac8f 100755 --- a/test/integration/request.js +++ b/test/integration/request.js @@ -90,7 +90,7 @@ describe('Request', function () { makeRequest('GET', '/custom', function (res) { - expect(res.headers['Content-Type']).to.equal('text/plain'); + expect(res.headers['Content-Type']).to.equal('text/plain; charset=utf-8'); done(); }); }); diff --git a/test/integration/response.js b/test/integration/response.js index 849f3967f..c15b92d9a 100755 --- a/test/integration/response.js +++ b/test/integration/response.js @@ -25,8 +25,9 @@ describe('Response', function () { var handler = function (request) { - request.reply.payload('text') + request.reply.payload('text\0!') .type('text/plain') + .encoding('ascii') .ttl(1000) .state('sid', 'abcdefg123456') .state('other', 'something', { isSecure: true }) @@ -52,8 +53,8 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/' }, function (res) { - expect(res.result).to.exist; - expect(res.result).to.equal('text'); + expect(res.payload).to.exist; + expect(res.payload).to.equal('text !'); expect(res.headers['Cache-Control']).to.equal('max-age=1, must-revalidate'); expect(res.headers['Access-Control-Allow-Origin']).to.equal('test.example.com www.example.com'); expect(res.headers['Access-Control-Allow-Credentials']).to.not.exist; @@ -69,23 +70,6 @@ describe('Response', function () { }); }); - it('returns a text reply when sending a buffer', function (done) { - - var handler = function () { - - this.reply(new Buffer('Tada')); - }; - - var server = new Hapi.Server(); - server.route({ method: 'GET', path: '/', config: { handler: handler } }); - - server.inject({ method: 'GET', url: '/' }, function (res) { - - expect(res.result).to.equal('Tada'); - done(); - }); - }); - it('returns an error on bad cookie', function (done) { var handler = function (request) { @@ -108,6 +92,25 @@ describe('Response', function () { }); }); + describe('Buffer', function () { + + it('returns a reply', function (done) { + + var handler = function () { + + this.reply(new Buffer('Tada')); + }; + + var server = new Hapi.Server(); + server.route({ method: 'GET', path: '/', config: { handler: handler } }); + + server.inject({ method: 'GET', url: '/' }, function (res) { + + expect(res.result).to.equal('Tada'); + done(); + }); + }); + }); describe('Obj', function () { @@ -123,7 +126,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/?callback=me' }, function (res) { - expect(res.readPayload()).to.equal('me({"some":"value"});'); + expect(res.payload).to.equal('me({"some":"value"});'); expect(res.headers['Content-Length']).to.equal(21); done(); }); @@ -190,7 +193,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/' }, function (res) { - expect(res.result).to.not.exist; + expect(res.result).to.equal(''); expect(res.headers['Access-Control-Allow-Credentials']).to.equal('true'); done(); }); @@ -200,7 +203,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/?x=1' }, function (res) { - expect(res.result).to.not.exist; + expect(res.result).to.equal(''); done(); }); }); @@ -234,7 +237,7 @@ describe('Response', function () { expect(res.statusCode).to.equal(200); expect(res.headers['set-cookie']).to.deep.equal(['sid=abcdefg123456']); - expect(res.readPayload()).to.equal('!hola amigos!'); + expect(res.result).to.equal('!hola amigos!'); expect(res.headers['cache-control']).to.equal('max-age=1, must-revalidate'); expect(res.headers['access-control-allow-origin']).to.equal('test.example.com'); done(); @@ -266,7 +269,7 @@ describe('Response', function () { expect(res.statusCode).to.equal(200); expect(res.headers['set-cookie']).to.deep.equal(['sid=abcdefg123456']); - expect(res.readPayload()).to.equal('!hola amigos!'); + expect(res.result).to.equal('!hola amigos!'); expect(res.headers['cache-control']).to.equal('max-age=1, must-revalidate'); expect(res.headers['access-control-allow-origin']).to.not.exist; done(); @@ -293,7 +296,7 @@ describe('Response', function () { expect(res.statusCode).to.equal(299); expect(res.headers['set-cookie']).to.deep.equal(['sid=abcdefg123456']); - expect(res.readPayload()).to.equal(''); + expect(res.result).to.equal(''); expect(res.headers['access-control-allow-origin']).to.equal('test.example.com'); done(); }); @@ -325,7 +328,7 @@ describe('Response', function () { expect(res.statusCode).to.equal(200); expect(res.headers['set-cookie']).to.deep.equal(['sid=abcdefg123456']); - expect(res.readPayload()).to.equal(''); + expect(res.result).to.equal(''); expect(res.headers['cache-control']).to.equal('max-age=1, must-revalidate'); expect(res.headers['access-control-allow-origin']).to.equal('test.example.com'); done(); @@ -360,7 +363,7 @@ describe('Response', function () { expect(res.statusCode).to.equal(201); expect(res.headers.location).to.equal(server.settings.uri + '/me'); expect(res.headers['set-cookie']).to.deep.equal(['sid=abcdefg123456']); - expect(res.readPayload()).to.equal('!hola amigos!'); + expect(res.result).to.equal('!hola amigos!'); expect(res.headers['cache-control']).to.equal('no-cache'); expect(res.headers['access-control-allow-origin']).to.equal('test.example.com'); done(); @@ -391,7 +394,7 @@ describe('Response', function () { expect(res.statusCode).to.equal(200); // Too late to change at this point expect(res.headers['Set-Cookie']).to.not.exist; - expect(res.readPayload()).to.equal('!hola amigos!'); + expect(res.result).to.equal('!hola amigos!'); done(); }); }); @@ -596,7 +599,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/note' }, function (res1) { expect(res1.statusCode).to.equal(200); - expect(res1.readPayload()).to.equal('Test'); + expect(res1.result).to.equal('Test'); expect(res1.headers.etag).to.not.exist; // No etag, previously requested @@ -604,7 +607,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/note' }, function (res2) { expect(res2.statusCode).to.equal(200); - expect(res2.readPayload()).to.equal('Test'); + expect(res2.result).to.equal('Test'); expect(res2.headers.etag).to.exist; var etag1 = res2.headers.etag; @@ -624,7 +627,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/note', headers: { 'if-none-match': etag1 } }, function (res4) { expect(res4.statusCode).to.equal(200); - expect(res4.readPayload()).to.equal('Test'); + expect(res4.result).to.equal('Test'); expect(res4.headers.etag).to.not.exist; // No etag, previously requested @@ -632,7 +635,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/note' }, function (res5) { expect(res5.statusCode).to.equal(200); - expect(res5.readPayload()).to.equal('Test'); + expect(res5.result).to.equal('Test'); expect(res5.headers.etag).to.exist; var etag2 = res5.headers.etag; @@ -647,7 +650,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/note', headers: { 'if-none-match': etag2 } }, function (res6) { expect(res6.statusCode).to.equal(200); - expect(res6.readPayload()).to.equal('Test1'); + expect(res6.result).to.equal('Test1'); expect(res6.headers.etag).to.not.exist; // No etag, previously requested @@ -655,7 +658,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/note' }, function (res7) { expect(res7.statusCode).to.equal(200); - expect(res7.readPayload()).to.equal('Test1'); + expect(res7.result).to.equal('Test1'); expect(res7.headers.etag).to.exist; var etag3 = res7.headers.etag; @@ -670,14 +673,14 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/note' }, function (res8) { expect(res8.statusCode).to.equal(200); - expect(res8.readPayload()).to.equal('Test'); + expect(res8.result).to.equal('Test'); // No etag, previously requested server.inject({ method: 'GET', url: '/note' }, function (res9) { expect(res9.statusCode).to.equal(200); - expect(res9.readPayload()).to.equal('Test'); + expect(res9.result).to.equal('Test'); expect(res9.headers.etag).to.exist; var etag4 = res9.headers.etag; @@ -1212,7 +1215,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/stream/' }, function (res) { - expect(res.readPayload()).to.equal('x'); + expect(res.result).to.equal('x'); expect(res.statusCode).to.equal(200); expect(res.headers['Cache-Control']).to.equal('max-age=2, must-revalidate'); expect(res.headers['Access-Control-Allow-Origin']).to.equal('test.example.com'); @@ -1286,7 +1289,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/stream3' }, function (res) { - expect(res.readPayload()).to.equal('x'); + expect(res.result).to.equal('x'); expect(res.statusCode).to.equal(201); expect(res.headers.Location).to.equal(server.settings.uri + '/special'); expect(res.headers['Cache-Control']).to.equal('no-cache'); @@ -1308,7 +1311,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/stream/error' }, function (res) { - expect(res.readPayload()).to.equal(''); + expect(res.result).to.equal(''); done(); }); }); @@ -1317,7 +1320,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/stream/double' }, function (res) { - expect(res.readPayload()).to.equal('x'); + expect(res.result).to.equal('x'); done(); }); }); @@ -1371,7 +1374,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/cache' }, function (res2) { - expect(res2.readPayload()).to.equal('{"status":"cached"}'); + expect(res2.result).to.equal('{"status":"cached"}'); done(); }); }); @@ -1935,7 +1938,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/null' }, function (res) { - expect(res.readPayload()).to.equal('0\r\n\r\n'); + expect(res.result).to.equal(''); expect(function () { @@ -1971,7 +1974,7 @@ describe('Response', function () { server.inject({ method: 'GET', url: '/' }, function (res) { - expect(res.readPayload()).to.equal('Hello World'); + expect(res.result).to.equal('Hello World'); done(); }); });