Skip to content

Commit

Permalink
test: getgroups() may contain duplicate GIDs
Browse files Browse the repository at this point in the history
Some systems may have multiple group names with the same group ID, in
which case getgroups() returns duplicate values, where `id -G` will
filter the duplicates. Unique and sort the arrays so they can be
compared.

Backport-PR-URL: nodejs/node#12468
PR-URL: nodejs/node#10389
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Gibson Fahnestock <[email protected]>
Reviewed-By: Michael Dawson <[email protected]>
  • Loading branch information
sam-github authored and andrew749 committed Jul 19, 2017
1 parent 45a3e33 commit 4630787
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions test/parallel/test-process-getgroups.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const exec = require('child_process').exec;

// Check `id -G` and `process.getgroups()` return same groups.

if (common.isOSX) {
common.skip('Output of `id -G` is unreliable on Darwin.');
return;
}
const assert = require('assert');
const exec = require('child_process').exec;

if (typeof process.getgroups === 'function') {
const groups = process.getgroups();
const groups = unique(process.getgroups());
assert(Array.isArray(groups));
assert(groups.length > 0);
exec('id -G', function(err, stdout) {
if (err) throw err;
const real_groups = stdout.match(/\d+/g).map(Number);
assert.strictEqual(groups.length, real_groups.length);
assert.ifError(err);
const real_groups = unique(stdout.match(/\d+/g).map(Number));
assert.deepStrictEqual(groups, real_groups);
check(groups, real_groups);
check(real_groups, groups);
});
Expand All @@ -24,3 +26,7 @@ if (typeof process.getgroups === 'function') {
function check(a, b) {
for (let i = 0; i < a.length; ++i) assert.notStrictEqual(b.indexOf(a[i]), -1);
}

function unique(groups) {
return [...new Set(groups)].sort();
}

0 comments on commit 4630787

Please sign in to comment.