CartoDB-SQL-API/test/acceptance/batch/scheduler-basic-test.js

99 lines
3.2 KiB
JavaScript
Raw Normal View History

2018-10-24 21:42:33 +08:00
'use strict';
require('../../helper');
var assert = require('../../support/assert');
var TestClient = require('../../support/test-client');
var BatchTestClient = require('../../support/batch-test-client');
var JobStatus = require('../../../lib/batch/job-status');
2019-12-24 01:19:08 +08:00
describe('basic scheduling', function () {
before(function (done) {
this.batchTestClientA = new BatchTestClient({ name: 'consumerA' });
this.batchTestClientB = new BatchTestClient({ name: 'consumerB' });
this.testClient = new TestClient();
this.testClient.getResult(
[
'drop table if exists ordered_inserts_a',
'create table ordered_inserts_a (status numeric)'
].join(';'),
done
);
});
after(function (done) {
2019-12-24 01:19:08 +08:00
this.batchTestClientA.drain(function (err) {
if (err) {
return done(err);
}
this.batchTestClientB.drain(done);
}.bind(this));
});
2019-12-24 01:19:08 +08:00
function createJob (queries) {
return {
query: queries
};
}
it('should run job queries in order (multiple consumers)', function (done) {
var jobRequestA1 = createJob([
2019-12-24 01:19:08 +08:00
'insert into ordered_inserts_a values(1)',
'select pg_sleep(0.25)',
'insert into ordered_inserts_a values(2)'
]);
var jobRequestA2 = createJob([
2019-12-24 01:19:08 +08:00
'insert into ordered_inserts_a values(3)'
]);
var self = this;
2019-12-24 01:19:08 +08:00
this.batchTestClientA.createJob(jobRequestA1, function (err, jobResultA1) {
if (err) {
return done(err);
}
// we don't care about the producer
2019-12-24 01:19:08 +08:00
self.batchTestClientB.createJob(jobRequestA2, function (err, jobResultA2) {
if (err) {
return done(err);
}
jobResultA1.getStatus(function (err, jobA1) {
if (err) {
return done(err);
}
2019-12-24 01:19:08 +08:00
jobResultA2.getStatus(function (err, jobA2) {
if (err) {
return done(err);
}
2019-12-26 21:01:18 +08:00
assert.strictEqual(jobA1.status, JobStatus.DONE);
assert.strictEqual(jobA2.status, JobStatus.DONE);
assert.ok(
2019-12-24 01:19:08 +08:00
new Date(jobA1.updated_at).getTime() < new Date(jobA2.updated_at).getTime(),
'A1 (' + jobA1.updated_at + ') ' +
'should finish before A2 (' + jobA2.updated_at + ')'
);
function statusMapper (status) { return { status: status }; }
2019-12-24 01:19:08 +08:00
self.testClient.getResult('select * from ordered_inserts_a', function (err, rows) {
assert.ok(!err);
// cartodb250user and vizzuality test users share database
var expectedRows = [1, 2, 3].map(statusMapper);
2019-12-26 21:01:18 +08:00
assert.deepStrictEqual(rows, expectedRows);
return done();
});
});
});
});
});
});
});