mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.0 KiB
79 lines
2.0 KiB
if (!process.getuid || !process.getgid) {
|
|
throw new Error("Tests require getuid/getgid support")
|
|
}
|
|
|
|
var curUid = +process.getuid()
|
|
, curGid = +process.getgid()
|
|
, chownr = require("../")
|
|
, test = require("tap").test
|
|
, mkdirp = require("mkdirp")
|
|
, rimraf = require("rimraf")
|
|
, fs = require("fs")
|
|
|
|
// sniff the 'id' command for other groups that i can legally assign to
|
|
var exec = require("child_process").exec
|
|
, groups
|
|
, dirs = []
|
|
|
|
exec("id", function (code, output) {
|
|
if (code) throw new Error("failed to run 'id' command")
|
|
groups = output.trim().split("groups=")[1].split(",").map(function (s) {
|
|
return parseInt(s, 10)
|
|
}).filter(function (g) {
|
|
return g !== curGid
|
|
})
|
|
|
|
console.error([curUid, groups[0]], "uid, gid")
|
|
|
|
rimraf("/tmp/chownr", function (er) {
|
|
if (er) throw er
|
|
var cnt = 5
|
|
for (var i = 0; i < 5; i ++) {
|
|
mkdirp(getDir(), then)
|
|
}
|
|
function then (er) {
|
|
if (er) throw er
|
|
if (-- cnt === 0) {
|
|
runTest()
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
function getDir () {
|
|
var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
|
|
var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
|
|
var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16);
|
|
var dir = "/tmp/chownr/" + [x,y,z].join("/")
|
|
dirs.push(dir)
|
|
return dir
|
|
}
|
|
|
|
function runTest () {
|
|
test("should complete successfully", function (t) {
|
|
console.error("calling chownr", curUid, groups[0], typeof curUid, typeof groups[0])
|
|
chownr.sync("/tmp/chownr", curUid, groups[0])
|
|
t.end()
|
|
})
|
|
|
|
dirs.forEach(function (dir) {
|
|
test("verify "+dir, function (t) {
|
|
fs.stat(dir, function (er, st) {
|
|
if (er) {
|
|
t.ifError(er)
|
|
return t.end()
|
|
}
|
|
t.equal(st.uid, curUid, "uid should be " + curUid)
|
|
t.equal(st.gid, groups[0], "gid should be "+groups[0])
|
|
t.end()
|
|
})
|
|
})
|
|
})
|
|
|
|
test("cleanup", function (t) {
|
|
rimraf("/tmp/chownr/", function (er) {
|
|
t.ifError(er)
|
|
t.end()
|
|
})
|
|
})
|
|
}
|
|
|