Windshaft-cartodb/test/acceptance/ported/external-resources-test.js
2019-10-21 19:52:51 +02:00

128 lines
4.9 KiB
JavaScript

'use strict';
var testHelper = require('../../support/test-helper');
var assert = require('../../support/assert');
var fs = require('fs');
var PortedServerOptions = require('./support/ported-server-options');
var http = require('http');
var testClient = require('./support/test-client');
var nock = require('nock');
describe('external resources', function () {
var res_serv; // resources server
var res_serv_status = { numrequests: 0 }; // status of resources server
var res_serv_port;
var IMAGE_EQUALS_TOLERANCE_PER_MIL = 25;
before(function (done) {
// Start a server to test external resources
res_serv = http.createServer(function (request, response) {
++res_serv_status.numrequests;
var filename = __dirname + '/../../fixtures/markers' + request.url;
fs.readFile(filename, 'binary', function (err, file) {
if (err) {
response.writeHead(404, { 'Content-Type': 'text/plain' });
response.write('404 Not Found\n');
} else {
response.writeHead(200);
response.write(file, 'binary');
}
response.end();
});
});
const host = '127.0.0.1';
const markersServer = res_serv.listen(0);
res_serv_port = markersServer.address().port;
nock.disableNetConnect();
nock.enableNetConnect(host);
markersServer.on('listening', done);
});
after(function (done) {
testHelper.rmdirRecursiveSync(global.environment.millstone.cache_basedir);
nock.cleanAll();
nock.enableNetConnect();
// Close the resources server
res_serv.close(done);
});
function imageCompareFn (fixture, done) {
return function (err, res) {
if (err) {
return done(err);
}
var referenceImagePath = './test/fixtures/' + fixture;
assert.imageBufferIsSimilarToFile(res.body, referenceImagePath, IMAGE_EQUALS_TOLERANCE_PER_MIL, done);
};
}
it('basic external resource', function (done) {
var circleStyle = "#test_table_3 { marker-file: url('http://127.0.0.1:" + res_serv_port +
"/circle.svg'); marker-transform:'scale(0.2)'; }";
testClient.getTile(testClient.defaultTableMapConfig('test_table_3', circleStyle), 13, 4011, 3088,
imageCompareFn('test_table_13_4011_3088_svg1.png', done));
});
it('different external resource', function (done) {
var squareStyle = "#test_table_3 { marker-file: url('http://127.0.0.1:" + res_serv_port +
"/square.svg'); marker-transform:'scale(0.2)'; }";
testClient.getTile(testClient.defaultTableMapConfig('test_table_3', squareStyle), 13, 4011, 3088,
imageCompareFn('test_table_13_4011_3088_svg2.png', done));
});
// See http://github.com/CartoDB/Windshaft/issues/107
it('external resources get localized on renderer creation if not locally cached', function (done) {
var options = {
serverOptions: PortedServerOptions
};
var externalResourceStyle = "#test_table_3{marker-file: url('http://127.0.0.1:" + res_serv_port +
"/square.svg'); marker-transform:'scale(0.2)'; }";
var externalResourceMapConfig = testClient.defaultTableMapConfig('test_table_3', externalResourceStyle);
testClient.createLayergroup(externalResourceMapConfig, options, function () {
var externalResourceRequestsCount = res_serv_status.numrequests;
testClient.createLayergroup(externalResourceMapConfig, options, function () {
assert.strictEqual(res_serv_status.numrequests, externalResourceRequestsCount);
// reset resources cache
testHelper.rmdirRecursiveSync(global.environment.millstone.cache_basedir);
externalResourceMapConfig = testClient.defaultTableMapConfig('test_table_3 ', externalResourceStyle);
testClient.createLayergroup(externalResourceMapConfig, options, function () {
assert.strictEqual(res_serv_status.numrequests, externalResourceRequestsCount + 1);
done();
});
});
});
});
it('referencing unexistant external resources returns an error', function (done) {
var url = 'http://127.0.0.1:' + res_serv_port + '/notfound.png';
var style = "#test_table_3{marker-file: url('" + url + "'); marker-transform:'scale(0.2)'; }";
var mapConfig = testClient.defaultTableMapConfig('test_table_3', style);
testClient.createLayergroup(mapConfig, { statusCode: 400 }, function (err, res) {
assert.deepStrictEqual(JSON.parse(res.body).errors, [
"Unable to download '" + url + "' for 'style0' (server returned 404)"]
);
done();
});
});
});