mirror of
https://github.com/jambonz/jambonz-api-server.git
synced 2025-12-19 05:47:46 +00:00
major merge of features from the hosted branch that was created temporarily during the initial launch of jambonz.org
93 lines
2.5 KiB
JavaScript
93 lines
2.5 KiB
JavaScript
const exec = require('child_process').exec ;
|
|
let stopping = false;
|
|
|
|
process.on('SIGINT', async() => {
|
|
if (stopping) return;
|
|
stopping = true;
|
|
console.log('shutting down');
|
|
await stopDocker();
|
|
process.exit(0);
|
|
});
|
|
|
|
const startDocker = () => {
|
|
return new Promise((resolve, reject) => {
|
|
console.log('starting dockerized mysql and redis..')
|
|
exec(`docker-compose -f ${__dirname}/docker-compose-testbed.yaml up -d`, (err) => {
|
|
if (err) return reject(err);
|
|
setTimeout(() => {
|
|
console.log('mysql is running');
|
|
resolve();
|
|
}, 10000);
|
|
});
|
|
});
|
|
};
|
|
|
|
const createDb = () => {
|
|
return new Promise((resolve, reject) => {
|
|
console.log('creating database..')
|
|
exec(`mysql -h 127.0.0.1 -u root --protocol=tcp --port=3360 < ${__dirname}/../db/create_test_db.sql`, (err) => {
|
|
if (err) return reject(err);
|
|
resolve();
|
|
});
|
|
});
|
|
};
|
|
|
|
const createSchema = () => {
|
|
return new Promise((resolve, reject) => {
|
|
console.log('creating schema..')
|
|
exec(`mysql -h 127.0.0.1 -u root --protocol=tcp --port=3360 -D jambones_test < ${__dirname}/../db/jambones-sql.sql`, (err, stdout, stderr) => {
|
|
if (err) return reject(err);
|
|
resolve();
|
|
});
|
|
});
|
|
};
|
|
|
|
const seedDb = () => {
|
|
return new Promise((resolve, reject) => {
|
|
console.log('seeding database..')
|
|
exec(`mysql -h 127.0.0.1 -u root --protocol=tcp --port=3360 -D jambones_test < ${__dirname}/../db/seed-integration-test.sql`, (err) => {
|
|
if (err) return reject(err);
|
|
resolve();
|
|
});
|
|
});
|
|
};
|
|
|
|
const resetAdminPassword = () => {
|
|
return new Promise((resolve, reject) => {
|
|
/* not needed when running jambonz hosting mode */
|
|
if (process.env.STRIPE_API_KEY) return resolve();
|
|
console.log('creating admin user..')
|
|
exec(`node ${__dirname}/../db/reset_admin_password.js`, (err, stdout, stderr) => {
|
|
console.log(stdout);
|
|
console.log(stderr);
|
|
if (err) return reject(err);
|
|
resolve();
|
|
});
|
|
});
|
|
};
|
|
|
|
const stopDocker = () => {
|
|
return new Promise((resolve, reject) => {
|
|
console.log('stopping docker network..')
|
|
exec(`docker-compose -f ${__dirname}/docker-compose-testbed.yaml down`, (err) => {
|
|
if (err) return reject(err);
|
|
resolve();
|
|
});
|
|
})
|
|
};
|
|
|
|
startDocker()
|
|
.then(createDb)
|
|
.then(createSchema)
|
|
.then(seedDb)
|
|
.then(resetAdminPassword)
|
|
.then(() => {
|
|
console.log('ready for testing!');
|
|
require('..');
|
|
})
|
|
.catch(async(err) => {
|
|
console.error({err}, 'Error running integration test');
|
|
await stopDocker();
|
|
process.exit(-1);
|
|
});
|