349c4d72c4
I think this was added for historical reasons when upstream plpython was not interrumpible, but that's not the case anymore. Right now, either we adapt it to use plpython2u or plpython3u depending on what's available, or we just remove it since upstream was fixed several years ago. It's simpler to remove it
175 lines
5.5 KiB
JavaScript
175 lines
5.5 KiB
JavaScript
'use strict';
|
|
|
|
const util = require('util');
|
|
const path = require('path');
|
|
const exec = util.promisify(require('child_process').exec);
|
|
|
|
if (!process.env.NODE_ENV) {
|
|
console.error('Please set "NODE_ENV" variable, e.g.: "NODE_ENV=test"');
|
|
process.exit(1);
|
|
}
|
|
|
|
const environment = require(`../config/environments/${process.env.NODE_ENV}.js`);
|
|
const REDIS_PORT = environment.redis_port;
|
|
const REDIS_CELL_PATH = path.resolve(
|
|
process.platform === 'darwin'
|
|
? './test/support/libredis_cell.dylib'
|
|
: './test/support/libredis_cell.so'
|
|
);
|
|
|
|
const TEST_USER_ID = 1;
|
|
const TEST_USER = environment.db_user.replace('<%= user_id %>', TEST_USER_ID);
|
|
const TEST_PASSWORD = environment.db_user_pass.replace('<%= user_id %>', TEST_USER_ID);
|
|
const PUBLIC_USER = environment.db_pubuser;
|
|
const PUBLIC_USER_PASSWORD = environment.db_pubuser_pass;
|
|
const TEST_DB = environment.db_base_name.replace('<%= user_id %>', TEST_USER_ID);
|
|
const PGHOST = environment.db_host;
|
|
|
|
async function startRedis () {
|
|
await exec(`redis-server --port ${REDIS_PORT} --loadmodule ${REDIS_CELL_PATH} --logfile ${__dirname}/redis-server.log --daemonize yes`);
|
|
}
|
|
|
|
async function stopRedis () {
|
|
await exec(`redis-cli -p ${REDIS_PORT} shutdown`);
|
|
}
|
|
|
|
async function dropDatabase () {
|
|
await exec(`dropdb --if-exists ${TEST_DB}`, {
|
|
env: Object.assign({ PGUSER: 'postgres' }, process.env)
|
|
});
|
|
}
|
|
|
|
async function createDatabase () {
|
|
await exec(`createdb -T template_postgis -EUTF8 "${TEST_DB}"`, {
|
|
env: Object.assign({ PGUSER: 'postgres' }, process.env)
|
|
});
|
|
}
|
|
|
|
async function createDatabaseExtension () {
|
|
await exec(`psql -c "CREATE EXTENSION IF NOT EXISTS cartodb CASCADE;" ${TEST_DB}`, {
|
|
env: Object.assign({ PGUSER: 'postgres' }, process.env)
|
|
});
|
|
}
|
|
|
|
async function populateDatabase () {
|
|
const filenames = [
|
|
'test',
|
|
'populated_places_simple_reduced',
|
|
'quota_mock'
|
|
].map(filename => `${__dirname}/support/sql/${filename}.sql`);
|
|
|
|
const populateDatabaseCmd = `
|
|
cat ${filenames.join(' ')} |
|
|
sed -e "s/:PUBLICUSER/${PUBLIC_USER}/g" |
|
|
sed -e "s/:PUBLICPASS/${PUBLIC_USER_PASSWORD}/g" |
|
|
sed -e "s/:TESTUSER/${TEST_USER}/g" |
|
|
sed -e "s/:TESTPASS/${TEST_PASSWORD}/g" |
|
|
PGOPTIONS='--client-min-messages=WARNING' psql -q -v ON_ERROR_STOP=1 ${TEST_DB}
|
|
`;
|
|
|
|
await exec(populateDatabaseCmd, {
|
|
env: Object.assign({ PGUSER: 'postgres' }, process.env)
|
|
});
|
|
}
|
|
|
|
async function populateRedis () {
|
|
const commands = `
|
|
HMSET rails:users:vizzuality \
|
|
id ${TEST_USER_ID} \
|
|
database_name "${TEST_DB}" \
|
|
database_host "${PGHOST}" \
|
|
map_key 1234
|
|
|
|
HMSET rails:users:cartodb250user \
|
|
id ${TEST_USER_ID} \
|
|
database_name "${TEST_DB}" \
|
|
database_host "${PGHOST}" \
|
|
database_password "${TEST_PASSWORD}" \
|
|
map_key 1234
|
|
|
|
HMSET api_keys:vizzuality:1234 \
|
|
user "vizzuality" \
|
|
type "master" \
|
|
grants_sql "true" \
|
|
database_role "${TEST_USER}" \
|
|
database_password "${TEST_PASSWORD}"
|
|
|
|
HMSET api_keys:vizzuality:default_public \
|
|
user "vizzuality" \
|
|
type "default" \
|
|
grants_sql "true" \
|
|
database_role "${PUBLIC_USER}" \
|
|
database_password "${PUBLIC_USER_PASSWORD}"
|
|
|
|
HMSET api_keys:vizzuality:regular1 \
|
|
user "vizzuality" \
|
|
type "regular" \
|
|
grants_sql "true" \
|
|
database_role "regular_1" \
|
|
database_password "regular1"
|
|
|
|
HMSET api_keys:vizzuality:regular2 \
|
|
user "vizzuality" \
|
|
type "regular" \
|
|
grants_sql "true" \
|
|
database_role "regular_2" \
|
|
database_password "regular2"
|
|
|
|
HMSET api_keys:cartodb250user:1234 \
|
|
user "cartodb250user" \
|
|
type "master" \
|
|
grants_sql "true" \
|
|
database_role "${TEST_USER}" \
|
|
database_password "${TEST_PASSWORD}"
|
|
|
|
HMSET api_keys:cartodb250user:default_public \
|
|
user "cartodb250user" \
|
|
type "default" \
|
|
grants_sql "true" \
|
|
database_role "${PUBLIC_USER}" \
|
|
database_password "${PUBLIC_USER_PASSWORD}"
|
|
`;
|
|
|
|
const oauthCommands = `
|
|
HMSET rails:oauth_access_tokens:l0lPbtP68ao8NfStCiA3V3neqfM03JKhToxhUQTR \
|
|
consumer_key fZeNGv5iYayvItgDYHUbot1Ukb5rVyX6QAg8GaY2 \
|
|
consumer_secret IBLCvPEefxbIiGZhGlakYV4eM8AbVSwsHxwEYpzx \
|
|
access_token_token l0lPbtP68ao8NfStCiA3V3neqfM03JKhToxhUQTR \
|
|
access_token_secret 22zBIek567fMDEebzfnSdGe8peMFVFqAreOENaDK \
|
|
user_id ${TEST_USER_ID} \
|
|
time sometime
|
|
`;
|
|
|
|
await exec(`echo "${commands}" | redis-cli -p ${REDIS_PORT} -n 5`);
|
|
await exec(`echo "${oauthCommands}" | redis-cli -p ${REDIS_PORT} -n 3`);
|
|
}
|
|
|
|
async function main (args) {
|
|
let code = 0;
|
|
|
|
try {
|
|
switch (args[0]) {
|
|
case 'setup':
|
|
await startRedis();
|
|
await populateRedis();
|
|
await dropDatabase();
|
|
await createDatabase();
|
|
await createDatabaseExtension();
|
|
await populateDatabase();
|
|
break;
|
|
case 'teardown':
|
|
await stopRedis();
|
|
break;
|
|
default:
|
|
throw new Error('Missing "mode" argument. Valid ones: "setup" or "teardown"');
|
|
}
|
|
} catch (err) {
|
|
console.error(err);
|
|
code = 1;
|
|
} finally {
|
|
process.exit(code);
|
|
}
|
|
}
|
|
|
|
main(process.argv.slice(2));
|