1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
var common = require('../common');
var assert = common.assert;
var http = require('http');
var path = require('path');
var mime = require('mime');
var request = require('request');
var parseUrl = require('url').parse;
var fs = require('fs');
var FormData = require(common.dir.lib + '/form_data');
var IncomingForm = require('formidable').IncomingForm;
var remoteFile = 'http://nodejs.org/images/logo.png';
var FIELDS;
var server;
var parsedUrl = parseUrl(remoteFile)
, options = {
method: 'get',
port: parsedUrl.port || 80,
path: parsedUrl.pathname,
host: parsedUrl.hostname
}
;
http.request(options, function(res) {
FIELDS = [
{name: 'my_field', value: 'my_value'},
{name: 'my_buffer', value: new Buffer([1, 2, 3])},
{name: 'remote_file', value: res }
];
var form = new FormData();
FIELDS.forEach(function(field) {
form.append(field.name, field.value);
});
server.listen(common.port, function() {
form.submit('http://localhost:' + common.port + '/', function(err, res) {
if (err) {
throw err;
}
assert.strictEqual(res.statusCode, 200);
server.close();
});
});
}).end();
server = http.createServer(function(req, res) {
// formidable is broken so let's do it manual way
//
// var form = new IncomingForm();
// form.uploadDir = common.dir.tmp;
// form.parse(req);
// form
// .on('field', function(name, value) {
// var field = FIELDS.shift();
// assert.strictEqual(name, field.name);
// assert.strictEqual(value, field.value+'');
// })
// .on('file', function(name, file) {
// var field = FIELDS.shift();
// assert.strictEqual(name, field.name);
// assert.strictEqual(file.name, path.basename(field.value.path));
// // mime.lookup file.NAME == 'my_file' ?
// assert.strictEqual(file.type, mime.lookup(file.name));
// })
// .on('end', function() {
// res.writeHead(200);
// res.end('done');
// });
// temp workaround
var data = '';
req.setEncoding('utf8');
req.on('data', function(d) {
data += d;
});
req.on('end', function() {
// check for the fields' traces
// 1st field : my_field
var field = FIELDS.shift();
assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
assert.ok( data.indexOf(field.value) != -1 );
// 2nd field : my_buffer
var field = FIELDS.shift();
assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
assert.ok( data.indexOf(field.value) != -1 );
// 3rd field : remote_file
var field = FIELDS.shift();
assert.ok( data.indexOf('form-data; name="'+field.name+'"') != -1 );
assert.ok( data.indexOf('; filename="'+path.basename(remoteFile)+'"') != -1 );
// check for http://nodejs.org/images/logo.png traces
assert.ok( data.indexOf('ImageReady') != -1 );
assert.ok( data.indexOf('Content-Type: '+mime.lookup(remoteFile) ) != -1 );
res.writeHead(200);
res.end('done');
});
});
process.on('exit', function() {
assert.strictEqual(FIELDS.length, 0);
});
|