Remove POSTGIS_VERSION env variable and run test using mvt renderer always

This commit is contained in:
Daniel García Aubert 2019-02-22 08:31:22 +01:00
parent 561bdb3938
commit 5f43db2e36
12 changed files with 283 additions and 310 deletions

View File

@ -6,17 +6,16 @@ const assert = require('../support/assert');
const TestClient = require('../support/test-client');
const serverOptions = require('../../lib/cartodb/server_options');
const suites = [{
desc: 'mvt (mapnik)',
usePostGIS: false
}];
if (process.env.POSTGIS_VERSION >= '20400') {
suites.push({
const suites = [
{
desc: 'mvt (mapnik)',
usePostGIS: false
},
{
desc: 'mvt (postgis)',
usePostGIS: true
});
}
}
];
// Generate points with values and times.
// The point location is spanned over a given length, by default it is 0 so

View File

@ -171,8 +171,7 @@ describe('buffer size per format', function () {
});
});
const describe_pg = process.env.POSTGIS_VERSION >= '20400' ? describe : describe.skip;
describe_pg('using postgis mvt renderer', function() {
describe('using postgis mvt renderer', function() {
before(function () {
serverOptions.renderer.mvt.usePostGIS = true;
});
@ -505,8 +504,7 @@ describe('buffer size per format for named maps w/o placeholders', function () {
});
});
const describe_pg = process.env.POSTGIS_VERSION >= '20400' ? describe : describe.skip;
describe_pg('using postgis mvt renderer', function() {
describe('using postgis mvt renderer', function() {
before(function () {
serverOptions.renderer.mvt.usePostGIS = true;
});

View File

@ -7,8 +7,7 @@ const mapConfigFactory = require('../fixtures/test_mapconfigFactory');
const serverOptions = require('../../lib/cartodb/server_options');
const usePgMvtRenderer = serverOptions.renderer.mvt.usePostGIS;
const postgisVersion = process.env.POSTGIS_VERSION;
const describe_mvt = postgisVersion >= '20400' || !usePgMvtRenderer ? describe : describe.skip;
const describe_mvt = !usePgMvtRenderer ? describe : describe.skip;
describe_mvt('date-wrapping', () => {
let testClient;

View File

@ -7,12 +7,10 @@ const TestClient = require('../support/test-client');
const serverOptions = require('../../lib/cartodb/server_options');
describe('layergroup metadata', function () {
const usePgMvtRenderer = process.env.POSTGIS_VERSION >= '20400';
const originalUsePostGIS = serverOptions.renderer.mvt.usePostGIS;
before(function () {
serverOptions.renderer.mvt.usePostGIS = usePgMvtRenderer;
serverOptions.renderer.mvt.usePostGIS = true;
});
after(function () {

View File

@ -6,17 +6,16 @@ const assert = require('../support/assert');
const TestClient = require('../support/test-client');
const serverOptions = require('../../lib/cartodb/server_options');
const suites = [{
desc: 'mapnik',
usePostGIS: false
}];
if (process.env.POSTGIS_VERSION >= '20400') {
suites.push({
const suites = [
{
desc: 'mapnik',
usePostGIS: false
},
{
desc: 'postgis',
usePostGIS: true
});
}
}
];
describe('mvt regressions', function () {

View File

@ -22,273 +22,271 @@ function createMapConfig(sql = TestClient.SQL.ONE_POINT) {
}
describe('mvt (mapnik)', mvt(false));
if (process.env.POSTGIS_VERSION >= '20400') {
describe('mvt (postgis)', mvt(true));
}
describe('mvt (postgis)', mvt(true));
function mvt(usePostGIS) {
return function () {
const originalUsePostGIS = serverOptions.renderer.mvt.usePostGIS;
before(function () {
serverOptions.renderer.mvt.usePostGIS = usePostGIS;
});
after(function (){
serverOptions.renderer.mvt.usePostGIS = originalUsePostGIS;
});
return function () {
const originalUsePostGIS = serverOptions.renderer.mvt.usePostGIS;
before(function () {
serverOptions.renderer.mvt.usePostGIS = usePostGIS;
});
after(function (){
serverOptions.renderer.mvt.usePostGIS = originalUsePostGIS;
});
describe('named map tile', function () {
it('should get default named vector tile', function (done) {
const apikeyToken = 1234;
const templateName = `mvt-template-${usePostGIS ? 'postgis' : 'mapnik'}`;
const template = {
version: '0.0.1',
name: templateName,
placeholders: {
buffersize: {
type: 'number',
default: 0
describe('named map tile', function () {
it('should get default named vector tile', function (done) {
const apikeyToken = 1234;
const templateName = `mvt-template-${usePostGIS ? 'postgis' : 'mapnik'}`;
const template = {
version: '0.0.1',
name: templateName,
placeholders: {
buffersize: {
type: 'number',
default: 0
}
},
layergroup: {
version: '1.7.0',
layers: [{
type: 'cartodb',
options: {
sql: 'select * from populated_places_simple_reduced limit 10',
cartocss: TestClient.CARTOCSS.POINTS,
cartocss_version: '2.3.0',
}
}]
}
};
const testClient = new TestClient(template, apikeyToken);
testClient.keysToDelete['map_tpl|localhost'] = 0;
testClient.getNamedTile(templateName, 0, 0, 0, 'mvt', {}, (err, res, tile) => {
if (err) {
return done(err);
}
const tileJSON = tile.toJSON();
assert.equal(tileJSON[0].features.length, 10);
testClient.drain(done);
});
});
});
describe('analysis-layers-dataviews-mvt', function () {
function createMapConfig(layers, dataviews, analysis) {
return {
version: '1.5.0',
layers: layers,
dataviews: dataviews || {},
analyses: analysis || []
};
}
var CARTOCSS = [
"#points {",
" marker-fill-opacity: 1.0;",
" marker-line-color: #FFF;",
" marker-line-width: 0.5;",
" marker-line-opacity: 1.0;",
" marker-placement: point;",
" marker-type: ellipse;",
" marker-width: 8;",
" marker-fill: red;",
" marker-allow-overlap: true;",
"}"
].join('\n');
var mapConfig = createMapConfig(
[
{
"type": "cartodb",
"options": {
"source": {
"id": "2570e105-7b37-40d2-bdf4-1af889598745"
},
"cartocss": CARTOCSS,
"cartocss_version": "2.3.0"
}
}
],
{
pop_max_histogram: {
source: {
id: '2570e105-7b37-40d2-bdf4-1af889598745'
},
type: 'histogram',
options: {
column: 'pop_max'
}
}
},
layergroup: {
version: '1.7.0',
layers: [{
type: 'cartodb',
options: {
sql: 'select * from populated_places_simple_reduced limit 10',
cartocss: TestClient.CARTOCSS.POINTS,
cartocss_version: '2.3.0',
[
{
"id": "2570e105-7b37-40d2-bdf4-1af889598745",
"type": "source",
"params": {
"query": "select * from populated_places_simple_reduced"
}
}]
}
};
const testClient = new TestClient(template, apikeyToken);
testClient.keysToDelete['map_tpl|localhost'] = 0;
testClient.getNamedTile(templateName, 0, 0, 0, 'mvt', {}, (err, res, tile) => {
if (err) {
return done(err);
}
const tileJSON = tile.toJSON();
assert.equal(tileJSON[0].features.length, 10);
testClient.drain(done);
});
});
});
describe('analysis-layers-dataviews-mvt', function () {
function createMapConfig(layers, dataviews, analysis) {
return {
version: '1.5.0',
layers: layers,
dataviews: dataviews || {},
analyses: analysis || []
};
}
var CARTOCSS = [
"#points {",
" marker-fill-opacity: 1.0;",
" marker-line-color: #FFF;",
" marker-line-width: 0.5;",
" marker-line-opacity: 1.0;",
" marker-placement: point;",
" marker-type: ellipse;",
" marker-width: 8;",
" marker-fill: red;",
" marker-allow-overlap: true;",
"}"
].join('\n');
var mapConfig = createMapConfig(
[
{
"type": "cartodb",
"options": {
"source": {
"id": "2570e105-7b37-40d2-bdf4-1af889598745"
},
"cartocss": CARTOCSS,
"cartocss_version": "2.3.0"
}
}
],
]
);
it('should get pop_max column from dataview', function (done) {
var testClient = new TestClient(mapConfig);
testClient.getTile(0, 0, 0, { format: 'mvt', layers: 0 }, function (err, res, MVT) {
var geojsonTile = JSON.parse(MVT.toGeoJSONSync(0));
assert.ok(!err, err);
assert.ok(Array.isArray(geojsonTile.features));
assert.ok(geojsonTile.features.length > 0);
var feature = geojsonTile.features[0];
assert.ok(feature.properties.hasOwnProperty('pop_max'), 'Missing pop_max property');
testClient.drain(done);
});
});
});
const testCases = [
{
pop_max_histogram: {
source: {
id: '2570e105-7b37-40d2-bdf4-1af889598745'
},
type: 'histogram',
options: {
column: 'pop_max'
desc: 'should get empty mvt with code 204 (no content)',
coords: { z: 0, x: 0, y: 0 },
format: 'mvt',
response: {
status: 204,
headers: {
'Content-Type': undefined
}
}
},
mapConfig: createMapConfig(TestClient.SQL.EMPTY)
},
[
{
"id": "2570e105-7b37-40d2-bdf4-1af889598745",
"type": "source",
"params": {
"query": "select * from populated_places_simple_reduced"
{
desc: 'should get mvt tile with code 200 (ok)',
coords: { z: 0, x: 0, y: 0 },
format: 'mvt',
response: {
status: 200,
headers: {
'Content-Type': 'application/x-protobuf'
}
}
]
);
},
mapConfig: createMapConfig()
}
];
it('should get pop_max column from dataview', function (done) {
var testClient = new TestClient(mapConfig);
testCases.forEach(function (test) {
it(test.desc, done => {
var testClient = new TestClient(test.mapConfig);
const { z, x, y } = test.coords;
const { format, response } = test;
testClient.getTile(0, 0, 0, { format: 'mvt', layers: 0 }, function (err, res, MVT) {
var geojsonTile = JSON.parse(MVT.toGeoJSONSync(0));
assert.ok(!err, err);
assert.ok(Array.isArray(geojsonTile.features));
assert.ok(geojsonTile.features.length > 0);
var feature = geojsonTile.features[0];
assert.ok(feature.properties.hasOwnProperty('pop_max'), 'Missing pop_max property');
testClient.drain(done);
testClient.getTile(z, x, y, { format, response }, err => {
assert.ifError(err);
testClient.drain(done);
});
});
});
});
describe('overviews', function () {
function createMapConfig(layers, dataviews, analysis) {
return {
version: '1.8.0',
layers: layers,
dataviews: dataviews || {},
analyses: analysis || []
};
}
const testCases = [
{
desc: 'should get empty mvt with code 204 (no content)',
coords: { z: 0, x: 0, y: 0 },
format: 'mvt',
response: {
status: 204,
headers: {
'Content-Type': undefined
}
},
mapConfig: createMapConfig(TestClient.SQL.EMPTY)
},
{
desc: 'should get mvt tile with code 200 (ok)',
coords: { z: 0, x: 0, y: 0 },
format: 'mvt',
response: {
status: 200,
headers: {
'Content-Type': 'application/x-protobuf'
}
},
mapConfig: createMapConfig()
}
];
testCases.forEach(function (test) {
it(test.desc, done => {
var testClient = new TestClient(test.mapConfig);
const { z, x, y } = test.coords;
const { format, response } = test;
testClient.getTile(z, x, y, { format, response }, err => {
assert.ifError(err);
testClient.drain(done);
});
});
});
describe('overviews', function () {
function createMapConfig(layers, dataviews, analysis) {
return {
version: '1.8.0',
layers: layers,
dataviews: dataviews || {},
analyses: analysis || []
};
}
it('should use overviews to fetch mvt data', function (done) {
const mapConfig = createMapConfig(
[
{
"type": "cartodb",
"options": {
"sql": 'SELECT * FROM test_table_overviews',
"cartocss": TestClient.CARTOCSS.POINTS,
"cartocss_version": "2.3.0"
it('should use overviews to fetch mvt data', function (done) {
const mapConfig = createMapConfig(
[
{
"type": "cartodb",
"options": {
"sql": 'SELECT * FROM test_table_overviews',
"cartocss": TestClient.CARTOCSS.POINTS,
"cartocss_version": "2.3.0"
}
}
}
]
);
]
);
const testClient = new TestClient(mapConfig);
const [ z, x, y ] = [ 0, 0, 0 ];
const options = { format: 'mvt' };
const testClient = new TestClient(mapConfig);
const [ z, x, y ] = [ 0, 0, 0 ];
const options = { format: 'mvt' };
testClient.getTile(z, x, y, options, function (err, res, mvt) {
assert.ifError(err);
testClient.getTile(z, x, y, options, function (err, res, mvt) {
assert.ifError(err);
const geojsonTile = JSON.parse(mvt.toGeoJSONSync(0));
const geojsonTile = JSON.parse(mvt.toGeoJSONSync(0));
assert.ok(Array.isArray(geojsonTile.features));
assert.ok(geojsonTile.features.length > 0);
assert.ok(Array.isArray(geojsonTile.features));
assert.ok(geojsonTile.features.length > 0);
const feature = geojsonTile.features[0];
const feature = geojsonTile.features[0];
assert.ok(feature.properties.hasOwnProperty('_feature_count'), 'Missing _feature_count property');
assert.equal(feature.properties.cartodb_id, 1);
assert.equal(feature.properties.name, 'Hawai');
assert.equal(feature.properties._feature_count, 5); // original table has _feature_count = 1
assert.equal(feature.properties.value, 3); // original table has value = 1.0
assert.ok(feature.properties.hasOwnProperty('_feature_count'), 'Missing _feature_count property');
assert.equal(feature.properties.cartodb_id, 1);
assert.equal(feature.properties.name, 'Hawai');
assert.equal(feature.properties._feature_count, 5); // original table has _feature_count = 1
assert.equal(feature.properties.value, 3); // original table has value = 1.0
testClient.drain(done);
testClient.drain(done);
});
});
it('first layer should use overviews, second layer shouldn\'t', function (done) {
const mapConfig = createMapConfig(
[
{
"type": "cartodb",
"options": {
"sql": 'SELECT * FROM test_table_overviews',
"cartocss": TestClient.CARTOCSS.POINTS,
"cartocss_version": "2.3.0"
}
},
{
"type": "cartodb",
"options": {
"sql": 'SELECT * FROM test_table',
"cartocss": TestClient.CARTOCSS.POINTS,
"cartocss_version": "2.3.0"
}
}
]
);
const testClient = new TestClient(mapConfig);
const [ z, x, y ] = [ 0, 0, 0 ];
const options = { format: 'mvt' };
testClient.getTile(z, x, y, options, function (err, res, mvt) {
assert.ifError(err);
const tileWithOverviews = JSON.parse(mvt.toGeoJSONSync(0));
const tileWithoutOverviews = JSON.parse(mvt.toGeoJSONSync(1));
assert.ok(Array.isArray(tileWithOverviews.features));
assert.equal(tileWithOverviews.features.length, 1);
assert.equal(tileWithOverviews.features[0].properties._feature_count, 5);
assert.ok(Array.isArray(tileWithoutOverviews.features));
assert.equal(tileWithoutOverviews.features.length, 5);
assert.equal(tileWithoutOverviews.features[0].properties._feature_count, undefined);
testClient.drain(done);
});
});
});
it('first layer should use overviews, second layer shouldn\'t', function (done) {
const mapConfig = createMapConfig(
[
{
"type": "cartodb",
"options": {
"sql": 'SELECT * FROM test_table_overviews',
"cartocss": TestClient.CARTOCSS.POINTS,
"cartocss_version": "2.3.0"
}
},
{
"type": "cartodb",
"options": {
"sql": 'SELECT * FROM test_table',
"cartocss": TestClient.CARTOCSS.POINTS,
"cartocss_version": "2.3.0"
}
}
]
);
const testClient = new TestClient(mapConfig);
const [ z, x, y ] = [ 0, 0, 0 ];
const options = { format: 'mvt' };
testClient.getTile(z, x, y, options, function (err, res, mvt) {
assert.ifError(err);
const tileWithOverviews = JSON.parse(mvt.toGeoJSONSync(0));
const tileWithoutOverviews = JSON.parse(mvt.toGeoJSONSync(1));
assert.ok(Array.isArray(tileWithOverviews.features));
assert.equal(tileWithOverviews.features.length, 1);
assert.equal(tileWithOverviews.features[0].properties._feature_count, 5);
assert.ok(Array.isArray(tileWithoutOverviews.features));
assert.equal(tileWithoutOverviews.features.length, 5);
assert.equal(tileWithoutOverviews.features[0].properties._feature_count, undefined);
testClient.drain(done);
});
});
});
};
};
}

View File

@ -276,11 +276,11 @@ describe('rate limit middleware', function () {
});
});
const describe_pg = process.env.POSTGIS_VERSION >= '20400' ? describe : describe.skip;
const originalUsePostGIS = serverOptions.renderer.mvt.usePostGIS;
describe('rate limit and vector tiles (mapnik)', () => { rateLimitAndVectorTilesTest(false); });
describe_pg('rate limit and vector tiles (postgis)', () => { rateLimitAndVectorTilesTest(true); });
describe('rate limit and vector tiles (mapnik)', () => rateLimitAndVectorTilesTest(false));
describe('rate limit and vector tiles (postgis)', () => rateLimitAndVectorTilesTest(true));
function rateLimitAndVectorTilesTest(usePostGIS) {

View File

@ -6,17 +6,16 @@ var assert = require('../../support/assert');
var TestClient = require('../../support/test-client');
const serverOptions = require('../../../lib/cartodb/server_options');
const suites = [{
desc: 'mvt (mapnik)',
usePostGIS: false
}];
if (process.env.POSTGIS_VERSION >= '20400') {
suites.push({
const suites = [
{
desc: 'mvt (mapnik)',
usePostGIS: false
},
{
desc: 'mvt (postgis)',
usePostGIS: true
});
}
}
];
suites.forEach(({desc, usePostGIS}) => {
describe(`[${desc}] Create mapnik layergroup`, function() {

View File

@ -6,11 +6,10 @@ const assert = require('../support/assert');
const TestClient = require('../support/test-client');
const serverOptions = require('../../lib/cartodb/server_options');
const describe_pg = process.env.POSTGIS_VERSION >= '20400' ? describe : describe.skip;
const originalUsePostGIS = serverOptions.renderer.mvt.usePostGIS;
describe('tilejson via mapnik renderer', () => { tileJsonSuite(false); });
describe_pg('tilejson via postgis renderer', () => { tileJsonSuite(true); });
describe('tilejson via mapnik renderer', () => tileJsonSuite(false));
describe('tilejson via postgis renderer', () => tileJsonSuite(true));
function tileJsonSuite(usePostGIS) {

View File

@ -394,9 +394,8 @@ describe('user database timeout limit', function () {
});
});
const describe_pg = process.env.POSTGIS_VERSION >= '20400' ? describe : describe.skip;
describe('fetching vector tiles via mapnik renderer', () => { testFetchingVectorTiles(false); });
describe_pg('fetching vector tiles via postgis renderer', () => { testFetchingVectorTiles(true); });
describe('fetching vector tiles via mapnik renderer', () => testFetchingVectorTiles(false));
describe('fetching vector tiles via postgis renderer', () => testFetchingVectorTiles(true));
function testFetchingVectorTiles(usePostGIS) {
const originalUsePostGIS = serverOptions.renderer.mvt.usePostGIS;

View File

@ -69,17 +69,16 @@ const INVALID_FORMAT_ERROR = {
]
};
const suites = [{
desc: 'mvt (mapnik)',
usePostGIS: false
}];
if (process.env.POSTGIS_VERSION >= '20400') {
suites.push({
const suites = [
{
desc: 'mvt (mapnik)',
usePostGIS: false
},
{
desc: 'mvt (postgis)',
usePostGIS: true
});
}
}
];
suites.forEach((suite) => {
const { desc, usePostGIS } = suite;

View File

@ -73,20 +73,6 @@ echo "PUBLICPASS: ${PUBLICPASS}"
echo "TESTUSER: ${TESTUSER}"
echo "TESTPASS: ${TESTPASS}"
# Sets the env variable POSTGIS_VERSION as Major * 10000 + Minor * 100 + Patch
# For example, for 2.4.5 ~> 20405
auto_postgis_version() {
local POSTGIS_STR=$(psql -c "Select default_version from pg_available_extensions WHERE name = 'postgis';" -t);
local pg_version=$(echo $POSTGIS_STR | awk -F '.' '{print $1 * 10000 + $2 * 100 + $3}')
echo $pg_version
}
if [ -z "$POSTGIS_VERSION" ]; then
export POSTGIS_VERSION=$(auto_postgis_version)
echo "POSTGIS_VERSION: ${POSTGIS_VERSION}"
fi
if test x"$PREPARE_PGSQL" = xyes; then
echo "preparing postgres..."