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: #12468
PR-URL: #10389
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
  • Loading branch information
sam-github authored and MylesBorins committed Apr 19, 2017
1 parent eb47897 commit a1cb699
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 a1cb699

Please sign in to comment.