diff --git a/src/cron.js b/src/cron.js index 607fb8f15..f73fcaf96 100644 --- a/src/cron.js +++ b/src/cron.js @@ -8,6 +8,7 @@ exports = module.exports = { var apps = require('./apps.js'), assert = require('assert'), cloudron = require('./cloudron.js'), + config = require('./config.js'), CronJob = require('cron').CronJob, debug = require('debug')('box:cron'), janitor = require('./janitor.js'), @@ -105,7 +106,7 @@ function recreateJobs(unusedTimeZone, callback) { if (gSchedulerSyncJob) gSchedulerSyncJob.stop(); gSchedulerSyncJob = new CronJob({ - cronTime: '00 */1 * * * *', // every 1 minutes + cronTime: config.TEST ? '*/10 * * * * *' : '00 */1 * * * *', // every minute onTick: scheduler.sync, start: true, timeZone: allSettings[settings.TIME_ZONE_KEY] diff --git a/src/routes/test/apps-test.js b/src/routes/test/apps-test.js index 6fe2f2d96..a572fc7cc 100644 --- a/src/routes/test/apps-test.js +++ b/src/routes/test/apps-test.js @@ -829,6 +829,14 @@ describe('App installation', function () { }); }); + it('installation - scheduler', function (done) { + async.retry({ times: 100, interval: 1000 }, function (retryCallback) { + if (fs.existsSync(paths.DATA_DIR + '/' + APP_ID + '/data/every_minute.env')) return retryCallback(); + + retryCallback(new Error('not run yet')); + }, done); + }); + it('logs - stdout and stderr', function (done) { request.get(SERVER_URL + '/api/v1/apps/' + APP_ID + '/logs') .query({ access_token: token }) @@ -1361,6 +1369,16 @@ describe('App installation - port bindings', function () { }); }); + it('scheduler works after reconfiguration', function (done) { + async.retry({ times: 100, interval: 1000 }, function (callback) { + var data = safe.fs.readFileSync(paths.DATA_DIR + '/' + APP_ID + '/data/every_minute.env', 'utf8'); + + if (data && data.indexOf('ECHO_SERVER_PORT=7172') !== -1) return callback(); + + callback(new Error('not run yet')); + }, done); + }); + it('can stop app', function (done) { request.post(SERVER_URL + '/api/v1/apps/' + APP_ID + '/stop') .query({ access_token: token }) diff --git a/src/scheduler.js b/src/scheduler.js index 59611ff62..d47e230e6 100644 --- a/src/scheduler.js +++ b/src/scheduler.js @@ -8,6 +8,7 @@ var appdb = require('./appdb.js'), apps = require('./apps.js'), assert = require('assert'), async = require('async'), + config = require('./config.js'), CronJob = require('cron').CronJob, debug = require('debug')('box:src/scheduler'), docker = require('./docker.js'), @@ -137,10 +138,12 @@ function createCronJobs(appId, schedulerConfig) { Object.keys(schedulerConfig).forEach(function (taskName) { var task = schedulerConfig[taskName]; - debug('scheduling task for %s/%s @ 00 %s : %s', appId, taskName, task.schedule, task.command); + var cronTime = (config.TEST ? '*/5 ' : '00 ') + task.schedule; // time ticks faster in tests + + debug('scheduling task for %s/%s @ %s : %s', appId, taskName, cronTime, task.command); var cronJob = new CronJob({ - cronTime: '00 ' + task.schedule, // at this point, the pattern has been validated + cronTime: cronTime, // at this point, the pattern has been validated onTick: doTask.bind(null, appId, taskName), start: true });