Compare commits

..

20 Commits
2.0.0 ... 2.1.3

Author SHA1 Message Date
Raul Ochoa
ba2a9b81e9 Release 2.1.3 2015-04-16 18:02:36 +02:00
Raul Ochoa
5577600903 Upgrade windshaft and regenerate npm-shrinkwrap.json 2015-04-16 17:48:59 +02:00
Raul Ochoa
a0a455b225 Stubs next version 2015-04-15 16:13:40 +02:00
Raul Ochoa
0019ab495b Release 2.1.2 2015-04-15 16:12:42 +02:00
Raul Ochoa
cbebac1cb1 Merge pull request #286 from CartoDB/profiler-metrics
Profiler metrics improvements
2015-04-15 15:41:12 +02:00
Raul Ochoa
e2fd4aca60 Upgrade windshaft 2015-04-15 15:32:10 +02:00
Raul Ochoa
0c578a193c Remove stack for debug environment option 2015-04-14 16:44:03 +02:00
Raul Ochoa
84f579f0ec Do not add x-profiler header as it's already added by sendResponse 2015-04-14 16:41:04 +02:00
Raul Ochoa
1bf2809355 Do not check statsd_client in profiler 2015-04-14 16:40:15 +02:00
Raul Ochoa
e91bc91057 Adds test suite for x-cache-channel 2015-04-10 13:39:20 +02:00
Raul Ochoa
4f9b6be45b Update routes documentation 2015-04-10 12:00:25 +02:00
Raul Ochoa
95aa74ee34 Stubs next version 2015-04-10 10:57:31 +02:00
Raul Ochoa
e516300825 Release 2.1.1 2015-04-10 10:56:10 +02:00
Raul Ochoa
2d84d38b90 Do not add x-cache-channel header for GET template routes 2015-04-10 10:55:46 +02:00
Raul Ochoa
7cd78be094 Stubs next version 2015-04-09 15:26:21 +02:00
Raul Ochoa
c7a10b048a Release 2.1.0 2015-04-09 15:24:10 +02:00
Raul Ochoa
d143b0235b Upgrades windshaft to 0.42.0 2015-04-09 15:23:42 +02:00
Raul Ochoa
a876c82660 Fixes tests for subdomainless example config change 2015-04-08 16:09:36 +02:00
Raul Ochoa
a6c1aefecc Fixes in example configuration files:
- Puts back the still supported /tiles/template and /tiles/layergroup
 - Changes from /u/:user to /user/:user for subdomainless users
2015-04-08 16:05:33 +02:00
Raul Ochoa
9b122280e1 Stubs next version 2015-04-08 12:27:40 +02:00
12 changed files with 596 additions and 201 deletions

34
NEWS.md
View File

