Skip to content

Commit

Permalink
Merge pull request #30 from ilikebits/master
Browse files Browse the repository at this point in the history
Attempt to cache using a temp file if home is unwriteable
  • Loading branch information
Tyler Kellen committed Dec 8, 2015
2 parents 7ae0bad + 4cf22f8 commit b4b8a91
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 18 deletions.
13 changes: 11 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,17 @@ function fail (err) {

function openConfig (cb) {
var userHome = require('user-home');
var configpath = path.join(userHome || os.tmpdir(), configfile);
var content;
if (!userHome) {
return tryOpenConfig(path.join(os.tmpdir(), configfile), cb);
}

tryOpenConfig(path.join(userHome, configfile), function (err, fd) {
if (err) return tryOpenConfig(path.join(os.tmpdir(), configfile), cb);
return cb(null, fd);
});
}

function tryOpenConfig (configpath, cb) {
try {
// if the config file is valid, it should be json and therefore
// node should be able to require it directly. if this doesn't
Expand Down
44 changes: 28 additions & 16 deletions test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const fs = require('fs');
const path = require('path');
const os = require('os');

const async = require('async');
const expect = require('chai').expect;
Expand All @@ -17,30 +18,31 @@ function eraseHome() {
delete env.USERNAME;
}

function setTemp() {
env.TMPDIR = env.TEMP = env.TMP = '/nope';
function setTemp(dir) {
env.TMPDIR = env.TEMP = env.TMP = dir;
}

function cleanup () {
delete require.cache[require.resolve('os')];
delete require.cache[require.resolve('user-home')];
var os = require('os')
var v8flags = require('./');
try {
[
path.resolve(require('user-home'), v8flags.configfile),
path.resolve(os.tmpdir(), v8flags.configfile),
path.resolve('/tmp', v8flags.configfile)
].map(fs.unlinkSync);
} catch (e) {}
delete require.cache[require.resolve('os')];
var userHome = require('user-home');
if (userHome === null) userHome = __dirname;

var files = [
path.resolve(userHome, v8flags.configfile),
path.resolve(os.tmpdir(), v8flags.configfile),
];
files.forEach(function (file) {
try {
fs.unlinkSync(file);
} catch (e) {}
});

delete require.cache[require.resolve('user-home')];
delete process.versions.electron;
}

describe('v8flags', function () {

beforeEach(cleanup)
beforeEach(cleanup);
afterEach(cleanup);

it('should cache and call back with the v8 flags for the running process', function (done) {
Expand Down Expand Up @@ -70,7 +72,17 @@ describe('v8flags', function () {

it('should fall back to writing to a temp dir if user home can\'t be found', function (done) {
eraseHome();
var os = require('os');
var v8flags = require('./');
var configfile = path.resolve(os.tmpdir(), v8flags.configfile);
v8flags(function (err, flags) {
expect(fs.existsSync(configfile)).to.be.true;
done();
});
});

it('should fall back to writing to a temp dir if user home is unwriteable', function (done) {
eraseHome();
env.HOME = path.join(__dirname, 'does-not-exist');
var v8flags = require('./');
var configfile = path.resolve(os.tmpdir(), v8flags.configfile);
v8flags(function (err, flags) {
Expand Down

0 comments on commit b4b8a91

Please sign in to comment.