Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

make simple\test-fs-symlink.js work on windows

  • Loading branch information...
Igor Zinkovsky authored and ry committed Oct 22, 2011
1 parent 8f1ba25 commit 8498ee03bc271e4d886c02fab9af2d2d47d2ddb0
Showing with 59 additions and 25 deletions.
  1. +59 −25 test/simple/test-fs-symlink.js
@@ -19,42 +19,76 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

// libuv-broken


var common = require('../common');
var assert = require('assert');
var path = require('path');
var fs = require('fs');
var exec = require('child_process').exec;
var completed = 0;
var expected_tests = 2;

var is_windows = process.platform === 'win32';

var runtest = function(skip_symlinks) {
if (!skip_symlinks) {
// test creating and reading symbolic link
var linkData = path.join(common.fixturesDir, '/cycles/root.js');
var linkPath = path.join(common.tmpDir, 'symlink1.js');

// Delete previously created link
try {
fs.unlinkSync(linkPath);
} catch(e)
{}

fs.symlink(linkData, linkPath, function(err) {
if (err) throw err;
console.log('symlink done');
// todo: fs.lstat?
fs.readlink(linkPath, function(err, destination) {
if (err) throw err;
assert.equal(destination, linkData);
completed++;
});
});
}

// test creating and reading symbolic link
var linkData = path.join(common.fixturesDir, '/cycles/root.js');
var linkPath = path.join(common.tmpDir, 'symlink1.js');
fs.symlink(linkData, linkPath, function(err) {
if (err) throw err;
console.log('symlink done');
// todo: fs.lstat?
fs.readlink(linkPath, function(err, destination) {
// test creating and reading hard link
var srcPath = path.join(common.fixturesDir, 'cycles', 'root.js');
var dstPath = path.join(common.tmpDir, 'link1.js');

// Delete previously created link
try {
fs.unlinkSync(dstPath);
} catch(e)
{}

fs.link(srcPath, dstPath, function(err) {
if (err) throw err;
assert.equal(destination, linkData);
console.log('hard link done');
var srcContent = fs.readFileSync(srcPath, 'utf8');
var dstContent = fs.readFileSync(dstPath, 'utf8');
assert.equal(srcContent, dstContent);
completed++;
});
});
}

// test creating and reading hard link
var srcPath = path.join(common.fixturesDir, 'cycles', 'root.js');
var dstPath = path.join(common.tmpDir, 'link1.js');
fs.link(srcPath, dstPath, function(err) {
if (err) throw err;
console.log('hard link done');
var srcContent = fs.readFileSync(srcPath, 'utf8');
var dstContent = fs.readFileSync(dstPath, 'utf8');
assert.equal(srcContent, dstContent);
completed++;
});
if (is_windows) {
// On Windows, creating symlinks requires admin privileges.
// We'll only try to run symlink test if we have enough privileges.
exec("whoami /priv", function(err, o) {
if (err || o.indexOf('SeCreateSymbolicLinkPrivilege') == -1) {
expected_tests = 1;
runtest(true);
} else {
runtest(false);
}
});
} else {
runtest(false);
}

process.on('exit', function() {
assert.equal(completed, 2);
assert.equal(completed, expected_tests);
});

0 comments on commit 8498ee0

Please sign in to comment.
You can’t perform that action at this time.