const fs = require('fs-extra') const rimraf = require('rimraf') const path = require('path') const OIDCProvider = require('@solid/oidc-op') const dns = require('dns') const ldnode = require('../index') const supertest = require('supertest') const TEST_HOSTS = ['nic.localhost', 'tim.localhost', 'nicola.localhost'] exports.rm = function (file) { return rimraf.sync(path.join(__dirname, '/resources/' + file)) } exports.cleanDir = function (dirPath) { fs.removeSync(path.join(dirPath, '.well-known/.acl')) fs.removeSync(path.join(dirPath, '.acl')) fs.removeSync(path.join(dirPath, 'favicon.ico')) fs.removeSync(path.join(dirPath, 'favicon.ico.acl')) fs.removeSync(path.join(dirPath, 'index.html')) fs.removeSync(path.join(dirPath, 'index.html.acl')) fs.removeSync(path.join(dirPath, 'robots.txt')) fs.removeSync(path.join(dirPath, 'robots.txt.acl')) } exports.write = function (text, file) { return fs.writeFileSync(path.join(__dirname, '/resources/' + file), text) } exports.cp = function (src, dest) { return fs.copySync( path.join(__dirname, '/resources/' + src), path.join(__dirname, '/resources/' + dest)) } exports.read = function (file) { return fs.readFileSync(path.join(__dirname, '/resources/' + file), { encoding: 'utf8' }) } // Backs up the given file exports.backup = function (src) { exports.cp(src, src + '.bak') } // Restores a backup of the given file exports.restore = function (src) { exports.cp(src + '.bak', src) exports.rm(src + '.bak') } // Verifies that all HOSTS entries are present exports.checkDnsSettings = function () { return Promise.all(TEST_HOSTS.map(hostname => { return new Promise((resolve, reject) => { dns.lookup(hostname, (error, ip) => { if (error || ip !== '127.0.0.1') { reject(error) } else { resolve(true) } }) }) })) .catch(() => { throw new Error(`Expected HOSTS entries of 127.0.0.1 for ${TEST_HOSTS.join()}`) }) } /** * @param configPath {string} * * @returns {Promise} */ exports.loadProvider = function loadProvider (configPath) { return Promise.resolve() .then(() => { const config = require(configPath) const provider = new OIDCProvider(config) return provider.initializeKeyChain(config.keys) }) } exports.createServer = createServer function createServer (options) { return ldnode.createServer(options) } exports.setupSupertestServer = setupSuperServer function setupSuperServer (options) { const ldpServer = createServer(options) return supertest(ldpServer) }