summaryrefslogtreecommitdiff
path: root/test/parallel/test-fs-truncate-fd.js
diff options
context:
space:
mode:
authorSakthipriyan Vairamani <thechargingvolcano@gmail.com>2015-08-23 01:33:43 +0530
committerSakthipriyan Vairamani <thechargingvolcano@gmail.com>2016-07-22 03:58:33 +0530
commitc86c1eeab56df8a627d3d8da27008221ee295d33 (patch)
treee0a89469bd155e1ef853d2bd945f2ace2fd3bf38 /test/parallel/test-fs-truncate-fd.js
parent9359de9dd2eae06ed5afcb75dad9bd4c466eb69d (diff)
downloadandroid-node-v8-c86c1eeab56df8a627d3d8da27008221ee295d33.tar.gz
android-node-v8-c86c1eeab56df8a627d3d8da27008221ee295d33.tar.bz2
android-node-v8-c86c1eeab56df8a627d3d8da27008221ee295d33.zip
fs: validate args of truncate functions in js
This patch 1. moves the basic validation of arguments to `truncate` family of functions to the JavaScript layer from the C++ layer. 2. makes sure that the File Descriptors are validated strictly. PR-URL: https://github.com/nodejs/node/pull/2498 Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Diffstat (limited to 'test/parallel/test-fs-truncate-fd.js')
-rw-r--r--test/parallel/test-fs-truncate-fd.js76
1 files changed, 63 insertions, 13 deletions
diff --git a/test/parallel/test-fs-truncate-fd.js b/test/parallel/test-fs-truncate-fd.js
index 2514b80f09..29b03284a2 100644
--- a/test/parallel/test-fs-truncate-fd.js
+++ b/test/parallel/test-fs-truncate-fd.js
@@ -1,21 +1,71 @@
'use strict';
-var common = require('../common');
-var assert = require('assert');
-var path = require('path');
-var fs = require('fs');
-var tmp = common.tmpDir;
+const common = require('../common');
+const assert = require('assert');
+const fs = require('fs');
+const path = require('path');
+
common.refreshTmpDir();
-var filename = path.resolve(tmp, 'truncate-file.txt');
+const fds = [];
+const filename = path.resolve(common.tmpDir, 'truncate-file.txt');
fs.writeFileSync(filename, 'hello world', 'utf8');
-var fd = fs.openSync(filename, 'r+');
+const fd = fs.openSync(filename, 'r+');
+fds.push(fd);
fs.truncate(fd, 5, common.mustCall(function(err) {
- assert.ok(!err);
+ assert.ifError(err);
assert.equal(fs.readFileSync(filename, 'utf8'), 'hello');
}));
-process.on('exit', function() {
- fs.closeSync(fd);
- fs.unlinkSync(filename);
- console.log('ok');
-});
+{
+ // test partial truncation of a file
+ const fileName = path.resolve(common.tmpDir, 'truncate-file-1.txt');
+ console.log(fileName);
+ fs.writeFileSync(fileName, 'hello world', 'utf8');
+ const fd = fs.openSync(fileName, 'r+');
+ fds.push(fd);
+
+ fs.truncate(fd, 5, common.mustCall(function(err) {
+ assert.ifError(err);
+ assert.strictEqual(fs.readFileSync(fileName, 'utf8'), 'hello');
+ }));
+}
+
+{
+ // make sure numbers as strings are not treated as fds with sync version
+ const fileName = path.resolve(common.tmpDir, 'truncate-file-2.txt');
+ console.log(fileName);
+ fs.writeFileSync(fileName, 'One');
+ const fd = fs.openSync(fileName, 'r');
+ fds.push(fd);
+
+ const fdFileName = path.resolve(common.tmpDir, '' + fd);
+ fs.writeFileSync(fdFileName, 'Two');
+ assert.strictEqual(fs.readFileSync(fileName).toString(), 'One');
+ assert.strictEqual(fs.readFileSync(fdFileName).toString(), 'Two');
+
+ fs.truncateSync(fdFileName);
+ assert.strictEqual(fs.readFileSync(fileName).toString(), 'One');
+ assert.strictEqual(fs.readFileSync(fdFileName).toString(), '');
+}
+
+{
+ // make sure numbers as strings are not treated as fds with async version
+ const fileName = path.resolve(common.tmpDir, 'truncate-file-3.txt');
+ console.log(fileName);
+ fs.writeFileSync(fileName, 'One');
+ const fd = fs.openSync(fileName, 'r');
+ fds.push(fd);
+
+ const fdFileName = path.resolve(common.tmpDir, '' + fd);
+ fs.writeFileSync(fdFileName, 'Two');
+ assert.strictEqual(fs.readFileSync(fileName).toString(), 'One');
+ assert.strictEqual(fs.readFileSync(fdFileName).toString(), 'Two');
+
+ fs.truncate(fdFileName, common.mustCall(function(err) {
+ assert.ifError(err);
+ assert.strictEqual(fs.readFileSync(fileName).toString(), 'One');
+ assert.strictEqual(fs.readFileSync(fdFileName).toString(), '');
+ }));
+}
+
+process.on('exit', () => fds.forEach((fd) => fs.closeSync(fd)));