107 lines
3.1 KiB
JavaScript
107 lines
3.1 KiB
JavaScript
|
define(["Filer", "util"], function(Filer, util) {
|
||
|
|
||
|
describe('node times (atime, mtime, ctime) with mount flags', function() {
|
||
|
|
||
|
var dirname = "/dir";
|
||
|
var filename = "/dir/file";
|
||
|
|
||
|
function memoryFS(flags, callback) {
|
||
|
var name = util.uniqueName();
|
||
|
var fs = new Filer.FileSystem({
|
||
|
name: name,
|
||
|
flags: flags || [],
|
||
|
provider: new Filer.FileSystem.providers.Memory(name)
|
||
|
}, callback);
|
||
|
}
|
||
|
|
||
|
function createTree(fs, callback) {
|
||
|
fs.mkdir(dirname, function(error) {
|
||
|
if(error) throw error;
|
||
|
|
||
|
fs.open(filename, 'w', function(error, fd) {
|
||
|
if(error) throw error;
|
||
|
|
||
|
fs.close(fd, callback);
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function stat(fs, path, callback) {
|
||
|
fs.stat(path, function(error, stats) {
|
||
|
if(error) throw error;
|
||
|
|
||
|
callback(stats);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* We test the actual time updates in times.spec.js, whereas these just test
|
||
|
* the overrides with the mount flags. The particular fs methods called
|
||
|
* are unimportant, but are known to affect the particular times being suppressed.
|
||
|
*/
|
||
|
|
||
|
it('should not update ctime when calling fs.rename() with NOCTIME', function(done) {
|
||
|
memoryFS(['NOCTIME'], function(error, fs) {
|
||
|
var newfilename = filename + '1';
|
||
|
|
||
|
createTree(fs, function() {
|
||
|
stat(fs, filename, function(stats1) {
|
||
|
|
||
|
fs.rename(filename, newfilename, function(error) {
|
||
|
if(error) throw error;
|
||
|
|
||
|
stat(fs, newfilename, function(stats2) {
|
||
|
expect(stats2.ctime).to.equal(stats1.ctime);
|
||
|
expect(stats2.mtime).to.equal(stats1.mtime);
|
||
|
expect(stats2.atime).to.equal(stats1.atime);
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('should not update ctime, mtime, atime when calling fs.truncate() with NOCTIME, NOMTIME', function(done) {
|
||
|
memoryFS(['NOCTIME', 'NOMTIME'], function(error, fs) {
|
||
|
createTree(fs, function() {
|
||
|
stat(fs, filename, function(stats1) {
|
||
|
|
||
|
fs.truncate(filename, 5, function(error) {
|
||
|
if(error) throw error;
|
||
|
|
||
|
stat(fs, filename, function(stats2) {
|
||
|
expect(stats2.ctime).to.equal(stats1.ctime);
|
||
|
expect(stats2.mtime).to.equal(stats1.mtime);
|
||
|
expect(stats2.atime).to.equal(stats1.atime);
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it('should not update mtime when calling fs.truncate() with NOMTIME', function(done) {
|
||
|
memoryFS(['NOMTIME'], function(error, fs) {
|
||
|
createTree(fs, function() {
|
||
|
stat(fs, filename, function(stats1) {
|
||
|
|
||
|
fs.truncate(filename, 5, function(error) {
|
||
|
if(error) throw error;
|
||
|
|
||
|
stat(fs, filename, function(stats2) {
|
||
|
expect(stats2.ctime).to.be.above(stats1.ctime);
|
||
|
expect(stats2.mtime).to.equal(stats1.mtime);
|
||
|
expect(stats2.atime).to.be.above(stats1.atime);
|
||
|
done();
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
});
|
||
|
});
|