12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 'use strict';
- const assert = require('assert');
- const { inspect } = require('util');
- const { mustCall } = require(`${__dirname}/common.js`);
- const busboy = require('..');
- const input = Buffer.from([
- '-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k',
- 'Content-Disposition: form-data; '
- + 'name="upload_file_0"; filename="テスト.dat"',
- 'Content-Type: application/octet-stream',
- '',
- 'A'.repeat(1023),
- '-----------------------------paZqsnEHRufoShdX6fh0lUhXBP4k--'
- ].join('\r\n'));
- const boundary = '---------------------------paZqsnEHRufoShdX6fh0lUhXBP4k';
- const expected = [
- { type: 'file',
- name: 'upload_file_0',
- data: Buffer.from('A'.repeat(1023)),
- info: {
- filename: 'テスト.dat',
- encoding: '7bit',
- mimeType: 'application/octet-stream',
- },
- limited: false,
- },
- ];
- const bb = busboy({
- defParamCharset: 'utf8',
- headers: {
- 'content-type': `multipart/form-data; boundary=${boundary}`,
- }
- });
- const results = [];
- bb.on('field', (name, val, info) => {
- results.push({ type: 'field', name, val, info });
- });
- bb.on('file', (name, stream, info) => {
- const data = [];
- let nb = 0;
- const file = {
- type: 'file',
- name,
- data: null,
- info,
- limited: false,
- };
- results.push(file);
- stream.on('data', (d) => {
- data.push(d);
- nb += d.length;
- }).on('limit', () => {
- file.limited = true;
- }).on('close', () => {
- file.data = Buffer.concat(data, nb);
- assert.strictEqual(stream.truncated, file.limited);
- }).once('error', (err) => {
- file.err = err.message;
- });
- });
- bb.on('error', (err) => {
- results.push({ error: err.message });
- });
- bb.on('partsLimit', () => {
- results.push('partsLimit');
- });
- bb.on('filesLimit', () => {
- results.push('filesLimit');
- });
- bb.on('fieldsLimit', () => {
- results.push('fieldsLimit');
- });
- bb.on('close', mustCall(() => {
- assert.deepStrictEqual(
- results,
- expected,
- 'Results mismatch.\n'
- + `Parsed: ${inspect(results)}\n`
- + `Expected: ${inspect(expected)}`
- );
- }));
- bb.end(input);
|