diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-08-28 19:19:26 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-08-28 19:19:26 -0700 |
commit | ffd0f62f997d4ff774a62da65ad2fdbba4b0ab3e (patch) | |
tree | 0c48515066561c8b83bd73ba15743aa9d9138331 /tests | |
parent | 08c9642ea8db020ad90d75fa19e521214194fb51 (diff) | |
parent | 8b4db69024285124e7ca62ec10cd53478f6cfc24 (diff) |
Merge pull request #1567 from rharkeadsk/fix-device-permissions
Fix permissions set by FS.createDevice
Diffstat (limited to 'tests')
-rw-r--r-- | tests/filesystem/src.js | 7 | ||||
-rw-r--r-- | tests/test_core.py | 5 | ||||
-rw-r--r-- | tests/unistd/curdir.js | 5 | ||||
-rw-r--r-- | tests/unistd/io.c | 13 | ||||
-rw-r--r-- | tests/unistd/io.js | 61 | ||||
-rw-r--r-- | tests/unistd/io.out | 5 |
6 files changed, 78 insertions, 18 deletions
diff --git a/tests/filesystem/src.js b/tests/filesystem/src.js index ceea348d..dbdd4bed 100644 --- a/tests/filesystem/src.js +++ b/tests/filesystem/src.js @@ -1,10 +1,13 @@ +var dummy_device = FS.makedev(64, 0); +FS.registerDevice(dummy_device, {}); + FS.createFolder('/', 'forbidden', false, false); FS.createFolder('/forbidden', 'test', true, true); FS.createPath('/', 'abc/123', true, true); FS.createPath('/', 'abc/456', true, true); FS.createPath('/', 'def/789', true, true); -FS.createDevice('/abc', 'deviceA', function() {}, function() {}); -FS.createDevice('/def', 'deviceB', function() {}, function() {}); +FS.mkdev('/abc/deviceA', 0666, dummy_device); +FS.mkdev('/def/deviceB', 0666, dummy_device); FS.createLink('/abc', 'localLink', '123', true, true); FS.createLink('/abc', 'rootLink', '/', true, true); FS.createLink('/abc', 'relativeLink', '../def', true, true); diff --git a/tests/test_core.py b/tests/test_core.py index 81d26595..17707c44 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -6977,8 +6977,11 @@ def process(filename): src = open(filename, 'r').read().replace( '// {{PRE_RUN_ADDITIONS}}', \'\'\' + var dummy_device = FS.makedev(64, 0); + FS.registerDevice(dummy_device, {}); + FS.createDataFile('/', 'file', 'abcdef', true, true); - FS.createDevice('/', 'device', function() {}, function() {}); + FS.mkdev('/device', 0666, dummy_device); \'\'\' ) open(filename, 'w').write(src) diff --git a/tests/unistd/curdir.js b/tests/unistd/curdir.js index e271b9da..75a1d2ce 100644 --- a/tests/unistd/curdir.js +++ b/tests/unistd/curdir.js @@ -1,4 +1,7 @@ +var dummy_device = FS.makedev(64, 0); +FS.registerDevice(dummy_device, {}); + FS.createDataFile('/', 'file', '', true, true); FS.createFolder('/', 'folder', true, true); -FS.createDevice('/', 'device', function() {}, function() {}); +FS.mkdev('/device', 0666, dummy_device); FS.createLink('/', 'link', 'folder', true, true); diff --git a/tests/unistd/io.c b/tests/unistd/io.c index eeb80373..a96290ef 100644 --- a/tests/unistd/io.c +++ b/tests/unistd/io.c @@ -34,6 +34,19 @@ int main() { printf("errno: %d\n\n", errno); errno = 0; + int cd_ro_r = open("/createDevice-read-only", O_RDONLY); + printf("open read-only device from createDevice for read, errno: %d\n", errno); + errno = 0; + int cd_ro_w = open("/createDevice-read-only", O_WRONLY); + printf("open read-only device from createDevice for write, errno: %d\n", errno); + errno = 0; + int cd_wo_r = open("/createDevice-write-only", O_RDONLY); + printf("open write-only device from createDevice for read, errno: %d\n", errno); + errno = 0; + int cd_wo_w = open("/createDevice-write-only", O_WRONLY); + printf("open write-only device from createDevice for write, errno: %d\n\n", errno); + errno = 0; + int f = open("/file", O_RDWR); printf("read from file: %d\n", read(f, readBuffer, sizeof readBuffer)); printf("data: %s\n", readBuffer); diff --git a/tests/unistd/io.js b/tests/unistd/io.js index e2e442ec..11c0da79 100644 --- a/tests/unistd/io.js +++ b/tests/unistd/io.js @@ -1,19 +1,52 @@ (function() { - var devicePayload = [65, 66, 67, 68]; - FS.createDevice('/', 'device', function() { - if (devicePayload.length) { - return devicePayload.shift(); - } else { - return null; + var major = 80; + + var device = FS.makedev(major++, 0); + var device_ops = { + open: function(stream) { + stream.payload = [65, 66, 67, 68]; + }, + read: function(stream, buffer, offset, length, pos) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + if (stream.payload.length) { + bytesRead++; + buffer[offset+i] = stream.payload.shift(); + } else { + break; + } + } + return bytesRead; + }, + write: function(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + Module.print("TO DEVICE: " + buffer[offset+i]); + } + return i; } - }, function(arg) { - Module.print("TO DEVICE: " + arg); - }); - FS.createDevice('/', 'broken-device', function() { - throw new Error('Broken device input.'); - }, function(arg) { - throw new Error('Broken device output.'); - }); + }; + FS.registerDevice(device, device_ops); + + FS.mkdev('/device', 0666, device); + + var broken_device = FS.makedev(major++, 0); + var broken_device_ops = { + read: function(stream, buffer, offset, length, pos) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + }, + write: function(stream, buffer, offset, length, pos) { + throw new FS.ErrnoError(ERRNO_CODES.EIO); + } + }; + FS.registerDevice(broken_device, broken_device_ops); + + FS.mkdev('/broken-device', 0666, broken_device); + + // NB: These are meant to test FS.createDevice specifically, + // and as such do not use registerDevice/mkdev + FS.createDevice('/', 'createDevice-read-only', function() {}); + FS.createDevice('/', 'createDevice-write-only', null, function() {}); + FS.createDataFile('/', 'file', '1234567890', true, true); FS.createFolder('/', 'folder', true, true); })(); diff --git a/tests/unistd/io.out b/tests/unistd/io.out index 3061b94e..037d0c34 100644 --- a/tests/unistd/io.out +++ b/tests/unistd/io.out @@ -22,6 +22,11 @@ TO DEVICE: 0 write to device: 8 errno: 0 +open read-only device from createDevice for read, errno: 0 +open read-only device from createDevice for write, errno: 13 +open write-only device from createDevice for read, errno: 13 +open write-only device from createDevice for write, errno: 0 + read from file: 10 data: 1234567890 errno: 0 |