Implement test to validate response limits work as expected
This commit is contained in:
parent
526e850f26
commit
788b2f0683
@ -5,54 +5,217 @@ const TestClient = require('../support/test-client');
|
|||||||
|
|
||||||
const timeoutErrorTilePath = `${process.cwd()}/assets/render-timeout-fallback.png`;
|
const timeoutErrorTilePath = `${process.cwd()}/assets/render-timeout-fallback.png`;
|
||||||
|
|
||||||
var pointSleepSql = `
|
const pointSleepSql = `
|
||||||
SELECT
|
SELECT
|
||||||
pg_sleep(0.5),
|
pg_sleep(0.5),
|
||||||
'SRID=3857;POINT(0 0)'::geometry the_geom_webmercator,
|
'SRID=3857;POINT(0 0)'::geometry the_geom_webmercator,
|
||||||
1 cartodb_id
|
1 cartodb_id
|
||||||
`;
|
`;
|
||||||
|
|
||||||
function createMapConfig (sql = pointSleepSql, cartocss = TestClient.CARTOCSS.POINTS) {
|
const validationPointSleepSql = `
|
||||||
return {
|
SELECT
|
||||||
version: '1.6.0',
|
pg_sleep(0.5),
|
||||||
layers: [{
|
'SRID=3857;POINT(-180 90)'::geometry the_geom_webmercator,
|
||||||
type: 'cartodb',
|
1 cartodb_id
|
||||||
options: {
|
`;
|
||||||
sql,
|
|
||||||
cartocss,
|
|
||||||
cartocss_version: '2.3.0',
|
|
||||||
interactivity: 'cartodb_id'
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('user timeout limits', function () {
|
const createMapConfig = ({
|
||||||
|
version = '1.6.0',
|
||||||
|
type = 'cartodb',
|
||||||
|
sql = pointSleepSql,
|
||||||
|
cartocss = TestClient.CARTOCSS.POINTS,
|
||||||
|
cartocss_version = '2.3.0',
|
||||||
|
interactivity = 'cartodb_id',
|
||||||
|
countBy = 'cartodb_id'
|
||||||
|
} = {}) => ({
|
||||||
|
version,
|
||||||
|
layers: [{
|
||||||
|
type,
|
||||||
|
options: {
|
||||||
|
source: {
|
||||||
|
id: "a0"
|
||||||
|
},
|
||||||
|
cartocss,
|
||||||
|
cartocss_version,
|
||||||
|
interactivity
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
analyses: [
|
||||||
|
{
|
||||||
|
id: 'a0',
|
||||||
|
type: 'source',
|
||||||
|
params: {
|
||||||
|
query: sql
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
dataviews: {
|
||||||
|
count: {
|
||||||
|
source: {
|
||||||
|
id: 'a0'
|
||||||
|
},
|
||||||
|
type: 'formula',
|
||||||
|
options: {
|
||||||
|
column: countBy,
|
||||||
|
operation: 'count'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('user timeout limit', function () {
|
||||||
|
describe.skip('map instantiation', function () {
|
||||||
|
beforeEach(function (done) {
|
||||||
|
const mapconfig = createMapConfig({ sql: validationPointSleepSql });
|
||||||
|
this.testClient = new TestClient(mapconfig, 1234);
|
||||||
|
this.testClient.setUserRenderTimeoutLimit('localhost', 50, done);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function (done) {
|
||||||
|
this.testClient.setUserRenderTimeoutLimit('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.ifError(err);
|
||||||
|
|
||||||
|
assert.deepEqual(timeoutError, {
|
||||||
|
errors: ['Render timed out'],
|
||||||
|
errors_with_context: [{ type: 'unknown', message: 'Render timed out' }]
|
||||||
|
});
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('user torque timeout limits', function () {
|
||||||
|
beforeEach(function (done) {
|
||||||
|
const mapconfig = createMapConfig({
|
||||||
|
type: 'torque',
|
||||||
|
cartocss: TestClient.CARTOCSS.TORQUE
|
||||||
|
});
|
||||||
|
this.testClient = new TestClient(mapconfig, 1234);
|
||||||
|
this.testClient.setUserDatabaseTimeoutLimit('localhost', 50, done);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function (done) {
|
||||||
|
this.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.ifError(err);
|
||||||
|
|
||||||
|
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();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('dataview', function () {
|
||||||
|
beforeEach(function (done) {
|
||||||
|
const mapconfig = createMapConfig();
|
||||||
|
this.testClient = new TestClient(mapconfig, 1234);
|
||||||
|
this.testClient.setUserDatabaseTimeoutLimit('localhost', 50, done);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function (done) {
|
||||||
|
this.testClient.setUserDatabaseTimeoutLimit('localhost', 0, (err) => {
|
||||||
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
this.testClient.drain(done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('layergroup creation works but dataview request fails due to statement timeout', function (done) {
|
||||||
|
const params = {
|
||||||
|
response: {
|
||||||
|
status: 400,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json; charset=utf-8'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.testClient.getDataview('count', params, (err, dataview) => {
|
||||||
|
assert.ifError(err);
|
||||||
|
|
||||||
|
assert.deepEqual(dataview, {
|
||||||
|
errors: ['canceling statement due to statement timeout'],
|
||||||
|
errors_with_context: [{ type: 'unknown', message: 'canceling statement due to statement timeout' }]
|
||||||
|
});
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
describe('raster', function () {
|
||||||
describe('with onTileErrorStrategy ENABLED', function () {
|
describe('with onTileErrorStrategy ENABLED', function () {
|
||||||
let onTileErrorStrategy;
|
let onTileErrorStrategy;
|
||||||
|
|
||||||
before(function () {
|
beforeEach(function () {
|
||||||
onTileErrorStrategy = global.environment.enabledFeatures.onTileErrorStrategy;
|
onTileErrorStrategy = global.environment.enabledFeatures.onTileErrorStrategy;
|
||||||
global.environment.enabledFeatures.onTileErrorStrategy = true;
|
global.environment.enabledFeatures.onTileErrorStrategy = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
after(function () {
|
afterEach(function () {
|
||||||
global.environment.enabledFeatures.onTileErrorStrategy = onTileErrorStrategy;
|
global.environment.enabledFeatures.onTileErrorStrategy = onTileErrorStrategy;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('layergroup creation works if test tile is fast but tile request fails if they are slow', function (done) {
|
beforeEach(function (done) {
|
||||||
var testClient = new TestClient(createMapConfig(), 1234);
|
const mapconfig = createMapConfig();
|
||||||
|
this.testClient = new TestClient(mapconfig, 1234);
|
||||||
testClient.setUserRenderTimeoutLimit('localhost', 50, function (err) {
|
this.testClient.setUserRenderTimeoutLimit('localhost', 50, done);
|
||||||
assert.ifError(err);
|
|
||||||
|
|
||||||
testClient.getTile(0, 0, 0, {}, function (err, res, tile) {
|
|
||||||
assert.ifError(err);
|
|
||||||
|
|
||||||
assert.imageIsSimilarToFile(tile, timeoutErrorTilePath, 0.05, function (err) {
|
|
||||||
assert.ifError(err);
|
|
||||||
testClient.drain(done);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(function (done) {
|
||||||
|
this.testClient.drain(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('layergroup creation works but tile request fails due to render timeout', function (done) {
|
||||||
|
this.testClient.getTile(0, 0, 0, {}, (err, res, tile) => {
|
||||||
|
assert.ifError(err);
|
||||||
|
|
||||||
|
assert.imageIsSimilarToFile(tile, timeoutErrorTilePath, 0.05, (err) => {
|
||||||
|
assert.ifError(err);
|
||||||
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -70,22 +233,91 @@ describe('user timeout limits', function () {
|
|||||||
global.environment.enabledFeatures.onTileErrorStrategy = onTileErrorStrategy;
|
global.environment.enabledFeatures.onTileErrorStrategy = onTileErrorStrategy;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('layergroup creation works even if test tile is slow', function (done) {
|
beforeEach(function (done) {
|
||||||
var testClient = new TestClient(createMapConfig(), 1234);
|
const mapconfig = createMapConfig();
|
||||||
testClient.setUserRenderTimeoutLimit('localhost', 50, function (err) {
|
this.testClient = new TestClient(mapconfig, 1234);
|
||||||
assert.ifError(err);
|
this.testClient.setUserRenderTimeoutLimit('localhost', 50, done);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function (done) {
|
||||||
|
this.testClient.drain(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('layergroup creation works even if render tile is slow', function (done) {
|
||||||
var params = {
|
var params = {
|
||||||
status: 400,
|
status: 400,
|
||||||
contentType: 'application/json; charset=utf-8'
|
contentType: 'application/json; charset=utf-8'
|
||||||
};
|
};
|
||||||
|
|
||||||
testClient.getTile(0, 0, 0, params, function (err, res, tile) {
|
this.testClient.getTile(0, 0, 0, params, (err, res, tile) => {
|
||||||
assert.ifError(err);
|
assert.ifError(err);
|
||||||
|
|
||||||
assert.equal(tile.errors[0], 'Render timed out');
|
assert.equal(tile.errors[0], 'Render timed out');
|
||||||
testClient.drain(done);
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('user vector timeout limits', function () {
|
||||||
|
beforeEach(function (done) {
|
||||||
|
const mapconfig = createMapConfig();
|
||||||
|
this.testClient = new TestClient(mapconfig, 1234);
|
||||||
|
this.testClient.setUserRenderTimeoutLimit('localhost', 50, done);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function (done) {
|
||||||
|
this.testClient.drain(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('layergroup creation works but vector tile request fails due to render timeout', function (done) {
|
||||||
|
const params = {
|
||||||
|
format: 'mvt',
|
||||||
|
status: 400
|
||||||
|
};
|
||||||
|
|
||||||
|
this.testClient.getTile(0, 0, 0, params, (err, res, tile) => {
|
||||||
|
assert.ifError(err);
|
||||||
|
|
||||||
|
assert.deepEqual(tile, {
|
||||||
|
errors: ['Render timed out'],
|
||||||
|
errors_with_context: [{ type: 'unknown', message: 'Render timed out' }]
|
||||||
|
});
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('user interativity timeout limits', function () {
|
||||||
|
beforeEach(function (done) {
|
||||||
|
const mapconfig = createMapConfig();
|
||||||
|
this.testClient = new TestClient(mapconfig, 1234);
|
||||||
|
this.testClient.setUserRenderTimeoutLimit('localhost', 50, done);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function (done) {
|
||||||
|
this.testClient.drain(done);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('layergroup creation works but "grid.json" tile request fails due to render timeout', function (done) {
|
||||||
|
const params = {
|
||||||
|
layers: 'mapnik',
|
||||||
|
format: 'grid.json',
|
||||||
|
status: 400
|
||||||
|
};
|
||||||
|
|
||||||
|
this.testClient.getTile(0, 0, 0, params, (err, res, tile) => {
|
||||||
|
assert.ifError(err);
|
||||||
|
|
||||||
|
assert.deepEqual(tile, {
|
||||||
|
errors: ['Render timed out'],
|
||||||
|
errors_with_context: [{ type: 'unknown', message: 'Render timed out' }]
|
||||||
|
});
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user