From 7df0fb456b6a0473dab2f6818f96c1fa3a4d0030 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Tue, 4 Sep 2018 15:13:17 +0200 Subject: [PATCH 1/9] add to log anonymous maps instantiations that use overviews tables Added to tiler profiler object: overviewsAddedToMapconfig: true mapType: 'anonymous' --- .../api/map/anonymous-map-controller.js | 4 ++- lib/cartodb/models/mapconfig/adapter/index.js | 11 ++++++-- .../adapter/mapconfig-overviews-adapter.js | 28 +++++++++++++------ test/acceptance/overviews_metadata.js | 1 + 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/lib/cartodb/api/map/anonymous-map-controller.js b/lib/cartodb/api/map/anonymous-map-controller.js index 055bd6f7..5dedbfbc 100644 --- a/lib/cartodb/api/map/anonymous-map-controller.js +++ b/lib/cartodb/api/map/anonymous-map-controller.js @@ -152,8 +152,10 @@ function prepareAdapterMapConfig (mapConfigAdapter) { } }; - mapConfigAdapter.getMapConfig(user, requestMapConfig, params, context, (err, requestMapConfig) => { + mapConfigAdapter.getMapConfig(user, requestMapConfig, params, context, (err, requestMapConfig, stats = { overviewsUsed : false}) => { req.profiler.done('anonymous.getMapConfig'); + req.profiler.add(stats); + if (err) { return next(err); } diff --git a/lib/cartodb/models/mapconfig/adapter/index.js b/lib/cartodb/models/mapconfig/adapter/index.js index 70704bea..dd82df32 100644 --- a/lib/cartodb/models/mapconfig/adapter/index.js +++ b/lib/cartodb/models/mapconfig/adapter/index.js @@ -11,16 +11,21 @@ MapConfigAdapter.prototype.getMapConfig = function(user, requestMapConfig, param var i = 0; var tasksLeft = this.adapters.length; - function next(err, _requestMapConfig) { + let mapConfigStats = {}; + + function next(err, _requestMapConfig, adapterStats = {}) { if (err) { return callback(err); } + + mapConfigStats = Object.assign(mapConfigStats, adapterStats); + if (tasksLeft-- === 0) { - return callback(null, _requestMapConfig); + return callback(null, _requestMapConfig, mapConfigStats); } var nextAdapter = self.adapters[i++]; nextAdapter.getMapConfig(user, _requestMapConfig, params, context, next); } - next(null, requestMapConfig); + next(null, requestMapConfig, mapConfigStats); }; diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index e67a2513..81bbce9f 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -20,50 +20,62 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon layers.forEach(layer => augmentLayersQueue.defer(this._augmentLayer.bind(this), user, layer, analysesResults)); - augmentLayersQueue.awaitAll(function layersAugmentQueueFinish (err, layers) { + augmentLayersQueue.awaitAll(function layersAugmentQueueFinish (err, results) { if (err) { return callback(err); } + const layers = results.map(result => result.layer); + const overviewsAddedToMapconfig = results + .map(result => result.overviewsAddedToMapconfig) + .reduce((overviewsInMapconfig,overviewsInLayer)=>overviewsInMapconfig||overviewsInLayer, + false); + if (!layers || layers.length === 0) { return callback(new Error('Missing layers array from layergroup config')); } requestMapConfig.layers = layers; - return callback(null, requestMapConfig); + const stats = { overviewsAddedToMapconfig, + mapType: 'anonymous' }; + + return callback(null, requestMapConfig, stats); }); }; MapConfigOverviewsAdapter.prototype._augmentLayer = function (user, layer, analysesResults, callback) { + let overviewsAddedToMapconfig = false; if (layer.type !== 'mapnik' && layer.type !== 'cartodb') { - return callback(null, layer); + return callback(null, { layer, overviewsAddedToMapconfig }); } this.overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, (err, metadata) => { if (err) { - return callback(err, layer); + return callback(err, { layer, overviewsAddedToMapconfig }); } if (_.isEmpty(metadata)) { - return callback(null, layer); + return callback(null, { layer, overviewsAddedToMapconfig }); } var filters = getFilters(analysesResults, layer); + overviewsAddedToMapconfig = true; + if (!filters) { layer.options = Object.assign({}, layer.options, getQueryRewriteData(layer, analysesResults, { overviews: metadata })); - return callback(null, layer); + return callback(null, { layer, overviewsAddedToMapconfig }); } var unfilteredQuery = getUnfilteredQuery(analysesResults, layer); this.filterStatsBackend.getFilterStats(user, unfilteredQuery, filters, function (err, stats) { if (err) { - return callback(null, layer); + return callback(null, { layer, overviewsAddedToMapconfig }); } layer.options = Object.assign({}, layer.options, getQueryRewriteData(layer, analysesResults, { @@ -71,7 +83,7 @@ MapConfigOverviewsAdapter.prototype._augmentLayer = function (user, layer, analy filter_stats: stats })); - return callback(null, layer); + return callback(null, { layer, overviewsAddedToMapconfig }); }); }); }; diff --git a/test/acceptance/overviews_metadata.js b/test/acceptance/overviews_metadata.js index 08cf37a9..a800e899 100644 --- a/test/acceptance/overviews_metadata.js +++ b/test/acceptance/overviews_metadata.js @@ -72,6 +72,7 @@ describe('overviews metadata', function() { data: JSON.stringify(layergroup) }, {}, function(res) { assert.equal(res.statusCode, 200, res.body); + assert.ok(JSON.parse(res.headers['x-tiler-profiler']).overviewsAddedToMapconfig); var parsedBody = JSON.parse(res.body); assert.equal(res.headers['x-layergroup-id'], parsedBody.layergroupid); expected_token = parsedBody.layergroupid; From 006e21379fbc0f51b84cd2f798fbc49a0d4b39e0 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Tue, 4 Sep 2018 15:30:20 +0200 Subject: [PATCH 2/9] please jshint line to long --- lib/cartodb/api/map/anonymous-map-controller.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/cartodb/api/map/anonymous-map-controller.js b/lib/cartodb/api/map/anonymous-map-controller.js index 5dedbfbc..c50b9eb9 100644 --- a/lib/cartodb/api/map/anonymous-map-controller.js +++ b/lib/cartodb/api/map/anonymous-map-controller.js @@ -152,7 +152,11 @@ function prepareAdapterMapConfig (mapConfigAdapter) { } }; - mapConfigAdapter.getMapConfig(user, requestMapConfig, params, context, (err, requestMapConfig, stats = { overviewsUsed : false}) => { + mapConfigAdapter.getMapConfig(user, + requestMapConfig, + params, + context, + (err, requestMapConfig, stats = { overviewsUsed : false }) => { req.profiler.done('anonymous.getMapConfig'); req.profiler.add(stats); From b75150e91e43a9ef104c216dcb52bd0fafe9ecf3 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Tue, 4 Sep 2018 16:20:38 +0200 Subject: [PATCH 3/9] set mapType in the controller instead of in the adapter --- lib/cartodb/api/map/anonymous-map-controller.js | 3 +++ .../mapconfig/adapter/mapconfig-overviews-adapter.js | 3 +-- test/acceptance/overviews_metadata.js | 7 ++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/cartodb/api/map/anonymous-map-controller.js b/lib/cartodb/api/map/anonymous-map-controller.js index c50b9eb9..1a1f6eea 100644 --- a/lib/cartodb/api/map/anonymous-map-controller.js +++ b/lib/cartodb/api/map/anonymous-map-controller.js @@ -158,7 +158,10 @@ function prepareAdapterMapConfig (mapConfigAdapter) { context, (err, requestMapConfig, stats = { overviewsUsed : false }) => { req.profiler.done('anonymous.getMapConfig'); + + stats.mapType = 'anonymous'; req.profiler.add(stats); + if (err) { return next(err); diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 81bbce9f..ff9ecbf6 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -37,8 +37,7 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon requestMapConfig.layers = layers; - const stats = { overviewsAddedToMapconfig, - mapType: 'anonymous' }; + const stats = { overviewsAddedToMapconfig }; return callback(null, requestMapConfig, stats); }); diff --git a/test/acceptance/overviews_metadata.js b/test/acceptance/overviews_metadata.js index a800e899..fe6470f0 100644 --- a/test/acceptance/overviews_metadata.js +++ b/test/acceptance/overviews_metadata.js @@ -72,7 +72,12 @@ describe('overviews metadata', function() { data: JSON.stringify(layergroup) }, {}, function(res) { assert.equal(res.statusCode, 200, res.body); - assert.ok(JSON.parse(res.headers['x-tiler-profiler']).overviewsAddedToMapconfig); + + const headers = JSON.parse(res.headers['x-tiler-profiler']); + + assert.ok(headers.overviewsAddedToMapconfig); + assert.equal(headers.mapType, 'anonymous'); + var parsedBody = JSON.parse(res.body); assert.equal(res.headers['x-layergroup-id'], parsedBody.layergroupid); expected_token = parsedBody.layergroupid; From 880ef63720722e4c73263b998e7baeec90a18f58 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Tue, 4 Sep 2018 16:21:20 +0200 Subject: [PATCH 4/9] add to logs named maps overviews instantiation --- lib/cartodb/api/template/named-template-controller.js | 6 +++++- lib/cartodb/models/mapconfig/provider/named-map-provider.js | 4 ++-- test/acceptance/overviews_metadata_named_maps.js | 5 +++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/cartodb/api/template/named-template-controller.js b/lib/cartodb/api/template/named-template-controller.js index 5cdf5401..0408ed3a 100644 --- a/lib/cartodb/api/template/named-template-controller.js +++ b/lib/cartodb/api/template/named-template-controller.js @@ -165,8 +165,12 @@ function getTemplate ( params ); - mapConfigProvider.getMapConfig((err, mapConfig, rendererParams) => { + mapConfigProvider.getMapConfig((err, mapConfig, rendererParams, context, stats = {}) => { req.profiler.done('named.getMapConfig'); + + stats.mapType = 'named'; + req.profiler.add(stats); + if (err) { return next(err); } diff --git a/lib/cartodb/models/mapconfig/provider/named-map-provider.js b/lib/cartodb/models/mapconfig/provider/named-map-provider.js index e3889aff..5f8f4027 100644 --- a/lib/cartodb/models/mapconfig/provider/named-map-provider.js +++ b/lib/cartodb/models/mapconfig/provider/named-map-provider.js @@ -99,7 +99,7 @@ module.exports = class NamedMapMapConfigProvider extends BaseMapConfigProvider { const { user, rendererParams } = this; this.mapConfigAdapter.getMapConfig( - user, requestMapConfig, rendererParams, context, (err, mapConfig) => { + user, requestMapConfig, rendererParams, context, (err, mapConfig, stats = {}) => { if (err) { this.err = err; return callback(err); @@ -108,7 +108,7 @@ module.exports = class NamedMapMapConfigProvider extends BaseMapConfigProvider { this.mapConfig = (mapConfig === null) ? null : new MapConfig(mapConfig, context.datasource); this.analysesResults = context.analysesResults || []; - return callback(null, this.mapConfig, this.rendererParams, this.context); + return callback(null, this.mapConfig, this.rendererParams, this.context, stats); }); }); }); diff --git a/test/acceptance/overviews_metadata_named_maps.js b/test/acceptance/overviews_metadata_named_maps.js index 80451222..bfb42c46 100644 --- a/test/acceptance/overviews_metadata_named_maps.js +++ b/test/acceptance/overviews_metadata_named_maps.js @@ -119,6 +119,11 @@ describe('overviews metadata for named maps', function() { assert.ok(parsedBody.layergroupid); assert.ok(parsedBody.last_updated); + const headers = JSON.parse(res.headers['x-tiler-profiler']); + + assert.ok(headers.overviewsAddedToMapconfig); + assert.equal(headers.mapType, 'named'); + next(null, parsedBody.layergroupid); }, From 6dde5fc6f1e8849af92be87538530ff571237c11 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Tue, 4 Sep 2018 18:22:48 +0200 Subject: [PATCH 5/9] use .some instead of reduce --- .../models/mapconfig/adapter/mapconfig-overviews-adapter.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index ff9ecbf6..906f0566 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -28,8 +28,7 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon const layers = results.map(result => result.layer); const overviewsAddedToMapconfig = results .map(result => result.overviewsAddedToMapconfig) - .reduce((overviewsInMapconfig,overviewsInLayer)=>overviewsInMapconfig||overviewsInLayer, - false); + .some(overviewsInLayer => overviewsInLayer); if (!layers || layers.length === 0) { return callback(new Error('Missing layers array from layergroup config')); From d72a5075b99e517bca63fbbe6aca59fe93f5a252 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Wed, 5 Sep 2018 11:48:21 +0200 Subject: [PATCH 6/9] move overviews flags in named map instantiation checks to its own specific tests --- test/acceptance/overviews_metadata.js | 43 +++++++++++-- .../overviews_metadata_named_maps.js | 60 +++++++++++++++++-- 2 files changed, 93 insertions(+), 10 deletions(-) diff --git a/test/acceptance/overviews_metadata.js b/test/acceptance/overviews_metadata.js index fe6470f0..c3c1c68b 100644 --- a/test/acceptance/overviews_metadata.js +++ b/test/acceptance/overviews_metadata.js @@ -73,11 +73,6 @@ describe('overviews metadata', function() { }, {}, function(res) { assert.equal(res.statusCode, 200, res.body); - const headers = JSON.parse(res.headers['x-tiler-profiler']); - - assert.ok(headers.overviewsAddedToMapconfig); - assert.equal(headers.mapType, 'anonymous'); - var parsedBody = JSON.parse(res.body); assert.equal(res.headers['x-layergroup-id'], parsedBody.layergroupid); expected_token = parsedBody.layergroupid; @@ -119,6 +114,44 @@ describe('overviews metadata', function() { } ); }); + + it("Flags overviews usage", function (done) { + var layergroup = { + version: '1.0.0', + layers: [overviews_layer, non_overviews_layer] + }; + + var layergroup_url = '/api/v1/map'; + + var expected_token; + step( + function do_post() { + var next = this; + assert.response(server, { + url: layergroup_url, + method: 'POST', + headers: { host: 'localhost', 'Content-Type': 'application/json' }, + data: JSON.stringify(layergroup) + }, {}, function (res) { + assert.equal(res.statusCode, 200, res.body); + + const headers = JSON.parse(res.headers['x-tiler-profiler']); + + assert.ok(headers.overviewsAddedToMapconfig); + assert.equal(headers.mapType, 'anonymous'); + + const parsedBody = JSON.parse(res.body); + expected_token = parsedBody.layergroupid; + next(); + }); + }, + function finish(err) { + keysToDelete['map_cfg|' + LayergroupToken.parse(expected_token).token] = 0; + keysToDelete['user:localhost:mapviews:global'] = 5; + done(err); + } + ); + }); }); describe('overviews metadata with filters', function() { diff --git a/test/acceptance/overviews_metadata_named_maps.js b/test/acceptance/overviews_metadata_named_maps.js index bfb42c46..a5119370 100644 --- a/test/acceptance/overviews_metadata_named_maps.js +++ b/test/acceptance/overviews_metadata_named_maps.js @@ -119,11 +119,6 @@ describe('overviews metadata for named maps', function() { assert.ok(parsedBody.layergroupid); assert.ok(parsedBody.last_updated); - const headers = JSON.parse(res.headers['x-tiler-profiler']); - - assert.ok(headers.overviewsAddedToMapconfig); - assert.equal(headers.mapType, 'named'); - next(null, parsedBody.layergroupid); }, @@ -181,4 +176,59 @@ describe('overviews metadata for named maps', function() { } ); }); + + it("Flags overviews usage", function (done) { + step( + function postTemplate() { + var next = this; + + assert.response(server, { + url: '/api/v1/map/named?api_key=1234', + method: 'POST', + headers: { host: 'localhost', 'Content-Type': 'application/json' }, + data: JSON.stringify(template) + }, {}, function (res, err) { + next(err, res); + }); + }, + function instantiateTemplate(err) { + assert.ifError(err); + + var next = this; + assert.response(server, { + url: '/api/v1/map/named/' + templateId, + method: 'POST', + headers: { + host: 'localhost', + 'Content-Type': 'application/json' + } + }, {}, + function (res, err) { + return next(err, res); + }); + + }, + function checkFlags(err, res) { + assert.ifError(err); + + var next = this; + + var parsedBody = JSON.parse(res.body); + + keysToDelete['map_cfg|' + LayergroupToken.parse(parsedBody.layergroupid).token] = 0; + keysToDelete['user:localhost:mapviews:global'] = 5; + + const headers = JSON.parse(res.headers['x-tiler-profiler']); + + assert.ok(headers.overviewsAddedToMapconfig); + assert.equal(headers.mapType, 'named'); + + next(); + }, + + function finish(err) { + done(err); + } + ); + }); }); From c54c3754ef362d4b0894ce5aea2dbc123e616766 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Wed, 5 Sep 2018 11:51:58 +0200 Subject: [PATCH 7/9] fix indentation --- lib/cartodb/models/mapconfig/provider/named-map-provider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cartodb/models/mapconfig/provider/named-map-provider.js b/lib/cartodb/models/mapconfig/provider/named-map-provider.js index 5f8f4027..12a41f43 100644 --- a/lib/cartodb/models/mapconfig/provider/named-map-provider.js +++ b/lib/cartodb/models/mapconfig/provider/named-map-provider.js @@ -108,7 +108,7 @@ module.exports = class NamedMapMapConfigProvider extends BaseMapConfigProvider { this.mapConfig = (mapConfig === null) ? null : new MapConfig(mapConfig, context.datasource); this.analysesResults = context.analysesResults || []; - return callback(null, this.mapConfig, this.rendererParams, this.context, stats); + return callback(null, this.mapConfig, this.rendererParams, this.context, stats); }); }); }); From dd1ee566483b55ca84141f7a0f5d5d26ca888507 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Wed, 5 Sep 2018 11:56:45 +0200 Subject: [PATCH 8/9] use .some instead of .map & .some --- .../models/mapconfig/adapter/mapconfig-overviews-adapter.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 906f0566..47179028 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -26,9 +26,7 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon } const layers = results.map(result => result.layer); - const overviewsAddedToMapconfig = results - .map(result => result.overviewsAddedToMapconfig) - .some(overviewsInLayer => overviewsInLayer); + const overviewsAddedToMapconfig = results.some(result => result.overviewsAddedToMapconfig); if (!layers || layers.length === 0) { return callback(new Error('Missing layers array from layergroup config')); From 564884797d8602d5d8958a5a329f0a2ba9b58766 Mon Sep 17 00:00:00 2001 From: Eneko Lakasta Date: Wed, 5 Sep 2018 12:39:51 +0200 Subject: [PATCH 9/9] add tests to check that flags for non overviews instantiation are correct --- test/acceptance/overviews_metadata.js | 103 ++++++++---- .../overviews_metadata_named_maps.js | 156 +++++++++++++----- 2 files changed, 184 insertions(+), 75 deletions(-) diff --git a/test/acceptance/overviews_metadata.js b/test/acceptance/overviews_metadata.js index c3c1c68b..a280e683 100644 --- a/test/acceptance/overviews_metadata.js +++ b/test/acceptance/overviews_metadata.js @@ -115,42 +115,81 @@ describe('overviews metadata', function() { ); }); - it("Flags overviews usage", function (done) { - var layergroup = { - version: '1.0.0', - layers: [overviews_layer, non_overviews_layer] - }; + describe('Overviews Flags', function () { + it("Overviews used", function (done) { + var layergroup = { + version: '1.0.0', + layers: [overviews_layer, non_overviews_layer] + }; - var layergroup_url = '/api/v1/map'; + var layergroup_url = '/api/v1/map'; - var expected_token; - step( - function do_post() { - var next = this; - assert.response(server, { - url: layergroup_url, - method: 'POST', - headers: { host: 'localhost', 'Content-Type': 'application/json' }, - data: JSON.stringify(layergroup) - }, {}, function (res) { - assert.equal(res.statusCode, 200, res.body); + var expected_token; + step( + function do_post() { + var next = this; + assert.response(server, { + url: layergroup_url, + method: 'POST', + headers: { host: 'localhost', 'Content-Type': 'application/json' }, + data: JSON.stringify(layergroup) + }, {}, function (res) { + assert.equal(res.statusCode, 200, res.body); - const headers = JSON.parse(res.headers['x-tiler-profiler']); + const headers = JSON.parse(res.headers['x-tiler-profiler']); - assert.ok(headers.overviewsAddedToMapconfig); - assert.equal(headers.mapType, 'anonymous'); - - const parsedBody = JSON.parse(res.body); - expected_token = parsedBody.layergroupid; - next(); - }); - }, - function finish(err) { - keysToDelete['map_cfg|' + LayergroupToken.parse(expected_token).token] = 0; - keysToDelete['user:localhost:mapviews:global'] = 5; - done(err); - } - ); + assert.ok(headers.overviewsAddedToMapconfig); + assert.equal(headers.mapType, 'anonymous'); + + const parsedBody = JSON.parse(res.body); + expected_token = parsedBody.layergroupid; + next(); + }); + }, + function finish(err) { + keysToDelete['map_cfg|' + LayergroupToken.parse(expected_token).token] = 0; + keysToDelete['user:localhost:mapviews:global'] = 5; + done(err); + } + ); + }); + it("Overviews NOT used", function (done) { + var layergroup = { + version: '1.0.0', + layers: [non_overviews_layer] + }; + + var layergroup_url = '/api/v1/map'; + + var expected_token; + step( + function do_post() { + var next = this; + assert.response(server, { + url: layergroup_url, + method: 'POST', + headers: { host: 'localhost', 'Content-Type': 'application/json' }, + data: JSON.stringify(layergroup) + }, {}, function (res) { + assert.equal(res.statusCode, 200, res.body); + + const headers = JSON.parse(res.headers['x-tiler-profiler']); + + assert.equal(headers.overviewsAddedToMapconfig, false); + assert.equal(headers.mapType, 'anonymous'); + + const parsedBody = JSON.parse(res.body); + expected_token = parsedBody.layergroupid; + next(); + }); + }, + function finish(err) { + keysToDelete['map_cfg|' + LayergroupToken.parse(expected_token).token] = 0; + keysToDelete['user:localhost:mapviews:global'] = 5; + done(err); + } + ); + }); }); }); diff --git a/test/acceptance/overviews_metadata_named_maps.js b/test/acceptance/overviews_metadata_named_maps.js index a5119370..dd72f240 100644 --- a/test/acceptance/overviews_metadata_named_maps.js +++ b/test/acceptance/overviews_metadata_named_maps.js @@ -177,58 +177,128 @@ describe('overviews metadata for named maps', function() { ); }); - it("Flags overviews usage", function (done) { - step( - function postTemplate() { - var next = this; + describe('Overviews Flags', function() { + it("Overviews used", function (done) { + step( + function postTemplate() { + var next = this; - assert.response(server, { - url: '/api/v1/map/named?api_key=1234', - method: 'POST', - headers: { host: 'localhost', 'Content-Type': 'application/json' }, - data: JSON.stringify(template) - }, {}, function (res, err) { - next(err, res); - }); - }, - function instantiateTemplate(err) { - assert.ifError(err); - - var next = this; - assert.response(server, { - url: '/api/v1/map/named/' + templateId, - method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - } - }, {}, - function (res, err) { - return next(err, res); + assert.response(server, { + url: '/api/v1/map/named?api_key=1234', + method: 'POST', + headers: { host: 'localhost', 'Content-Type': 'application/json' }, + data: JSON.stringify(template) + }, {}, function (res, err) { + next(err, res); }); + }, + function instantiateTemplate(err) { + assert.ifError(err); - }, - function checkFlags(err, res) { - assert.ifError(err); + var next = this; + assert.response(server, { + url: '/api/v1/map/named/' + templateId, + method: 'POST', + headers: { + host: 'localhost', + 'Content-Type': 'application/json' + } + }, {}, + function (res, err) { + return next(err, res); + }); - var next = this; + }, + function checkFlags(err, res) { + assert.ifError(err); - var parsedBody = JSON.parse(res.body); + var next = this; - keysToDelete['map_cfg|' + LayergroupToken.parse(parsedBody.layergroupid).token] = 0; - keysToDelete['user:localhost:mapviews:global'] = 5; + var parsedBody = JSON.parse(res.body); - const headers = JSON.parse(res.headers['x-tiler-profiler']); + keysToDelete['map_cfg|' + LayergroupToken.parse(parsedBody.layergroupid).token] = 0; + keysToDelete['user:localhost:mapviews:global'] = 5; - assert.ok(headers.overviewsAddedToMapconfig); - assert.equal(headers.mapType, 'named'); + const headers = JSON.parse(res.headers['x-tiler-profiler']); - next(); - }, + assert.ok(headers.overviewsAddedToMapconfig); + assert.equal(headers.mapType, 'named'); - function finish(err) { - done(err); - } - ); + next(); + }, + + function finish(err) { + done(err); + } + ); + }); + + it("Overviews NOT used", function (done) { + + const nonOverviewsTemplateId = 'non-overviews-template'; + + var nonOverviewsTemplate = { + version: '0.0.1', + name: nonOverviewsTemplateId, + auth: { method: 'open' }, + layergroup: { + version: '1.0.0', + layers: [non_overviews_layer] + } + }; + + step( + function postTemplate() { + var next = this; + + assert.response(server, { + url: '/api/v1/map/named?api_key=1234', + method: 'POST', + headers: { host: 'localhost', 'Content-Type': 'application/json' }, + data: JSON.stringify(nonOverviewsTemplate) + }, {}, function (res, err) { + next(err, res); + }); + }, + function instantiateTemplate(err) { + assert.ifError(err); + + var next = this; + assert.response(server, { + url: '/api/v1/map/named/' + nonOverviewsTemplateId, + method: 'POST', + headers: { + host: 'localhost', + 'Content-Type': 'application/json' + } + }, {}, + function (res, err) { + return next(err, res); + }); + + }, + function checkFlags(err, res) { + assert.ifError(err); + + var next = this; + + var parsedBody = JSON.parse(res.body); + + keysToDelete['map_cfg|' + LayergroupToken.parse(parsedBody.layergroupid).token] = 0; + keysToDelete['user:localhost:mapviews:global'] = 5; + + const headers = JSON.parse(res.headers['x-tiler-profiler']); + + assert.equal(headers.overviewsAddedToMapconfig, false); + assert.equal(headers.mapType, 'named'); + + next(); + }, + + function finish(err) { + done(err); + } + ); + }); }); });