clear db ignoring foreign key checks

This commit is contained in:
Girish Ramakrishnan
2016-09-20 14:07:39 -07:00
parent cf039b7964
commit 7fde57f7de
5 changed files with 25 additions and 43 deletions

View File

@@ -1,5 +1,3 @@
/* jslint node:true */
'use strict';
exports = module.exports = {
@@ -15,10 +13,12 @@ exports = module.exports = {
delByAppId: delByAppId,
delByAppIdAndType: delByAppIdAndType,
_clear: clear
_clear: clear,
_addDefaultClients: addDefaultClients
};
var assert = require('assert'),
async = require('async'),
database = require('./database.js'),
DatabaseError = require('./databaseerror.js');
@@ -159,3 +159,10 @@ function clear(callback) {
});
}
function addDefaultClients(callback) {
async.series([
add.bind(null, 'cid-webadmin', 'Settings', 'built-in', 'secret-webadmin', 'https://admin-localhost', 'cloudron,profile,users,apps,settings'),
add.bind(null, 'cid-sdk', 'SDK', 'built-in', 'secret-sdk', 'https://admin-localhost', '*,roleSdk'),
add.bind(null, 'cid-cli', 'Cloudron Tool', 'built-in', 'secret-cli', 'https://admin-localhost', '*,roleSdk')
], callback);
}

View File

@@ -15,9 +15,10 @@ exports = module.exports = {
var assert = require('assert'),
async = require('async'),
once = require('once'),
child_process = require('child_process'),
config = require('./config.js'),
mysql = require('mysql'),
once = require('once'),
util = require('util');
var gConnectionPool = null,
@@ -93,18 +94,14 @@ function reconnect(callback) {
function clear(callback) {
assert.strictEqual(typeof callback, 'function');
// the clear funcs don't completely clear the db, they leave the migration code defaults
var cmd = util.format('mysql --host=%s --user="%s" --password="%s" -Nse "SHOW TABLES" %s | grep -v "^migrations$" | while read table; do mysql --host=%s --user="%s" --password="%s" -e "SET FOREIGN_KEY_CHECKS = 0; TRUNCATE TABLE $table" %s; done',
config.database().hostname, config.database().username, config.database().password, config.database().name,
config.database().hostname, config.database().username, config.database().password, config.database().name);
async.series([
require('./appdb.js')._clear,
require('./authcodedb.js')._clear,
require('./backupdb.js')._clear,
require('./clientdb.js')._clear,
require('./tokendb.js')._clear,
require('./groupdb.js')._clear,
require('./userdb.js')._clear,
require('./settingsdb.js')._clear,
require('./eventlogdb.js')._clear,
require('./mailboxdb.js')._clear
child_process.exec.bind(null, cmd),
require('./clientdb.js')._addDefaultClients,
require('./groupdb.js')._addDefaultGroups
], callback);
}

View File

@@ -17,7 +17,8 @@ exports = module.exports = {
getGroups: getGroups,
setGroups: setGroups,
_clear: clear
_clear: clear,
_addDefaultGroups: addDefaultGroups
};
var assert = require('assert'),
@@ -214,3 +215,7 @@ function isMember(groupId, userId, callback) {
callback(null, result.length !== 0);
});
}
function addDefaultGroups(callback) {
add('admin', 'admin', callback);
}

View File

@@ -248,17 +248,6 @@ describe('database', function () {
done();
});
});
it('can clear table', function (done) {
userdb._clear(function (error) {
expect(error).to.not.be.ok();
userdb.count(function (error, count) {
expect(error).to.not.be.ok();
expect(count).to.equal(0);
done();
});
});
});
});
describe('authcode', function () {

View File

@@ -2,7 +2,6 @@
set -eu
readonly ADMIN_LOCATION=admin
readonly source_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd)"
! "${source_dir}/src/test/checkInstall" && exit 1
@@ -16,21 +15,6 @@ mkdir -p data/appdata data/box/appicons data/mail data/nginx/cert data/nginx/app
# put cert
openssl req -x509 -newkey rsa:2048 -keyout data/nginx/cert/host.key -out data/nginx/cert/host.cert -days 3650 -subj '/CN=localhost' -nodes
webadmin_scopes="cloudron,profile,users,apps,settings"
webadmin_origin="https://${ADMIN_LOCATION}-localhost"
# create docker network (while the infra code does this, most tests skip infra setup)
docker network create --subnet=172.18.0.0/16 cloudron || true
# !!!!!! check clientdb.js clear() to not nuke those entries
echo "Add webadmin api client"
mysql --user=root --password="" \
-e "REPLACE INTO clients (id, appId, type, clientSecret, redirectURI, scope) VALUES (\"cid-webadmin\", \"Settings\", \"built-in\", \"secret-webadmin\", \"${webadmin_origin}\", \"${webadmin_scopes}\")" boxtest
echo "Add SDK api client"
mysql --user=root --password="" \
-e "REPLACE INTO clients (id, appId, type, clientSecret, redirectURI, scope) VALUES (\"cid-sdk\", \"SDK\", \"built-in\", \"secret-sdk\", \"${webadmin_origin}\", \"*,roleSdk\")" boxtest
echo "Add cli api client"
mysql --user=root --password="" \
-e "REPLACE INTO clients (id, appId, type, clientSecret, redirectURI, scope) VALUES (\"cid-cli\", \"Cloudron Tool\", \"built-in\", \"secret-cli\", \"${webadmin_origin}\", \"*,roleSdk\")" boxtest