ack's fix + more tests for various cases

This commit is contained in:
David Humphrey (:humph) david.humphrey@senecacollege.ca 2014-08-17 17:15:00 -04:00
parent b3da2f7681
commit 1a2774b152
2 changed files with 35 additions and 9 deletions

View File

@ -573,11 +573,7 @@ function open_file(context, path, flags, callback) {
var followedCount = 0; var followedCount = 0;
if(ROOT_DIRECTORY_NAME == name) { if(ROOT_DIRECTORY_NAME == name) {
if(_(flags).contains(O_WRITE)) { callback(new Errors.EISDIR('the named file is the root directory'));
callback(new Errors.EISDIR('the named file is a directory and O_WRITE is set'));
} else {
find_node(context, path, set_file_node);
}
} else { } else {
find_node(context, parentPath, read_directory_data); find_node(context, parentPath, read_directory_data);
} }
@ -603,8 +599,8 @@ function open_file(context, path, flags, callback) {
callback(new Errors.ENOENT('O_CREATE and O_EXCLUSIVE are set, and the named file exists')); callback(new Errors.ENOENT('O_CREATE and O_EXCLUSIVE are set, and the named file exists'));
} else { } else {
directoryEntry = directoryData[name]; directoryEntry = directoryData[name];
if(directoryEntry.type == MODE_DIRECTORY && _(flags).contains(O_WRITE)) { if(directoryEntry.type == MODE_DIRECTORY) {
callback(new Errors.EISDIR('the named file is a directory and O_WRITE is set')); callback(new Errors.EISDIR('the named file is a directory'));
} else { } else {
context.getObject(directoryEntry.id, check_if_symbolic_link); context.getObject(directoryEntry.id, check_if_symbolic_link);
} }

View File

@ -2,11 +2,11 @@ var Filer = require('../..');
var util = require('../lib/test-utils.js'); var util = require('../lib/test-utils.js');
var expect = require('chai').expect; var expect = require('chai').expect;
describe('fs.readFile on a dir path', function() { describe('EISDIR when trying to open a dir path - issue 254', function() {
beforeEach(util.setup); beforeEach(util.setup);
afterEach(util.cleanup); afterEach(util.cleanup);
it('should fail with EISDIR', function(done) { it('should fail with EISDIR for root dir', function(done) {
var fs = util.fs(); var fs = util.fs();
fs.readFile('/', function(err) { fs.readFile('/', function(err) {
@ -14,4 +14,34 @@ describe('fs.readFile on a dir path', function() {
done(); done();
}); });
}); });
it('should fail with EISDIR for regular dir', function(done) {
var fs = util.fs();
fs.mkdir('/dir', function(err) {
if(err) throw err;
fs.readFile('/dir', function(err) {
expect(err.code).to.equal('EISDIR');
done();
});
});
});
it('should fail with EISDIR for symlinked dir', function(done) {
var fs = util.fs();
fs.mkdir('/dir', function(err) {
if(err) throw err;
fs.symlink('/dir', '/link', function(err) {
if(err) throw err;
fs.readFile('/link', function(err) {
expect(err.code).to.equal('EISDIR');
done();
});
});
});
});
}); });