diff --git a/test/simple/test-fs-symlink.js b/test/simple/test-fs-symlink.js index dba88d115a2..83bf13e4943 100644 --- a/test/simple/test-fs-symlink.js +++ b/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; -// 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) { +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 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); });