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.

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 italoacasas committed Jan 30, 2017
1 parent c6618df commit 825842c
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 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) {
assert.ifError(err);
const real_groups = stdout.match(/\d+/g).map(Number);
assert.strictEqual(groups.length, real_groups.length);
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 825842c

Please sign in to comment.