@@ -1,5 +1,39 @@
# Changelog
## 2.1.3
Released 2015-04-16
Announcements:
- Upgrades windshaft to [0.42.2](https://github.com/CartoDB/Windshaft/releases/tag/0.42.2)
## 2.1.2
Released 2015-04-15
Bug fixes:
- Do not check statsd_client in profiler
Announcements:
- Upgrades windshaft to [0.42.1](https://github.com/CartoDB/Windshaft/releases/tag/0.42.1)
## 2.1.1
Released 2015-04-10
Bug fixes:
- Do not add x-cache-channel header for GET template routes
## 2.1.0
Released 2015-04-09
Announcements:
- Upgrades windshaft to [0.42.0](https://github.com/CartoDB/Windshaft/releases/tag/0.42.0)
## 2.0.0

View File

@@ -14,11 +14,11 @@ var config = {
// Base url for the Templated Maps API
// "/api/v1/map/named" is the new API,
// "/tiles/template" is for compatibility with versions up to 1.6.x
,base_url_templated: '(?:/api/v1/map/named|/u/:user/api/v1/map/named)'
,base_url_templated: '(?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)'
// Base url for the Detached Maps API
// "maps" is the the new API,
// "tiles/layergroup" is for compatibility with versions up to 1.6.x
,base_url_detached: '(?:/api/v1/map|/u/:user/api/v1/map)'
,base_url_detached: '(?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)'
// Maximum number of connections for one process
// 128 is a good value with a limit of 1024 open file descriptors

View File

@@ -14,11 +14,11 @@ var config = {
// Base url for the Templated Maps API
// "/api/v1/map/named" is the new API,
// "/tiles/template" is for compatibility with versions up to 1.6.x
,base_url_templated: '(?:/api/v1/map/named|/u/:user/api/v1/map/named)'
,base_url_templated: '(?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)'
// Base url for the Detached Maps API
// "maps" is the the new API,
// "tiles/layergroup" is for compatibility with versions up to 1.6.x
,base_url_detached: '(?:/api/v1/map|/u/:user/api/v1/map)'
,base_url_detached: '(?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)'
// Maximum number of connections for one process
// 128 is a good value with a limit of 1024 open file descriptors

View File

@@ -14,11 +14,11 @@ var config = {
// Base url for the Templated Maps API
// "/api/v1/maps/named" is the new API,
// "/tiles/template" is for compatibility with versions up to 1.6.x
,base_url_templated: '(?:/api/v1/map/named|/u/:user/api/v1/map/named)'
,base_url_templated: '(?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)'
// Base url for the Detached Maps API
// "/api/v1/maps" is the the new API,
// "/tiles/layergroup" is for compatibility with versions up to 1.6.x
,base_url_detached: '(?:/api/v1/map|/u/:user/api/v1/map)'
,base_url_detached: '(?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)'
// Maximum number of connections for one process
// 128 is a good value with a limit of 1024 open file descriptors

View File

@@ -14,11 +14,11 @@ var config = {
// Base url for the Templated Maps API
// "/api/v1/map/named" is the new API,
// "/tiles/template" is for compatibility with versions up to 1.6.x
,base_url_templated: '(?:/api/v1/map/named|/u/:user/api/v1/map/named)'
,base_url_templated: '(?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)'
// Base url for the Detached Maps API
// "maps" is the the new API,
// "tiles/layergroup" is for compatibility with versions up to 1.6.x
,base_url_detached: '(?:/api/v1/map|/u/:user/api/v1/map)'
,base_url_detached: '(?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)'
// Maximum number of connections for one process
// 128 is a good value with a limit of 1024 open file descriptors

View File

@@ -2,25 +2,25 @@ This document list all routes available in Windshaft-cartodb Maps API server.
## Routes list
1. `GET (?:/api/v1/map|/tiles/layergroup)/:token/:z/:x/:y@:scale_factor?x.:format {:token(f),:z(f),:x(f),:y(f),:scale_factor(t),:format(f)} (1)`
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:z/:x/:y@:scale_factor?x.:format {:user(f),:token(f),:z(f),:x(f),:y(f),:scale_factor(t),:format(f)} (1)`
<br/>Notes: Mapnik retina tiles [0]
1. `GET (?:/api/v1/map|/tiles/layergroup)/:token/:z/:x/:y.:format {:token(f),:z(f),:x(f),:y(f),:format(f)} (1)`
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:z/:x/:y.:format {:user(f),:token(f),:z(f),:x(f),:y(f),:format(f)} (1)`
<br/>Notes: Mapnik tiles [0]
1. `GET (?:/api/v1/map|/tiles/layergroup)/:token/:layer/:z/:x/:y.(:format) {:token(f),:layer(f),:z(f),:x(f),:y(f),:format(f)} (1)`
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/:z/:x/:y.(:format) {:user(f),:token(f),:layer(f),:z(f),:x(f),:y(f),:format(f)} (1)`
<br/>Notes: Per :layer rendering based on :format [0]
1. `GET (?:/api/v1/map|/tiles/layergroup) {} (1)`
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)`
<br/>Notes: Map instantiation [0]
1. `GET (?:/api/v1/map|/tiles/layergroup)/:token/:layer/attributes/:fid {:token(f),:layer(f),:fid(f)} (1)`
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/:token/:layer/attributes/:fid {:user(f),:token(f),:layer(f),:fid(f)} (1)`
<br/>Notes: Endpoint for info windows data, alternative for sql api when tables are private [0]
1. `GET (?:/api/v1/map|/tiles/layergroup)/static/center/:token/:z/:lat/:lng/:width/:height.:format {:token(f),:z(f),:lat(f),:lng(f),:width(f),:height(f),:format(f)} (1)`
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/static/center/:token/:z/:lat/:lng/:width/:height.:format {:user(f),:token(f),:z(f),:lat(f),:lng(f),:width(f),:height(f),:format(f)} (1)`
<br/>Notes: Static Maps API [0]
1. `GET (?:/api/v1/map|/tiles/layergroup)/static/bbox/:token/:west,:south,:east,:north/:width/:height.:format {:token(f),:west(f),:south(f),:east(f),:north(f),:width(f),:height(f),:format(f)} (1)`
1. `GET (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup)/static/bbox/:token/:west,:south,:east,:north/:width/:height.:format {:user(f),:token(f),:west(f),:south(f),:east(f),:north(f),:width(f),:height(f),:format(f)} (1)`
<br/>Notes: Static Maps API [0]
1. `GET / {} (1)`
@@ -29,66 +29,39 @@ This document list all routes available in Windshaft-cartodb Maps API server.
1. `GET /version {} (1)`
<br/>Notes: Return relevant module versions: mapnik, grainstore, etc
1. `GET /tiles/:table/:z/:x/:y.* {:table(f),:z(f),:x(f),:y(f)} (1)`
<br/>Notes: **[DEPRECATED]** Per :table tiles rendering
1. `GET /tiles/:table/style {:table(f)} (1)`
<br/>Notes: **[DEPRECATED]** Style for :table
1. `GET (?:/api/v1/map/named|/tiles/template)/:template_id/jsonp {:template_id(f)} (1)`
1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id/jsonp {:user(f),:template_id(f)} (1)`
<br/>Notes: Named maps JSONP instantiation [1]
1. `GET (?:/api/v1/map/named|/tiles/template)/:template_id {:template_id(f)} (1)`
1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
<br/>Notes: Named map retrieval (w/ API KEY) [1]
1. `GET (?:/api/v1/map/named|/tiles/template) {} (1)`
1. `GET (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)`
<br/>Notes: List named maps (w/ API KEY) [1]
1. `GET /tiles/:table/infowindow {:table(f)} (1)`
<br/>Notes: **[DEPRECATED]** retrieve info window template for :table
1. `GET /tiles/:table/map_metadata {:table(f)} (1)`
<br/>Notes: **[DEPRECATED]** retrieve map metadata for :table
1. `GET /health {} (1)`
<br/>Notes: Healt check
1. `OPTIONS (?:/api/v1/map|/tiles/layergroup) {} (1)`
1. `OPTIONS (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)`
<br/>Notes: CORS [0]
1. `OPTIONS /tiles/:table/:z/:x/:y.* {:table(f),:z(f),:x(f),:y(f)} (1)`
<br/>Notes: **[DEPRECATED]** CORS
1. `OPTIONS /tiles/:table/style {:table(f)} (1)`
<br/>Notes: **[DEPRECATED]** CORS
1. `OPTIONS (?:/api/v1/map/named|/tiles/template)/:template_id {:template_id(f)} (1)`
1. `OPTIONS (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
<br/>Notes: CORS [1]
1. `POST (?:/api/v1/map|/tiles/layergroup) {} (1)`
1. `POST (?:/api/v1/map|/user/:user/api/v1/map|/tiles/layergroup) {:user(f)} (1)`
<br/>Notes: Map instantiation [0]
1. `POST /tiles/:table/style {:table(f)} (1)`
<br/>Notes: **[DEPRECATED]** Create style for :table
1. `POST (?:/api/v1/map/named|/tiles/template) {} (1)`
1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template) {:user(f)} (1)`
<br/>Notes: Create named map (w/ API KEY) [1]
1. `POST (?:/api/v1/map/named|/tiles/template)/:template_id {:template_id(f)} (1)`
1. `POST (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
<br/>Notes: Instantiate named map [1]
1. `DELETE /tiles/:table/style {:table(f)} (1)`
<br/>Notes: **[DEPRECATED]** Delete :table style
1. `DELETE (?:/api/v1/map/named|/tiles/template)/:template_id {:template_id(f)} (1)`
<br/>Notes: Delete named map (w/ API KEY) [1]
1. `DELETE /tiles/:table/flush_cache {:table(f)} (1)`
<br/>Notes: **[DEPRECATED]** Flush internal caches for :table
1. `PUT (?:/api/v1/map/named|/tiles/template)/:template_id {:template_id(f)} (1)`
1. `PUT (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
<br/>Notes: Update a named map (w/ API KEY) [1]
1. `DELETE (?:/api/v1/map/named|/user/:user/api/v1/map/named|/tiles/template)/:template_id {:user(f),:template_id(f)} (1)`
<br/>Notes: Delete named map (w/ API KEY) [1]
## Optional deprecated routes
- [0] `/tiles/layergroup` is deprecated and `/api/v1/map` should be used but we keep it for now.

View File

@@ -69,8 +69,11 @@ var CartodbWindshaft = function(serverOptions) {
// POST/PUT/DELETE requests are never cached anyway.
var noCacheGETRoutes = [
'/',
'/version',
// See https://github.com/CartoDB/Windshaft-cartodb/issues/176
serverOptions.base_url_mapconfig,
template_baseurl,
template_baseurl + '/:template_id',
template_baseurl + '/:template_id/jsonp'
];
ws.sendResponse = function(res, args) {

View File

@@ -59,9 +59,6 @@ TemplateMapsController.prototype.create = function(req, res) {
return { template_id: cdbuser + '@' + tpl_id };
},
function finish(err, response){
if ( req.profiler ) {
res.header('X-Tiler-Profiler', req.profiler.toJSONString());
}
if (err){
response = { error: ''+err };
var statusCode = 400;
@@ -115,9 +112,6 @@ TemplateMapsController.prototype.update = function(req, res) {
return { template_id: cdbuser + '@' + tpl_id };
},
function finish(err, response){
if ( req.profiler ) {
res.header('X-Tiler-Profiler', req.profiler.toJSONString());
}
if (err){
var statusCode = 400;
response = { error: ''+err };
@@ -136,7 +130,7 @@ TemplateMapsController.prototype.update = function(req, res) {
TemplateMapsController.prototype.retrieve = function(req, res) {
var self = this;
if ( req.profiler && req.profiler.statsd_client ) {
if (req.profiler) {
req.profiler.start('windshaft-cartodb.get_template');
}
@@ -198,7 +192,7 @@ TemplateMapsController.prototype.retrieve = function(req, res) {
TemplateMapsController.prototype.destroy = function(req, res) {
var self = this;
if ( req.profiler && req.profiler.statsd_client ) {
if (req.profiler) {
req.profiler.start('windshaft-cartodb.delete_template');
}
this.app.doCORS(res);
@@ -250,8 +244,7 @@ TemplateMapsController.prototype.destroy = function(req, res) {
// Get a list of owned templates
TemplateMapsController.prototype.list = function(req, res) {
var self = this;
if ( req.profiler && req.profiler.statsd_client ) {
if ( req.profiler ) {
req.profiler.start('windshaft-cartodb.get_template_list');
}
this.app.doCORS(res);
@@ -295,7 +288,7 @@ TemplateMapsController.prototype.list = function(req, res) {
TemplateMapsController.prototype.instantiate = function(req, res) {
var self = this;
if ( req.profiler && req.profiler.statsd_client) {
if (req.profiler) {
req.profiler.start('windshaft-cartodb.instance_template_post');
}
step(
@@ -305,7 +298,7 @@ TemplateMapsController.prototype.instantiate = function(req, res) {
}
self.instantiateTemplate(req, res, req.body, this);
}, function(err, response) {
self.finish_instantiation(err, response, res, req);
self.finish_instantiation(err, response, res);
}
);
};
@@ -322,7 +315,7 @@ TemplateMapsController.prototype.options = function(req, res, next) {
TemplateMapsController.prototype.jsonp = function(req, res) {
var self = this;
if ( req.profiler && req.profiler.statsd_client) {
if (req.profiler) {
req.profiler.start('windshaft-cartodb.instance_template_get');
}
step(
@@ -340,7 +333,7 @@ TemplateMapsController.prototype.jsonp = function(req, res) {
}
self.instantiateTemplate(req, res, config, this);
}, function(err, response) {
self.finish_instantiation(err, response, res, req);
self.finish_instantiation(err, response, res);
}
);
};
@@ -447,19 +440,13 @@ TemplateMapsController.prototype.instantiateTemplate = function(req, res, templa
);
};
TemplateMapsController.prototype.finish_instantiation = function(err, response, res, req) {
if ( req.profiler ) {
res.header('X-Tiler-Profiler', req.profiler.toJSONString());
}
TemplateMapsController.prototype.finish_instantiation = function(err, response, res) {
if (err) {
var statusCode = 400;
response = { error: ''+err };
if ( ! _.isUndefined(err.http_status) ) {
statusCode = err.http_status;
}
if(global.environment.debug) {
response.stack = err.stack;
}
this.app.sendError(res, response, statusCode, 'POST INSTANCE TEMPLATE', err);
} else {
this.app.sendResponse(res, [response, 200]);

349
npm-shrinkwrap.json generated
View File

@@ -1,6 +1,6 @@
{
"name": "windshaft-cartodb",
"version": "2.0.0",
"version": "2.1.3",
"dependencies": {
"cartodb-psql": {
"version": "0.4.0",
@@ -170,9 +170,9 @@
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz"
},
"windshaft": {
"version": "0.41.0",
"from": "windshaft@0.41.0",
"resolved": "https://registry.npmjs.org/windshaft/-/windshaft-0.41.0.tgz",
"version": "0.42.2",
"from": "windshaft@0.42.2",
"resolved": "https://registry.npmjs.org/windshaft/-/windshaft-0.42.2.tgz",
"dependencies": {
"chronograph": {
"version": "0.1.0",
@@ -402,62 +402,158 @@
}
},
"srs": {
"version": "0.4.6",
"version": "0.4.7",
"from": "srs@~0.4.1",
"resolved": "https://registry.npmjs.org/srs/-/srs-0.4.6.tgz",
"resolved": "https://registry.npmjs.org/srs/-/srs-0.4.7.tgz",
"dependencies": {
"nan": {
"version": "1.4.3",
"from": "nan@~1.4.1",
"resolved": "https://registry.npmjs.org/nan/-/nan-1.4.3.tgz"
"version": "1.7.0",
"from": "nan@~1.7.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-1.7.0.tgz"
},
"node-pre-gyp": {
"version": "0.6.1",
"from": "node-pre-gyp@~0.6.1",
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.1.tgz",
"version": "0.6.4",
"from": "node-pre-gyp@~0.6.4",
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.4.tgz",
"dependencies": {
"nopt": {
"version": "3.0.1",
"from": "nopt@~3.0.1",
"from": "nopt@>=3.0.1 <3.1.0",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.1.tgz",
"dependencies": {
"abbrev": {
"version": "1.0.5",
"from": "abbrev@1",
"from": "abbrev@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
}
}
},
"npmlog": {
"version": "0.1.1",
"from": "npmlog@~0.1.1",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-0.1.1.tgz",
"version": "1.1.0",
"from": "npmlog@>=1.1.0 <1.2.0",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.1.0.tgz",
"dependencies": {
"ansi": {
"version": "0.3.0",
"from": "ansi@~0.3.0",
"from": "ansi@>=0.3.0 <0.4.0",
"resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.0.tgz"
},
"are-we-there-yet": {
"version": "1.0.2",
"from": "are-we-there-yet@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.2.tgz",
"dependencies": {
"delegates": {
"version": "0.1.0",
"from": "delegates@>=0.1.0 <0.2.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-0.1.0.tgz"
}
}
},
"gauge": {
"version": "1.1.0",
"from": "gauge@>=1.1.0 <1.2.0",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-1.1.0.tgz",
"dependencies": {
"has-unicode": {
"version": "1.0.0",
"from": "has-unicode@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-1.0.0.tgz"
},
"lodash.pad": {
"version": "3.0.0",
"from": "lodash.pad@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-3.0.0.tgz",
"dependencies": {
"lodash._basetostring": {
"version": "3.0.0",
"from": "lodash._basetostring@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.0.tgz"
},
"lodash._createpad": {
"version": "3.0.1",
"from": "lodash._createpad@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash._createpad/-/lodash._createpad-3.0.1.tgz",
"dependencies": {
"lodash.repeat": {
"version": "3.0.0",
"from": "lodash.repeat@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.0.tgz"
}
}
}
}
},
"lodash.padleft": {
"version": "3.0.0",
"from": "lodash.padleft@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash.padleft/-/lodash.padleft-3.0.0.tgz",
"dependencies": {
"lodash._basetostring": {
"version": "3.0.0",
"from": "lodash._basetostring@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.0.tgz"
},
"lodash._createpad": {
"version": "3.0.1",
"from": "lodash._createpad@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash._createpad/-/lodash._createpad-3.0.1.tgz",
"dependencies": {
"lodash.repeat": {
"version": "3.0.0",
"from": "lodash.repeat@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.0.tgz"
}
}
}
}
},
"lodash.padright": {
"version": "3.0.0",
"from": "lodash.padright@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash.padright/-/lodash.padright-3.0.0.tgz",
"dependencies": {
"lodash._basetostring": {
"version": "3.0.0",
"from": "lodash._basetostring@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.0.tgz"
},
"lodash._createpad": {
"version": "3.0.1",
"from": "lodash._createpad@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash._createpad/-/lodash._createpad-3.0.1.tgz",
"dependencies": {
"lodash.repeat": {
"version": "3.0.0",
"from": "lodash.repeat@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-3.0.0.tgz"
}
}
}
}
}
}
}
}
},
"request": {
"version": "2.48.0",
"from": "request@2.x",
"resolved": "https://registry.npmjs.org/request/-/request-2.48.0.tgz",
"version": "2.53.0",
"from": "request@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.53.0.tgz",
"dependencies": {
"bl": {
"version": "0.9.3",
"from": "bl@~0.9.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-0.9.3.tgz",
"version": "0.9.4",
"from": "bl@>=0.9.0 <0.10.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-0.9.4.tgz",
"dependencies": {
"readable-stream": {
"version": "1.0.33",
"from": "readable-stream@~1.0.26",
"from": "readable-stream@>=1.0.26 <1.1.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz",
"dependencies": {
"core-util-is": {
"version": "1.0.1",
"from": "core-util-is@~1.0.0",
"from": "core-util-is@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
},
"isarray": {
@@ -467,12 +563,12 @@
},
"string_decoder": {
"version": "0.10.31",
"from": "string_decoder@~0.10.x",
"from": "string_decoder@>=0.10.0 <0.11.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
},
"inherits": {
"version": "2.0.1",
"from": "inherits@~2.0.1",
"from": "inherits@>=2.0.1 <2.1.0",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
}
}
@@ -480,55 +576,57 @@
}
},
"caseless": {
"version": "0.7.0",
"from": "caseless@~0.7.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.7.0.tgz"
"version": "0.9.0",
"from": "caseless@>=0.9.0 <0.10.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz"
},
"forever-agent": {
"version": "0.5.2",
"from": "forever-agent@~0.5.0",
"from": "forever-agent@>=0.5.0 <0.6.0",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz"
},
"form-data": {
"version": "0.1.4",
"from": "form-data@~0.1.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz",
"version": "0.2.0",
"from": "form-data@>=0.2.0 <0.3.0",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz",
"dependencies": {
"mime": {
"version": "1.2.11",
"from": "mime@~1.2.11",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
},
"async": {
"version": "0.9.0",
"from": "async@~0.9.0",
"from": "async@>=0.9.0 <0.10.0",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
}
}
},
"json-stringify-safe": {
"version": "5.0.0",
"from": "json-stringify-safe@~5.0.0",
"from": "json-stringify-safe@>=5.0.0 <5.1.0",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz"
},
"mime-types": {
"version": "1.0.2",
"from": "mime-types@~1.0.1",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz"
"version": "2.0.9",
"from": "mime-types@>=2.0.1 <2.1.0",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.9.tgz",
"dependencies": {
"mime-db": {
"version": "1.7.0",
"from": "mime-db@>=1.7.0 <1.8.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.7.0.tgz"
}
}
},
"node-uuid": {
"version": "1.4.1",
"from": "node-uuid@~1.4.0",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz"
"version": "1.4.2",
"from": "node-uuid@>=1.4.0 <1.5.0",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz"
},
"qs": {
"version": "2.3.3",
"from": "qs@~2.3.1",
"from": "qs@>=2.3.1 <2.4.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz"
},
"tunnel-agent": {
"version": "0.4.0",
"from": "tunnel-agent@~0.4.0",
"from": "tunnel-agent@>=0.4.0 <0.5.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz"
},
"tough-cookie": {
@@ -544,14 +642,14 @@
}
},
"http-signature": {
"version": "0.10.0",
"from": "http-signature@~0.10.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz",
"version": "0.10.1",
"from": "http-signature@>=0.10.0 <0.11.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
"dependencies": {
"assert-plus": {
"version": "0.1.2",
"from": "assert-plus@0.1.2",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz"
"version": "0.1.5",
"from": "assert-plus@>=0.1.5 <0.2.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz"
},
"asn1": {
"version": "0.1.11",
@@ -559,57 +657,57 @@
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
},
"ctype": {
"version": "0.5.2",
"from": "ctype@0.5.2",
"resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz"
"version": "0.5.3",
"from": "ctype@0.5.3",
"resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz"
}
}
},
"oauth-sign": {
"version": "0.5.0",
"from": "oauth-sign@~0.5.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.5.0.tgz"
"version": "0.6.0",
"from": "oauth-sign@>=0.6.0 <0.7.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz"
},
"hawk": {
"version": "1.1.1",
"from": "hawk@1.1.1",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz",
"version": "2.3.1",
"from": "hawk@>=2.3.0 <2.4.0",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz",
"dependencies": {
"hoek": {
"version": "0.9.1",
"from": "hoek@0.9.x",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
"version": "2.11.0",
"from": "hoek@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.11.0.tgz"
},
"boom": {
"version": "0.4.2",
"from": "boom@0.4.x",
"resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz"
"version": "2.6.1",
"from": "boom@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.6.1.tgz"
},
"cryptiles": {
"version": "0.2.2",
"from": "cryptiles@0.2.x",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz"
"version": "2.0.4",
"from": "cryptiles@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz"
},
"sntp": {
"version": "0.2.4",
"from": "sntp@0.2.x",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz"
"version": "1.0.9",
"from": "sntp@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz"
}
}
},
"aws-sign2": {
"version": "0.5.0",
"from": "aws-sign2@~0.5.0",
"from": "aws-sign2@>=0.5.0 <0.6.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz"
},
"stringstream": {
"version": "0.0.4",
"from": "stringstream@~0.0.4",
"from": "stringstream@>=0.0.4 <0.1.0",
"resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz"
},
"combined-stream": {
"version": "0.0.7",
"from": "combined-stream@~0.0.5",
"from": "combined-stream@>=0.0.5 <0.1.0",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
"dependencies": {
"delayed-stream": {
@@ -618,18 +716,23 @@
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz"
}
}
},
"isstream": {
"version": "0.1.1",
"from": "isstream@>=0.1.1 <0.2.0",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.1.tgz"
}
}
},
"semver": {
"version": "4.1.0",
"from": "semver@~4.1.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-4.1.0.tgz"
"version": "4.3.0",
"from": "semver@>=4.3.0 <4.4.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-4.3.0.tgz"
},
"tar": {
"version": "1.0.2",
"from": "tar@~1.0.2",
"resolved": "https://registry.npmjs.org/tar/-/tar-1.0.2.tgz",
"version": "1.0.3",
"from": "tar@>=1.0.2 <1.1.0",
"resolved": "https://registry.npmjs.org/tar/-/tar-1.0.3.tgz",
"dependencies": {
"block-stream": {
"version": "0.0.7",
@@ -637,27 +740,27 @@
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz"
},
"fstream": {
"version": "1.0.2",
"from": "fstream@^1.0.2",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.2.tgz",
"version": "1.0.4",
"from": "fstream@>=1.0.2 <2.0.0",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.4.tgz",
"dependencies": {
"graceful-fs": {
"version": "3.0.4",
"from": "graceful-fs@3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz"
"version": "3.0.5",
"from": "graceful-fs@>=3.0.0 <4.0.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz"
}
}
},
"inherits": {
"version": "2.0.1",
"from": "inherits@2",
"from": "inherits@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
}
}
},
"tar-pack": {
"version": "2.0.0",
"from": "tar-pack@~2.0.0",
"from": "tar-pack@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-2.0.0.tgz",
"dependencies": {
"uid-number": {
@@ -667,34 +770,34 @@
},
"once": {
"version": "1.1.1",
"from": "once@~1.1.1",
"from": "once@>=1.1.1 <1.2.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.1.1.tgz"
},
"debug": {
"version": "0.7.4",
"from": "debug@~0.7.2",
"from": "debug@>=0.7.2 <0.8.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz"
},
"fstream": {
"version": "0.1.31",
"from": "fstream@~0.1.22",
"from": "fstream@>=0.1.22 <0.2.0",
"resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz",
"dependencies": {
"graceful-fs": {
"version": "3.0.4",
"from": "graceful-fs@~3.0.2",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.4.tgz"
"version": "3.0.5",
"from": "graceful-fs@>=3.0.2 <3.1.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz"
},
"inherits": {
"version": "2.0.1",
"from": "inherits@~2.0.0",
"from": "inherits@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
}
}
},
"tar": {
"version": "0.1.20",
"from": "tar@~0.1.17",
"from": "tar@>=0.1.17 <0.2.0",
"resolved": "https://registry.npmjs.org/tar/-/tar-0.1.20.tgz",
"dependencies": {
"block-stream": {
@@ -704,7 +807,7 @@
},
"inherits": {
"version": "2.0.1",
"from": "inherits@2",
"from": "inherits@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
}
}
@@ -716,36 +819,36 @@
"dependencies": {
"minimatch": {
"version": "0.2.14",
"from": "minimatch@~0.2.0",
"from": "minimatch@>=0.2.0 <0.3.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
"dependencies": {
"lru-cache": {
"version": "2.5.0",
"from": "lru-cache@2",
"from": "lru-cache@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
},
"sigmund": {
"version": "1.0.0",
"from": "sigmund@~1.0.0",
"from": "sigmund@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
}
}
},
"inherits": {
"version": "2.0.1",
"from": "inherits@2",
"from": "inherits@>=2.0.0 <3.0.0",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
}
}
},
"readable-stream": {
"version": "1.0.33",
"from": "readable-stream@~1.0.2",
"from": "readable-stream@>=1.0.2 <1.1.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz",
"dependencies": {
"core-util-is": {
"version": "1.0.1",
"from": "core-util-is@~1.0.0",
"from": "core-util-is@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
},
"isarray": {
@@ -755,26 +858,26 @@
},
"string_decoder": {
"version": "0.10.31",
"from": "string_decoder@~0.10.x",
"from": "string_decoder@>=0.10.0 <0.11.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
},
"inherits": {
"version": "2.0.1",
"from": "inherits@~2.0.1",
"from": "inherits@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
}
}
},
"graceful-fs": {
"version": "1.2.3",
"from": "graceful-fs@1.2",
"from": "graceful-fs@>=1.2.0 <1.3.0",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz"
}
}
},
"mkdirp": {
"version": "0.5.0",
"from": "mkdirp@~0.5.0",
"from": "mkdirp@>=0.5.0 <0.6.0",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
"dependencies": {
"minimist": {
@@ -785,35 +888,35 @@
}
},
"rc": {
"version": "0.5.4",
"from": "rc@~0.5.1",
"resolved": "https://registry.npmjs.org/rc/-/rc-0.5.4.tgz",
"version": "0.6.0",
"from": "rc@>=0.6.0 <0.7.0",
"resolved": "https://registry.npmjs.org/rc/-/rc-0.6.0.tgz",
"dependencies": {
"minimist": {
"version": "0.0.10",
"from": "minimist@~0.0.7",
"from": "minimist@>=0.0.7 <0.1.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz"
},
"deep-extend": {
"version": "0.2.11",
"from": "deep-extend@~0.2.5",
"from": "deep-extend@>=0.2.5 <0.3.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz"
},
"strip-json-comments": {
"version": "0.1.3",
"from": "strip-json-comments@0.1.x",
"from": "strip-json-comments@>=0.1.0 <0.2.0",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz"
},
"ini": {
"version": "1.1.0",
"from": "ini@~1.1.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz"
"version": "1.3.3",
"from": "ini@>=1.3.0 <1.4.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.3.tgz"
}
}
},
"rimraf": {
"version": "2.2.8",
"from": "rimraf@~2.2.8",
"from": "rimraf@>=2.2.8 <2.3.0",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
}
}

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "windshaft-cartodb",
"version": "2.0.0",
"version": "2.1.3",
"description": "A map tile server for CartoDB",
"keywords": [
"cartodb"
@@ -24,7 +24,7 @@
"dependencies": {
"underscore" : "~1.6.0",
"dot": "~1.0.2",
"windshaft": "0.41.0",
"windshaft": "0.42.2",
"step": "~0.0.5",
"queue-async": "~1.0.7",
"request": "~2.9.203",

View File

@@ -17,7 +17,7 @@ var serverOptions = require(__dirname + '/../../lib/cartodb/server_options');
var server = new CartodbWindshaft(serverOptions());
server.setMaxListeners(0);
['/api/v1/map', '/u/localhost/api/v1/map'].forEach(function(layergroup_url) {
['/api/v1/map', '/user/localhost/api/v1/map'].forEach(function(layergroup_url) {
var suiteName = 'multilayer:postgres=layergroup_url=' + layergroup_url;
suite(suiteName, function() {

View File

@@ -0,0 +1,295 @@
require('../support/test_helper');
var assert = require('../support/assert');
var qs = require('querystring');
var CartodbWindshaft = require('../../lib/cartodb/cartodb_windshaft');
var serverOptions = require('../../lib/cartodb/server_options')();
var server = new CartodbWindshaft(serverOptions);
server.setMaxListeners(0);
describe('get requests x-cache-channel', function() {
var statusOkResponse = {
status: 200
};
var mapConfig = {
version: '1.3.0',
layers: [
{
options: {
sql: 'select * from test_table limit 2',
cartocss: '#layer { marker-fill:red; }',
cartocss_version: '2.3.0',
attributes: {
id:'cartodb_id',
columns: [
'name',
'address'
]
}
}
}
]
};
var layergroupRequest = {
url: '/api/v1/map?config=' + encodeURIComponent(JSON.stringify(mapConfig)),
method: 'GET',
headers: {
host: 'localhost'
}
};
function getRequest(url, addApiKey, callbackName) {
var params = {};
if (!!addApiKey) {
params.api_key = '1234';
}
if (!!callbackName) {
params.callback = callbackName;
}
return {
url: url + '?' + qs.stringify(params),
method: 'GET',
headers: {
host: 'localhost',
'Content-Type': 'application/json'
}
};
}
function validateXCacheChannel(done, expectedCacheChannel) {
return function(res, err) {
if (err) {
return done(err);
}
assert.ok(res.headers['x-cache-channel']);
if (expectedCacheChannel) {
assert.equal(res.headers['x-cache-channel'], expectedCacheChannel);
}
done();
};
}
function noXCacheChannelHeader(done) {
return function(res, err) {
if (err) {
return done(err);
}
assert.ok(
!res.headers['x-cache-channel'],
'did not expect x-cache-channel header, got: `' + res.headers['x-cache-channel'] + '`'
);
done();
};
}
function withLayergroupId(callback) {
assert.response(
server,
layergroupRequest,
statusOkResponse,
function(res, err) {
if (err) {
return callback(err);
}
callback(null, JSON.parse(res.body).layergroupid);
}
);
}
describe('header should be present', function() {
it('/api/v1/map Map instantiation', function(done) {
assert.response(
server,
layergroupRequest,
statusOkResponse,
validateXCacheChannel(done, 'test_windshaft_cartodb_user_1_db:public.test_table')
);
});
it ('/api/v1/map/:token/:z/:x/:y@:scale_factor?x.:format Mapnik retina tiles', function(done) {
withLayergroupId(function(err, layergroupId) {
assert.response(
server,
getRequest('/api/v1/map/' + layergroupId + '/0/0/0@2x.png'),
validateXCacheChannel(done, 'test_windshaft_cartodb_user_1_db:public.test_table')
);
});
});
it ('/api/v1/map/:token/:z/:x/:y@:scale_factor?x.:format Mapnik tiles', function(done) {
withLayergroupId(function(err, layergroupId) {
assert.response(
server,
getRequest('/api/v1/map/' + layergroupId + '/0/0/0.png'),
validateXCacheChannel(done, 'test_windshaft_cartodb_user_1_db:public.test_table')
);
});
});
it ('/api/v1/map/:token/:layer/:z/:x/:y.(:format) Per :layer rendering', function(done) {
withLayergroupId(function(err, layergroupId) {
assert.response(
server,
getRequest('/api/v1/map/' + layergroupId + '/0/0/0/0.png'),
validateXCacheChannel(done, 'test_windshaft_cartodb_user_1_db:public.test_table')
);
});
});
it ('/api/v1/map/:token/:layer/attributes/:fid endpoint for info windows', function(done) {
withLayergroupId(function(err, layergroupId) {
assert.response(
server,
getRequest('/api/v1/map/' + layergroupId + '/0/attributes/1'),
validateXCacheChannel(done, 'test_windshaft_cartodb_user_1_db:public.test_table')
);
});
});
it ('/api/v1/map/static/center/:token/:z/:lat/:lng/:width/:height.:format static maps', function(done) {
withLayergroupId(function(err, layergroupId) {
assert.response(
server,
getRequest('/api/v1/map/static/center/' + layergroupId + '/0/0/0/400/300.png'),
validateXCacheChannel(done, 'test_windshaft_cartodb_user_1_db:public.test_table')
);
});
});
it ('/api/v1/map/static/bbox/:token/:bbox/:width/:height.:format static maps', function(done) {
withLayergroupId(function(err, layergroupId) {
assert.response(
server,
getRequest('/api/v1/map/static/bbox/' + layergroupId + '/-45,-45,45,45/400/300.png'),
validateXCacheChannel(done, 'test_windshaft_cartodb_user_1_db:public.test_table')
);
});
});
});
describe('header should NOT be present', function() {
it('/', function(done) {
assert.response(
server,
getRequest('/'),
statusOkResponse,
noXCacheChannelHeader(done)
);
});
it('/version', function(done) {
assert.response(
server,
getRequest('/version'),
statusOkResponse,
noXCacheChannelHeader(done)
);
});
it('/health', function(done) {
assert.response(
server,
getRequest('/health'),
statusOkResponse,
noXCacheChannelHeader(done)
);
});
it('/api/v1/map/named list named maps', function(done) {
assert.response(
server,
getRequest('/api/v1/map/named', true),
statusOkResponse,
noXCacheChannelHeader(done)
);
});
describe('with named maps', function() {
var templateName = 'x_cache';
before(function(done) {
var template = {
version: '0.0.1',
name: templateName,
auth: {
method: 'open'
},
layergroup: mapConfig
};
var namedMapRequest = {
url: '/api/v1/map/named?api_key=1234',
method: 'POST',
headers: {
host: 'localhost',
'Content-Type': 'application/json'
},
data: JSON.stringify(template)
};
assert.response(
server,
namedMapRequest,
statusOkResponse,
function(res, err) {
done(err);
}
);
});
after(function(done) {
assert.response(
server,
{
url: '/api/v1/map/named/' + templateName + '?api_key=1234',
method: 'DELETE',
headers: {
host: 'localhost'
}
},
{
status: 204
},
function(res, err) {
done(err);
}
);
});
it('/api/v1/map/named/:template_id Named map retrieval', function(done) {
assert.response(
server,
getRequest('/api/v1/map/named/' + templateName, true),
statusOkResponse,
noXCacheChannelHeader(done)
);
});
it('/api/v1/map/named/:template_id/jsonp Named map retrieval', function(done) {
assert.response(
server,
getRequest('/api/v1/map/named/' + templateName, true, 'cb'),
statusOkResponse,
noXCacheChannelHeader(done)
);
});
});
});
});