diff --git a/test/nodes/core/io/23-watch_spec.js b/test/nodes/core/io/23-watch_spec.js index fcd846089..1b8c64701 100644 --- a/test/nodes/core/io/23-watch_spec.js +++ b/test/nodes/core/io/23-watch_spec.js @@ -14,7 +14,7 @@ * limitations under the License. **/ -var fs = require("fs"); +var fs = require("fs-extra"); var path = require("path"); var should = require("should"); var helper = require("../../helper.js"); @@ -26,11 +26,6 @@ describe('watch Node', function() { var resourcesDir = path.join(__dirname,"..","..","..","resources"); var baseDir = path.join(resourcesDir, "23-watch-test-dir"); - var dirToWatch = undefined; - var subDirToWatch = undefined; - var file0ToWatch = undefined; - var file1ToWatch = undefined; - var file2ToWatch = undefined; var count = 0; function prepareDir() { @@ -41,63 +36,26 @@ describe('watch Node', function() { file2ToWatch = path.join(subDirToWatch, "file2.txt"); fs.mkdirSync(dirToWatch); count++; + return { + dirToWatch:dirToWatch, + file0ToWatch:file0ToWatch, + file1ToWatch:file1ToWatch, + subDirToWatch:subDirToWatch, + file2ToWatch:file2ToWatch + } } function wait(msec, func) { setTimeout(func, msec); } - - function rmdir(dir_path, done) { - function collect(dir_path, files, dirs) { - var elems = fs.readdirSync(dir_path); - elems.forEach(function(elem) { - var elem_path = path.join(dir_path, elem); - var stat = fs.lstatSync(elem_path); - if(stat.isDirectory()) { - var r = collect(elem_path, files, dirs); - files = r[0]; - dirs = r[1]; - } else { - files.push(elem_path); - } - }); - dirs.push(dir_path); - return [files, dirs]; - } - function seq(func, list, cont) { - if(list.length > 0) { - var elem = list.shift(); - func(elem, function(err) { - if(err) { - throw err; - } - seq(func, list, cont); - }); - } - else { - cont(); - } - } - var r = collect(dir_path, [], []); - var files = r[0]; - var dirs = r[1]; - seq(fs.unlink, files, - function() { - seq(fs.rmdir, dirs, done); - }); - } before(function(done) { - fs.mkdirSync(baseDir); + fs.ensureDirSync(baseDir); done(); }); after(function(done) { - rmdir(baseDir, done); - }); - - beforeEach(function(done) { - prepareDir(); + fs.removeSync(baseDir); done(); }); @@ -114,27 +72,32 @@ describe('watch Node', function() { var count = 0; var len = Object.keys(results).length; n2.on("input", function(msg) { - msg.should.have.property('file'); + try { + // console.log(msg); + msg.should.have.property('file'); - var file = msg.file; - if(file in processed) { - // multiple messages come in rare case - return; - } - processed[file] = true; - (file in results).should.be.true; + var file = msg.file; + if (file in processed) { + // multiple messages come in rare case + return; + } + processed[file] = true; + (file in results).should.be.true(); - var result = results[file]; - msg.should.have.property('payload', result.payload); - msg.should.have.property('type', result.type); - if('size' in result) { - msg.should.have.property('size', result.size); - } - count++; - if(count === len) { - n1.close(); - // wait for close - wait(500, done); + var result = results[file]; + msg.should.have.property('payload', result.payload); + msg.should.have.property('type', result.type); + if('size' in result) { + msg.should.have.property('size', result.size); + } + count++; + if(count === len) { + n1.close(); + // wait for close + wait(100, done); + } + }catch(err) { + done(err); } }); // wait for preparation @@ -143,106 +106,116 @@ describe('watch Node', function() { } it('should watch a file to be changed', function(done) { - fs.writeFileSync(file0ToWatch, ''); + var files = prepareDir(); + fs.writeFileSync(files.file0ToWatch, ''); var flow = [{id:"n1", type:"watch", name: "watch", - files: file0ToWatch, recursive: false, + files: files.file0ToWatch, recursive: false, wires:[["n2"]]}, {id:"n2", type:"helper"}]; var results = { 'file0.txt' : { - 'payload' : file0ToWatch, - 'topic': file0ToWatch, + 'payload' : files.file0ToWatch, + 'topic': files.file0ToWatch, 'type': 'file', 'size': 5 } }; testWatch(flow, function() { - fs.appendFileSync(file0ToWatch, "ABCDE"); + fs.appendFileSync(files.file0ToWatch, "ABCDE"); }, results, done); }); it('should watch multiple files to be changed', function(done) { - fs.writeFileSync(file0ToWatch, ''); - fs.writeFileSync(file1ToWatch, ''); - var files = file0ToWatch +","+file1ToWatch; + var files = prepareDir(); + fs.writeFileSync(files.file0ToWatch, ''); + fs.writeFileSync(files.file1ToWatch, ''); var flow = [{id:"n1", type:"watch", name: "watch", - files: files, recursive: false, + files: files.file0ToWatch +","+files.file1ToWatch, recursive: false, wires:[["n2"]]}, {id:"n2", type:"helper"}]; var results = { 'file0.txt' : { - 'payload' : file0ToWatch, - 'topic': file0ToWatch, - 'type': 'file', - 'size': 5 + 'payload' : files.file0ToWatch, + 'topic': files.file0ToWatch, + 'type': 'file'//, + // 'size': 5 }, 'file1.txt' : { - 'payload' : file1ToWatch, - 'topic': file1ToWatch, - 'type': 'file', - 'size': 3 + 'payload' : files.file1ToWatch, + 'topic': files.file1ToWatch, + 'type': 'file'//, + // 'size': 3 } }; testWatch(flow, function() { - fs.appendFileSync(file0ToWatch, "ABCDE"); - fs.appendFileSync(file1ToWatch, "123"); + fs.appendFileSync(files.file0ToWatch, "ABCDE"); + fs.appendFileSync(files.file1ToWatch, "123"); }, results, done); }); it('should watch attribute of a file to be changed', function(done) { - fs.writeFileSync(file0ToWatch, ''); - fs.chmodSync(file0ToWatch, 0o444); + var files = prepareDir(); + fs.writeFileSync(files.file0ToWatch, ''); + fs.chmodSync(files.file0ToWatch, 0o444); var flow = [{id:"n1", type:"watch", name: "watch", - files: file0ToWatch, recursive: false, + files: files.file0ToWatch, recursive: false, wires:[["n2"]]}, {id:"n2", type:"helper"}]; var results = { 'file0.txt' : { - 'payload' : file0ToWatch, - 'topic': file0ToWatch, - 'type': 'file', - 'size': 0 + 'payload' : files.file0ToWatch, + 'topic': files.file0ToWatch, + 'type': 'file'//, + // 'size': 0 } }; testWatch(flow, function() { - fs.chmodSync(file0ToWatch, 0o777); + fs.chmodSync(files.file0ToWatch, 0o777); }, results, done); }); it('should watch a file in a directory to be changed', function(done) { - fs.writeFileSync(file0ToWatch, ''); + var files = prepareDir(); + fs.writeFileSync(files.file0ToWatch, ''); var flow = [{id:"n1", type:"watch", name: "watch", - files: dirToWatch, recursive: true, + files: files.dirToWatch, recursive: true, wires:[["n2"]]}, {id:"n2", type:"helper"}]; var results = { 'file0.txt' : { - 'payload' : file0ToWatch, - 'topic': file0ToWatch, - 'type': 'file', - 'size': 5 + 'payload' : files.file0ToWatch, + 'topic': files.file0ToWatch, + 'type': 'file'//, + // 'size': 5 } }; testWatch(flow, function() { - fs.appendFileSync(file0ToWatch, "ABCDE"); + fs.appendFileSync(files.file0ToWatch, "ABCDE"); }, results, done); }); it('should watch a sub directory in a directory to be changed', function(done) { - fs.mkdirSync(subDirToWatch); + var files = prepareDir(); + fs.mkdirSync(files.subDirToWatch); var flow = [{id:"n1", type:"watch", name: "watch", - files: dirToWatch, recursive: true, + files: files.dirToWatch, recursive: true, wires:[["n2"]]}, {id:"n2", type:"helper"}]; var results = { + 'subdir': { + payload: files.subDirToWatch, + topic: files.dirToWatch, + file: 'subdir', + type: 'directory' + }, 'file2.txt': { - payload: file2ToWatch, - type: 'file', - size: 5 + payload: files.file2ToWatch, + type: 'file'//, + // size: 5 } }; testWatch(flow, function() { - fs.appendFileSync(file2ToWatch, "ABCDE"); + fs.appendFileSync(files.file2ToWatch, "ABCDE"); }, results, done); });