From c522e846d2367cd20c7875a7ebf0c12bb0bec5cb Mon Sep 17 00:00:00 2001 From: simov Date: Tue, 18 Nov 2014 20:42:32 +0200 Subject: [PATCH 1/3] Set transfer encoding for multipart/related to chunked by default --- request.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/request.js b/request.js index 826ed7f1b..8365ab62a 100644 --- a/request.js +++ b/request.js @@ -1429,6 +1429,10 @@ Request.prototype.multipart = function (multipart) { return chunked ? items.append(part) : items.push(new Buffer(part)) } + if (chunked) { + self.setHeader('transfer-encoding', 'chunked') + } + var headerName = self.hasHeader('content-type') if (!headerName || self.headers[headerName].indexOf('multipart') === -1) { self.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) From 9a6e61cea511f2ba1fdafb9e04e77a7efe71c2e4 Mon Sep 17 00:00:00 2001 From: simov Date: Tue, 18 Nov 2014 20:43:45 +0200 Subject: [PATCH 2/3] Test multipart/related with GET request --- tests/test-multipart.js | 50 +++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/tests/test-multipart.js b/tests/test-multipart.js index bc1ab1438..c8b86724b 100644 --- a/tests/test-multipart.js +++ b/tests/test-multipart.js @@ -44,24 +44,26 @@ function runTest(t, a) { req.on('end', function() { // check for the fields' traces - // 1st field : my_field - t.ok( data.indexOf('name: my_field') !== -1 ) - t.ok( data.indexOf(multipartData[0].body) !== -1 ) - - // 2nd field : my_buffer - t.ok( data.indexOf('name: my_buffer') !== -1 ) - t.ok( data.indexOf(multipartData[1].body) !== -1 ) - - if (chunked) { - // 3rd field : my_file - t.ok( data.indexOf('name: my_file') !== -1 ) - // check for unicycle.jpg traces - t.ok( data.indexOf('2005:06:21 01:44:12') !== -1 ) - - // 4th field : remote_file - t.ok( data.indexOf('name: remote_file') !== -1 ) - // check for http://localhost:8080/file traces - t.ok( data.indexOf('Photoshop ICC') !== -1 ) + if (a.method === 'post') { + // 1st field : my_field + t.ok( data.indexOf('name: my_field') !== -1 ) + t.ok( data.indexOf(multipartData[0].body) !== -1 ) + + // 2nd field : my_buffer + t.ok( data.indexOf('name: my_buffer') !== -1 ) + t.ok( data.indexOf(multipartData[1].body) !== -1 ) + + if (chunked) { + // 3rd field : my_file + t.ok( data.indexOf('name: my_file') !== -1 ) + // check for unicycle.jpg traces + t.ok( data.indexOf('2005:06:21 01:44:12') !== -1 ) + + // 4th field : remote_file + t.ok( data.indexOf('name: remote_file') !== -1 ) + // check for http://localhost:8080/file traces + t.ok( data.indexOf('Photoshop ICC') !== -1 ) + } } res.writeHead(200) @@ -94,7 +96,7 @@ function runTest(t, a) { if (a.json) { reqOptions.json = true } - request.post(reqOptions, function (err, res, body) { + request[a.method](reqOptions, function (err, res, body) { t.equal(err, null) t.equal(res.statusCode, 200) t.deepEqual(body, a.json ? {status: 'done'} : 'done') @@ -105,6 +107,7 @@ function runTest(t, a) { }) } +var methods = ['post', 'get'] var cases = [ {name: '-json +array', args: {json: false, array: true}}, {name: '-json -array', args: {json: false, array: false}}, @@ -127,8 +130,11 @@ var cases = [ {name: '+json +headers -chunked', args: {json: true, headers: true, array: false, chunked: false}} ] -cases.forEach(function (test) { - tape('multipart related ' + test.name, function(t) { - runTest(t, test.args) +methods.forEach(function(method) { + cases.forEach(function (test) { + tape('multipart related ' + test.name, function(t) { + test.args.method = method + runTest(t, test.args) + }) }) }) From f34bef51cc8e2e92dd05815259d490873c7632ca Mon Sep 17 00:00:00 2001 From: simov Date: Tue, 18 Nov 2014 21:10:08 +0200 Subject: [PATCH 3/3] Test req data for each http request type --- tests/test-multipart.js | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/tests/test-multipart.js b/tests/test-multipart.js index c8b86724b..ec18ef8ea 100644 --- a/tests/test-multipart.js +++ b/tests/test-multipart.js @@ -44,26 +44,24 @@ function runTest(t, a) { req.on('end', function() { // check for the fields' traces - if (a.method === 'post') { - // 1st field : my_field - t.ok( data.indexOf('name: my_field') !== -1 ) - t.ok( data.indexOf(multipartData[0].body) !== -1 ) - - // 2nd field : my_buffer - t.ok( data.indexOf('name: my_buffer') !== -1 ) - t.ok( data.indexOf(multipartData[1].body) !== -1 ) - - if (chunked) { - // 3rd field : my_file - t.ok( data.indexOf('name: my_file') !== -1 ) - // check for unicycle.jpg traces - t.ok( data.indexOf('2005:06:21 01:44:12') !== -1 ) - - // 4th field : remote_file - t.ok( data.indexOf('name: remote_file') !== -1 ) - // check for http://localhost:8080/file traces - t.ok( data.indexOf('Photoshop ICC') !== -1 ) - } + // 1st field : my_field + t.ok( data.indexOf('name: my_field') !== -1 ) + t.ok( data.indexOf(multipartData[0].body) !== -1 ) + + // 2nd field : my_buffer + t.ok( data.indexOf('name: my_buffer') !== -1 ) + t.ok( data.indexOf(multipartData[1].body) !== -1 ) + + if (chunked) { + // 3rd field : my_file + t.ok( data.indexOf('name: my_file') !== -1 ) + // check for unicycle.jpg traces + t.ok( data.indexOf('2005:06:21 01:44:12') !== -1 ) + + // 4th field : remote_file + t.ok( data.indexOf('name: remote_file') !== -1 ) + // check for http://localhost:8080/file traces + t.ok( data.indexOf('Photoshop ICC') !== -1 ) } res.writeHead(200) @@ -132,7 +130,7 @@ var cases = [ methods.forEach(function(method) { cases.forEach(function (test) { - tape('multipart related ' + test.name, function(t) { + tape('multipart related ' + method + ' ' + test.name, function(t) { test.args.method = method runTest(t, test.args) })