From ef36466b3b78f40e668777354c6f4478ed39e6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 22 May 2018 18:19:41 +0200 Subject: [PATCH 1/7] Fix test to use the right helper function to set the user render timeout --- test/acceptance/user-render-timeout-limit.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/acceptance/user-render-timeout-limit.js b/test/acceptance/user-render-timeout-limit.js index 93770080..6089468a 100644 --- a/test/acceptance/user-render-timeout-limit.js +++ b/test/acceptance/user-render-timeout-limit.js @@ -213,12 +213,12 @@ describe('user render timeout limit', function () { serverOptions.renderer.mvt.usePostGIS = usePostGIS; const mapconfig = createMapConfig(); this.testClient = new TestClient(mapconfig, 1234); - this.testClient.setUserDatabaseTimeoutLimit(50, done); + this.testClient.setUserRenderTimeoutLimit('localhost', 50, done); }); afterEach(function (done) { serverOptions.renderer.mvt.usePostGIS = originalUsePostGIS; - this.testClient.setUserDatabaseTimeoutLimit(0, (err) => { + this.testClient.setUserRenderTimeoutLimit('localhost', 0, (err) => { if (err) { return done(err); } From dfc354550c0991f9d7b8ca67f2b7c7d4876c55e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 22 May 2018 18:27:50 +0200 Subject: [PATCH 2/7] Add method to override cache buster provided by server while fetching tiles and static images --- test/support/test-client.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/test/support/test-client.js b/test/support/test-client.js index 5e08394a..2a5840f5 100644 --- a/test/support/test-client.js +++ b/test/support/test-client.js @@ -125,6 +125,14 @@ function resErr2errRes(callback) { }; } +function layergroupidTemplate (layergroupId, params) { + const { token, signer, cacheBuster } = LayergroupToken.parse(layergroupId); + + // {user}@{token}:{cache_buster} + // {token}:{cache_buster} + return `${signer ? signer + '@' : ''}${token}:${params.cacheBuster ? Date.now() : cacheBuster }`; +} + TestClient.prototype.getWidget = function(widgetName, params, callback) { var self = this; @@ -726,7 +734,7 @@ TestClient.prototype.getTile = function(z, x, y, params, callback) { self.keysToDelete['map_cfg|' + LayergroupToken.parse(layergroupId).token] = 0; self.keysToDelete['user:localhost:mapviews:global'] = 5; - url = '/api/v1/map/' + layergroupId + '/'; + url = `/api/v1/map/${layergroupidTemplate(layergroupId, params)}/`; var layers = params.layers; @@ -769,7 +777,6 @@ TestClient.prototype.getTile = function(z, x, y, params, callback) { } }, params.response); - var isPng = format.match(/png$/); if (isPng) { @@ -954,7 +961,9 @@ TestClient.prototype.getStaticCenter = function (params, callback) { self.keysToDelete['map_cfg|' + LayergroupToken.parse(layergroupId).token] = 0; self.keysToDelete['user:localhost:mapviews:global'] = 5; - url = `/api/v1/map/static/center/${layergroupId}/${zoom}/${lat}/${lng}/${width}/${height}.${format}`; + const layergroupid = layergroupidTemplate(layergroupId, params); + + url = `/api/v1/map/static/center/${layergroupid}/${zoom}/${lat}/${lng}/${width}/${height}.${format}`; if (self.apiKey) { url += '?' + qs.stringify({api_key: self.apiKey}); From 87838bd4ce8bb71356523910dba6e875d936601c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 22 May 2018 18:28:57 +0200 Subject: [PATCH 3/7] Override cache buster in order to not hit any internal cache --- test/acceptance/user-render-timeout-limit.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/test/acceptance/user-render-timeout-limit.js b/test/acceptance/user-render-timeout-limit.js index 6089468a..150ca5e9 100644 --- a/test/acceptance/user-render-timeout-limit.js +++ b/test/acceptance/user-render-timeout-limit.js @@ -139,7 +139,7 @@ describe('user render timeout limit', function () { }); it('layergroup creation works but tile request fails due to render timeout', function (done) { - this.testClient.getTile(0, 0, 0, {}, (err, res, tile) => { + this.testClient.getTile(0, 0, 0, { cacheBuster: true }, (err, res, tile) => { assert.ifError(err); assert.imageIsSimilarToFile(tile, timeoutErrorTilePath, 0.05, (err) => { @@ -180,7 +180,8 @@ describe('user render timeout limit', function () { headers: { 'Content-Type': 'application/json; charset=utf-8' } - } + }, + cacheBuster: true }; this.testClient.getTile(0, 0, 0, params, (err, res, timeoutError) => { @@ -234,7 +235,8 @@ describe('user render timeout limit', function () { headers: { 'Content-Type': 'application/x-protobuf' } - } + }, + cacheBuster: true }; this.testClient.getTile(0, 0, 0, params, (err, res, tile) => { @@ -277,7 +279,8 @@ describe('user render timeout limit', function () { headers: { 'Content-Type': 'application/json; charset=utf-8' } - } + }, + cacheBuster: true }; this.testClient.getTile(0, 0, 0, params, (err, res, tile) => { @@ -365,7 +368,7 @@ describe('user render timeout limit', function () { }); }); - it('layergroup creation works and render tile fails', function (done) { + it('layergroup creation works and render static center tile fails', function (done) { const params = { zoom: 0, lat: 0, @@ -378,7 +381,8 @@ describe('user render timeout limit', function () { headers: { 'Content-Type': 'application/json; charset=utf-8' } - } + }, + cacheBuster: true }; this.testClient.getStaticCenter(params, function (err, res, timeoutError) { From 8febc78d0e25e5cdc97338b64950a491b1665e3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 22 May 2018 19:20:37 +0200 Subject: [PATCH 4/7] Do not test against Postgis renderer because it does not implement renderer timeout option --- test/acceptance/user-render-timeout-limit.js | 89 +++++++++----------- 1 file changed, 42 insertions(+), 47 deletions(-) diff --git a/test/acceptance/user-render-timeout-limit.js b/test/acceptance/user-render-timeout-limit.js index 150ca5e9..79822c7b 100644 --- a/test/acceptance/user-render-timeout-limit.js +++ b/test/acceptance/user-render-timeout-limit.js @@ -202,57 +202,52 @@ describe('user render timeout limit', function () { }); }); - if (process.env.POSTGIS_VERSION === '2.4') { - describe('vector (PostGIS)', vector(true)); - } - - describe('vector (mapnik)', vector(false)); - function vector(usePostGIS) { + describe('vector tile via mapnik renderer', function () { + const usePostGIS = false; const originalUsePostGIS = serverOptions.renderer.mvt.usePostGIS; - return function () { - beforeEach(function (done) { - serverOptions.renderer.mvt.usePostGIS = usePostGIS; - const mapconfig = createMapConfig(); - this.testClient = new TestClient(mapconfig, 1234); - this.testClient.setUserRenderTimeoutLimit('localhost', 50, done); - }); - afterEach(function (done) { - serverOptions.renderer.mvt.usePostGIS = originalUsePostGIS; - this.testClient.setUserRenderTimeoutLimit('localhost', 0, (err) => { - if (err) { - return done(err); + beforeEach(function (done) { + serverOptions.renderer.mvt.usePostGIS = usePostGIS; + const mapconfig = createMapConfig(); + this.testClient = new TestClient(mapconfig, 1234); + this.testClient.setUserRenderTimeoutLimit('localhost', 50, done); + }); + + afterEach(function (done) { + serverOptions.renderer.mvt.usePostGIS = originalUsePostGIS; + this.testClient.setUserRenderTimeoutLimit('localhost', 0, (err) => { + if (err) { + return done(err); + } + this.testClient.drain(done); + }); + }); + + it('layergroup creation works but vector tile request fails due to render timeout', function (done) { + const params = { + format: 'mvt', + response: { + status: 429, + headers: { + 'Content-Type': 'application/x-protobuf' } - this.testClient.drain(done); - }); + }, + cacheBuster: true + }; + + this.testClient.getTile(0, 0, 0, params, (err, res, tile) => { + assert.ifError(err); + + var tileJSON = tile.toJSON(); + assert.equal(Array.isArray(tileJSON), true); + assert.equal(tileJSON.length, 2); + assert.equal(tileJSON[0].name, 'errorTileSquareLayer'); + assert.equal(tileJSON[1].name, 'errorTileStripesLayer'); + + done(); }); - - it('layergroup creation works but vector tile request fails due to render timeout', function (done) { - const params = { - format: 'mvt', - response: { - status: 429, - headers: { - 'Content-Type': 'application/x-protobuf' - } - }, - cacheBuster: true - }; - - this.testClient.getTile(0, 0, 0, params, (err, res, tile) => { - assert.ifError(err); - - var tileJSON = tile.toJSON(); - assert.equal(Array.isArray(tileJSON), true); - assert.equal(tileJSON.length, 2); - assert.equal(tileJSON[0].name, 'errorTileSquareLayer'); - assert.equal(tileJSON[1].name, 'errorTileStripesLayer'); - - done(); - }); - }); - }; - } + }); + }); describe('interativity', function () { beforeEach(function (done) { From cc81c8ff4c8c237f336dd7fa3f961260de0c7ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 22 May 2018 19:22:08 +0200 Subject: [PATCH 5/7] Only test user database timeout against Postgis Renderer if available (Postgis >= 2.4) --- .../acceptance/user-database-timeout-limit.js | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/test/acceptance/user-database-timeout-limit.js b/test/acceptance/user-database-timeout-limit.js index 52ead026..bdf70a12 100644 --- a/test/acceptance/user-database-timeout-limit.js +++ b/test/acceptance/user-database-timeout-limit.js @@ -2,6 +2,7 @@ require('../support/test_helper'); const assert = require('../support/assert'); const TestClient = require('../support/test-client'); +const serverOptions = require('../../lib/cartodb/server_options'); const timeoutErrorTilePath = `${process.cwd()}/assets/render-timeout-fallback.png`; @@ -438,6 +439,78 @@ describe('user database timeout limit', function () { }); }); + + if (process.env.POSTGIS_VERSION === '2.4') { + describe.only('fetching vector tiles via PostGIS renderer', function() { + const usePostGIS = true; + const originalUsePostGIS = serverOptions.renderer.mvt.usePostGIS; + + beforeEach(function (done) { + serverOptions.renderer.mvt.usePostGIS = usePostGIS; + + const mapconfig = createMapConfig(); + this.testClient = new TestClient(mapconfig, 1234); + const expectedResponse = { + status: 200, + headers: { + 'Content-Type': 'application/json; charset=utf-8' + } + }; + + this.testClient.getLayergroup({ response: expectedResponse }, (err, res) => { + if (err) { + return done(err); + } + + this.layergroupid = res.layergroupid; + + done(); + }); + }); + + afterEach(function (done) { + serverOptions.renderer.mvt.usePostGIS = originalUsePostGIS; + this.testClient.drain(done); + }); + + describe('with user\'s timeout of 200 ms', function () { + beforeEach(function (done) { + this.testClient.setUserDatabaseTimeoutLimit(200, done); + }); + + afterEach(function (done) { + this.testClient.setUserDatabaseTimeoutLimit(0, done); + }); + + it('"mvt" fails due to statement timeout', function (done) { + const params = { + layergroupid: this.layergroupid, + format: 'mvt', + layers: [ 0 ], + response: { + status: 429, + headers: { + 'Content-Type': 'application/x-protobuf' + } + }, + cacheBuster: true + }; + + this.testClient.getTile(0, 0, 0, params, (err, res, tile) => { + assert.ifError(err); + + var tileJSON = tile.toJSON(); + assert.equal(Array.isArray(tileJSON), true); + assert.equal(tileJSON.length, 2); + assert.equal(tileJSON[0].name, 'errorTileSquareLayer'); + assert.equal(tileJSON[1].name, 'errorTileStripesLayer'); + + done(); + }); + }); + }); + }); + } }); }); From 4701decfcdf6741810ffe055adbf92580b07d493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 22 May 2018 19:37:46 +0200 Subject: [PATCH 6/7] No need to drain test-client --- test/acceptance/user-database-timeout-limit.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/acceptance/user-database-timeout-limit.js b/test/acceptance/user-database-timeout-limit.js index bdf70a12..eecc679e 100644 --- a/test/acceptance/user-database-timeout-limit.js +++ b/test/acceptance/user-database-timeout-limit.js @@ -468,9 +468,8 @@ describe('user database timeout limit', function () { }); }); - afterEach(function (done) { + afterEach(function () { serverOptions.renderer.mvt.usePostGIS = originalUsePostGIS; - this.testClient.drain(done); }); describe('with user\'s timeout of 200 ms', function () { From 54601db44afa1d5d7731cad003e6e35ed0d1f2f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 22 May 2018 19:41:20 +0200 Subject: [PATCH 7/7] Remove test runner filter --- test/acceptance/user-database-timeout-limit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/acceptance/user-database-timeout-limit.js b/test/acceptance/user-database-timeout-limit.js index eecc679e..6e5423e1 100644 --- a/test/acceptance/user-database-timeout-limit.js +++ b/test/acceptance/user-database-timeout-limit.js @@ -441,7 +441,7 @@ describe('user database timeout limit', function () { }); if (process.env.POSTGIS_VERSION === '2.4') { - describe.only('fetching vector tiles via PostGIS renderer', function() { + describe('fetching vector tiles via PostGIS renderer', function() { const usePostGIS = true; const originalUsePostGIS = serverOptions.renderer.mvt.usePostGIS;