Add timeout test for toque.json tiles

This commit is contained in:
Daniel García Aubert 2017-07-31 18:26:45 +02:00
parent 227c2b336b
commit b1114fc606

View File

@ -5,7 +5,7 @@ const TestClient = require('../support/test-client');
const pointSleepSql = ` const pointSleepSql = `
SELECT SELECT
pg_sleep(0.5), pg_sleep(0.3),
'SRID=3857;POINT(0 0)'::geometry the_geom_webmercator, 'SRID=3857;POINT(0 0)'::geometry the_geom_webmercator,
1 cartodb_id, 1 cartodb_id,
2 val 2 val
@ -17,7 +17,8 @@ const createMapConfig = ({
sql = pointSleepSql, sql = pointSleepSql,
cartocss = TestClient.CARTOCSS.POINTS, cartocss = TestClient.CARTOCSS.POINTS,
cartocss_version = '2.3.0', cartocss_version = '2.3.0',
countBy = 'cartodb_id' countBy = 'cartodb_id',
attributes
} = {}) => ({ } = {}) => ({
version, version,
layers: [{ layers: [{
@ -27,7 +28,8 @@ const createMapConfig = ({
id: 'a0' id: 'a0'
}, },
cartocss, cartocss,
cartocss_version cartocss_version,
attributes
} }
}], }],
analyses: [ analyses: [
@ -54,15 +56,15 @@ const createMapConfig = ({
}); });
describe('user database timeout limit', function () { describe('user database timeout limit', function () {
beforeEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 300, done);
});
afterEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 0, done);
});
describe('dataview', function () { describe('dataview', function () {
beforeEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 200, done);
});
afterEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 0, done);
});
beforeEach(function () { beforeEach(function () {
const mapconfig = createMapConfig(); const mapconfig = createMapConfig();
this.testClient = new TestClient(mapconfig, 1234); this.testClient = new TestClient(mapconfig, 1234);
@ -95,38 +97,236 @@ describe('user database timeout limit', function () {
}); });
}); });
describe('torque', function () { describe('torque:', function () {
beforeEach(function () { describe('while validating in layergroup creation', function () {
const mapconfig = createMapConfig({ beforeEach(function (done) {
type: 'torque', const mapconfig = createMapConfig({
cartocss: TestClient.CARTOCSS.TORQUE type: 'torque',
cartocss: TestClient.CARTOCSS.TORQUE
});
this.testClient = new TestClient(mapconfig, 1234);
TestClient.setUserDatabaseTimeoutLimit('localhost', 200, done);
});
afterEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 0, (err) => {
if (err) {
return done(err);
}
this.testClient.drain(done);
});
});
it('fails due to statement timeout', function (done) {
const expectedResponse = {
status: 400,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
};
this.testClient.getLayergroup(expectedResponse, (err, timeoutError) => {
assert.deepEqual(timeoutError, {
errors: [ 'TorqueRenderer: canceling statement due to statement timeout' ],
errors_with_context: [{
type: 'layer',
message: 'TorqueRenderer: canceling statement due to statement timeout',
layer: { id: 'torque-layer0', index: 0, type: 'torque' }
}]
});
done();
});
}); });
this.testClient = new TestClient(mapconfig, 1234);
}); });
afterEach(function (done) { describe('fetching "torque.json" tile', function () {
this.testClient.drain(done); before(function (done) {
}); const mapconfig = createMapConfig({
type: 'torque',
cartocss: TestClient.CARTOCSS.TORQUE
});
this.testClient = new TestClient(mapconfig, 1234);
const expectedResponse = {
status: 200,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
};
it('layergroup creation fails due to statement timeout', function (done) { this.testClient.getLayergroup(expectedResponse, (err, res) => {
const expectedResponse = { if (err) {
status: 400, return done(err);
headers: { }
'Content-Type': 'application/json; charset=utf-8'
}
};
this.testClient.getLayergroup(expectedResponse, (err, timeoutError) => { this.layergroupid = res.layergroupid;
assert.deepEqual(timeoutError, {
errors: ["TorqueRenderer: canceling statement due to statement timeout"], done();
errors_with_context: [{ });
type: "layer", });
message: "TorqueRenderer: canceling statement due to statement timeout",
layer: { id: 'torque-layer0', index: 0, type: "torque" } afterEach(function (done) {
}] this.testClient.drain(done);
});
describe('with user\'s timeout of 200 ms', function () {
beforeEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 200, done);
}); });
done(); afterEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 0, done);
});
it('fails due to statement timeout', function (done) {
const params = {
layergroupid: this.layergroupid,
format: 'torque.json',
layers: [ 0 ],
response: {
status: 400,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
}
};
this.testClient.getTile(0, 0, 0, params, (err, res, attributes) => {
assert.ifError(err);
assert.deepEqual(attributes, {
errors: [ 'TorqueRenderer: canceling statement due to statement timeout' ],
errors_with_context: [{
type: 'unknown',
message: 'TorqueRenderer: canceling statement due to statement timeout',
}]
});
done();
});
});
});
});
});
describe('attributes:', function () {
describe('while validating in map instatiation', function () {
beforeEach(function (done) {
const mapconfig = createMapConfig({
attributes: {
id: 'cartodb_id',
columns: [ 'val' ]
}
});
this.testClient = new TestClient(mapconfig, 1234);
TestClient.setUserDatabaseTimeoutLimit('localhost', 200, done);
});
afterEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 0, (err) => {
if (err) {
return done(err);
}
this.testClient.drain(done);
});
});
it('layergroup creation fails due to statement timeout', function (done) {
const expectedResponse = {
status: 400,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
};
this.testClient.getLayergroup(expectedResponse, (err, timeoutError) => {
assert.deepEqual(timeoutError, {
errors: [ 'canceling statement due to statement timeout' ],
errors_with_context: [{
type: 'layer',
message: 'canceling statement due to statement timeout',
layer: {
id: 'layer0',
index: 0,
type: 'mapnik'
}
}]
});
done();
});
});
});
describe('fetching by feature id', function () {
beforeEach(function (done) {
const mapconfig = createMapConfig({
attributes: {
id: 'cartodb_id',
columns: [ 'val' ]
}
});
this.testClient = new TestClient(mapconfig, 1234);
const expectedResponse = {
status: 200,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
};
this.testClient.getLayergroup(expectedResponse, (err, res) => {
if (err) {
return done(err);
}
this.layergroupid = res.layergroupid;
done();
});
});
afterEach(function (done) {
this.testClient.drain(done);
});
describe('with user\'s timeout of 200 ms', function () {
beforeEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 200, done);
});
afterEach(function (done) {
TestClient.setUserDatabaseTimeoutLimit('localhost', 0, done);
});
it('fails due to statement timeout', function (done) {
const params = {
layergroupid: this.layergroupid,
featureId: 1,
layer: 0,
response: {
status: 400,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
}
};
this.testClient.getAttributes(params, (err, res, attributes) => {
assert.ifError(err);
assert.deepEqual(attributes, {
errors: ['canceling statement due to statement timeout'],
errors_with_context: [{
type: 'unknown',
message: 'canceling statement due to statement timeout'
}]
});
done();
});
});
}); });
}); });
}); });