Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) Safe-mode: OFF (not secure) /var/www/html/node-red/test/nodes/core/storage/ drwxr-xr-x | |
| Viewing file: Select action/file-type: /**
* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
var fs = require("fs-extra");
var path = require("path");
var should = require("should");
var helper = require("node-red-node-test-helper");
var watchNode = require("nr-test-utils").require("@node-red/nodes/core/storage/23-watch.js");
describe('watch Node', function() {
this.timeout(5000);
var resourcesDir = path.join(__dirname,"..","..","..","resources");
var baseDir = path.join(resourcesDir, "23-watch-test-dir");
var count = 0;
function prepareDir() {
var dirToWatch = path.join(baseDir, "base"+count);
fs.mkdirSync(dirToWatch);
count++;
return {
dirToWatch:dirToWatch,
file0ToWatch:path.join(dirToWatch, "file0.txt"),
file1ToWatch:path.join(dirToWatch, "file1.txt"),
subDirToWatch:path.join(dirToWatch, "subdir"),
file2ToWatch:path.join(dirToWatch, "subdir", "file2.txt")
}
}
function wait(msec, func) {
setTimeout(func, msec);
}
before(function(done) {
fs.ensureDirSync(baseDir);
done();
});
after(function(done) {
fs.removeSync(baseDir);
done();
});
afterEach(function(done) {
helper.unload();
done();
});
function testWatch(flow, change_func, results, done) {
var processed = {};
helper.load(watchNode, flow, function() {
var n1 = helper.getNode("n1");
var n2 = helper.getNode("n2");
var count = 0;
var len = Object.keys(results).length;
n2.on("input", function(msg) {
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;
if (file === 'subdir') {
// On OSX, we get a change event on subdir when a file inside changes.
// On Travis, we don't. *sigh*
return;
}
(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(100, done);
}
}catch(err) {
done(err);
}
});
// wait for preparation
wait(500, change_func);
});
}
it('should watch a file to be changed', function(done) {
var files = prepareDir();
fs.writeFileSync(files.file0ToWatch, '');
var flow = [{id:"n1", type:"watch", name: "watch",
files: files.file0ToWatch, recursive: false,
wires:[["n2"]]},
{id:"n2", type:"helper"}];
var results = {
'file0.txt' : {
'payload' : files.file0ToWatch,
'topic': files.file0ToWatch,
'type': 'file',
'size': 5
}
};
testWatch(flow, function() {
fs.appendFileSync(files.file0ToWatch, "ABCDE");
}, results, done);
});
it('should watch multiple files to be changed', function(done) {
var files = prepareDir();
fs.writeFileSync(files.file0ToWatch, '');
fs.writeFileSync(files.file1ToWatch, '');
var flow = [{id:"n1", type:"watch", name: "watch",
files: files.file0ToWatch +","+files.file1ToWatch, recursive: false,
wires:[["n2"]]},
{id:"n2", type:"helper"}];
var results = {
'file0.txt' : {
'payload' : files.file0ToWatch,
'topic': files.file0ToWatch,
'type': 'file'//,
// 'size': 5
},
'file1.txt' : {
'payload' : files.file1ToWatch,
'topic': files.file1ToWatch,
'type': 'file'//,
// 'size': 3
}
};
testWatch(flow, function() {
fs.appendFileSync(files.file0ToWatch, "ABCDE");
fs.appendFileSync(files.file1ToWatch, "123");
}, results, done);
});
it('should watch attribute of a file to be changed', function(done) {
var files = prepareDir();
fs.writeFileSync(files.file0ToWatch, '');
fs.chmodSync(files.file0ToWatch, 0o444);
var flow = [{id:"n1", type:"watch", name: "watch",
files: files.file0ToWatch, recursive: false,
wires:[["n2"]]},
{id:"n2", type:"helper"}];
var results = {
'file0.txt' : {
'payload' : files.file0ToWatch,
'topic': files.file0ToWatch,
'type': 'file'//,
// 'size': 0
}
};
testWatch(flow, function() {
fs.chmodSync(files.file0ToWatch, 0o777);
}, results, done);
});
it('should watch a file in a directory to be changed', function(done) {
var files = prepareDir();
fs.writeFileSync(files.file0ToWatch, '');
var flow = [{id:"n1", type:"watch", name: "watch",
files: files.dirToWatch, recursive: true,
wires:[["n2"]]},
{id:"n2", type:"helper"}];
var results = {
'file0.txt' : {
'payload' : files.file0ToWatch,
'topic': files.file0ToWatch,
'type': 'file'//,
// 'size': 5
}
};
testWatch(flow, function() {
fs.appendFileSync(files.file0ToWatch, "ABCDE");
}, results, done);
});
it('should watch a sub directory in a directory to be changed', function(done) {
var files = prepareDir();
fs.mkdirSync(files.subDirToWatch);
var flow = [{id:"n1", type:"watch", name: "watch",
files: files.dirToWatch, recursive: true,
wires:[["n2"]]},
{id:"n2", type:"helper"}];
var results = {
'file2.txt': {
payload: files.file2ToWatch,
type: 'file'//,
// size: 5
}
};
testWatch(flow, function() {
fs.appendFileSync(files.file2ToWatch, "ABCDE");
}, results, done);
});
});
|
:: Command execute :: | |
--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0055 ]-- |