@@ -10,12 +10,14 @@ var crypto = require('crypto');
1010var rimraf = require ( 'rimraf' ) ;
1111var StreamSink = require ( 'streamsink' ) ;
1212var tempDir = path . join ( __dirname , 'tmp' ) ;
13+ var tempManyFilesDir = path . join ( __dirname , 'tmp' , 'many-files-dir' ) ;
1314var localFile = path . join ( tempDir , 'random.png' ) ;
1415var remoteRoot = "node-s3-test/" ;
1516var remoteFile = remoteRoot + "file.png" ;
1617var remoteFile2 = remoteRoot + "file2.png" ;
1718var remoteFile3 = remoteRoot + "file3.png" ;
1819var remoteDir = remoteRoot + "dir1" ;
20+ var remoteManyFilesDir = remoteRoot + "many-files-dir" ;
1921
2022var describe = global . describe ;
2123var it = global . it ;
@@ -41,11 +43,11 @@ function createClient() {
4143 } ) ;
4244}
4345
44- function createBigFile ( size , cb ) {
45- mkdirp ( tempDir , function ( err ) {
46+ function createBigFile ( file , size , cb ) {
47+ mkdirp ( path . dirname ( file ) , function ( err ) {
4648 if ( err ) return cb ( err ) ;
4749 var md5sum = crypto . createHash ( 'md5' ) ;
48- var out = fs . createWriteStream ( localFile ) ;
50+ var out = fs . createWriteStream ( file ) ;
4951 out . on ( 'error' , function ( err ) {
5052 cb ( err ) ;
5153 } ) ;
@@ -63,6 +65,17 @@ function createBigFile(size, cb) {
6365 } ) ;
6466}
6567
68+ function createFolderOfFiles ( dir , numFiles , sizeOfFiles , cb ) {
69+ for ( var i = 0 , j = numFiles ; i < numFiles ; i ++ ) {
70+ createBigFile ( path . join ( dir , 'file' + i ) , sizeOfFiles , function ( ) {
71+ j -- ;
72+ if ( j === 0 ) {
73+ cb ( ) ;
74+ }
75+ } ) ;
76+ }
77+ }
78+
6679var file1Md5 = "b1946ac92492d2347c6235b4d2611184" ;
6780describe ( "MultipartETag" , function ( ) {
6881 it ( "returns unmodified digest" , function ( done ) {
@@ -123,7 +136,7 @@ describe("s3", function () {
123136 } ) ;
124137
125138 it ( "uploads" , function ( done ) {
126- createBigFile ( 120 * 1024 , function ( err , _hexdigest ) {
139+ createBigFile ( localFile , 120 * 1024 , function ( err , _hexdigest ) {
127140 if ( err ) return done ( err ) ;
128141 hexdigest = _hexdigest ;
129142 var client = createClient ( ) ;
@@ -442,8 +455,44 @@ describe("s3", function () {
442455 } ) ;
443456 } ) ;
444457
458+ it ( "uploads folder with lots of files" , function ( done ) {
459+ createFolderOfFiles ( tempManyFilesDir , 100 , 100 * 1024 , function ( ) {
460+ var client = createClient ( ) ;
461+ var params = {
462+ localDir : tempManyFilesDir ,
463+ deleteRemoved : true ,
464+ s3Params : {
465+ Prefix : remoteManyFilesDir ,
466+ Bucket : s3Bucket ,
467+ } ,
468+ } ;
469+ var uploader = client . uploadDir ( params ) ;
470+ uploader . on ( 'end' , function ( ) {
471+ // get a list of the remote files to ensure they all got created
472+ var params = {
473+ recursive : true ,
474+ s3Params : {
475+ Bucket : s3Bucket ,
476+ Prefix : remoteManyFilesDir ,
477+ } ,
478+ } ;
479+ var client = createClient ( ) ;
480+ var finder = client . listObjects ( params ) ;
481+ var found = false ;
482+ finder . on ( 'data' , function ( data ) {
483+ assert . strictEqual ( data . Contents . length , 100 ) ;
484+ found = true ;
485+ } ) ;
486+ finder . on ( 'end' , function ( ) {
487+ assert . strictEqual ( found , true ) ;
488+ done ( ) ;
489+ } ) ;
490+ } ) ;
491+ } ) ;
492+ } ) ;
493+
445494 it ( "multipart upload" , function ( done ) {
446- createBigFile ( 16 * 1024 * 1024 , function ( err , _hexdigest ) {
495+ createBigFile ( localFile , 16 * 1024 * 1024 , function ( err , _hexdigest ) {
447496 if ( err ) return done ( err ) ;
448497 hexdigest = _hexdigest ;
449498 var client = createClient ( ) ;
0 commit comments