Added flatbuffers support to Table service cucumber tests
This commit is contained in:
parent
6214f16552
commit
50a1c8a08d
@ -1,27 +1,38 @@
|
|||||||
var util = require('util');
|
var util = require('util');
|
||||||
|
|
||||||
|
var flatbuffers = require('../support/flatbuffers').flatbuffers;
|
||||||
|
var FBResult = require('../support/fbresult_generated').osrm.engine.api.fbresult.FBResult;
|
||||||
|
|
||||||
module.exports = function () {
|
module.exports = function () {
|
||||||
const durationsRegex = new RegExp(/^I request a travel time matrix I should get$/);
|
const durationsRegex = new RegExp(/^I request a travel time matrix I should get$/);
|
||||||
const distancesRegex = new RegExp(/^I request a travel distance matrix I should get$/);
|
const distancesRegex = new RegExp(/^I request a travel distance matrix I should get$/);
|
||||||
const estimatesRegex = new RegExp(/^I request a travel time matrix I should get estimates for$/);
|
const estimatesRegex = new RegExp(/^I request a travel time matrix I should get estimates for$/);
|
||||||
|
const durationsRegexFb = new RegExp(/^I request a travel time matrix with flatbuffers I should get$/);
|
||||||
|
const distancesRegexFb = new RegExp(/^I request a travel distance matrix with flatbuffers I should get$/);
|
||||||
|
|
||||||
const DURATIONS_NO_ROUTE = 2147483647; // MAX_INT
|
const DURATIONS_NO_ROUTE = 2147483647; // MAX_INT
|
||||||
const DISTANCES_NO_ROUTE = 3.40282e+38; // MAX_FLOAT
|
const DISTANCES_NO_ROUTE = 3.40282e+38; // MAX_FLOAT
|
||||||
|
|
||||||
this.When(durationsRegex, function(table, callback) {tableParse.call(this, table, DURATIONS_NO_ROUTE, 'durations', callback);}.bind(this));
|
const FORMAT_JSON = 'json';
|
||||||
this.When(distancesRegex, function(table, callback) {tableParse.call(this, table, DISTANCES_NO_ROUTE, 'distances', callback);}.bind(this));
|
const FORMAT_FB = 'flatbuffers';
|
||||||
this.When(estimatesRegex, function(table, callback) {tableParse.call(this, table, DISTANCES_NO_ROUTE, 'fallback_speed_cells', callback);}.bind(this));
|
|
||||||
|
this.When(durationsRegex, function(table, callback) {tableParse.call(this, table, DURATIONS_NO_ROUTE, 'durations', FORMAT_JSON, callback);}.bind(this));
|
||||||
|
this.When(distancesRegex, function(table, callback) {tableParse.call(this, table, DISTANCES_NO_ROUTE, 'distances', FORMAT_JSON, callback);}.bind(this));
|
||||||
|
this.When(estimatesRegex, function(table, callback) {tableParse.call(this, table, DISTANCES_NO_ROUTE, 'fallback_speed_cells', FORMAT_JSON, callback);}.bind(this));
|
||||||
|
this.When(durationsRegexFb, function(table, callback) {tableParse.call(this, table, DURATIONS_NO_ROUTE, 'durations', FORMAT_FB, callback);}.bind(this));
|
||||||
|
this.When(distancesRegexFb, function(table, callback) {tableParse.call(this, table, DISTANCES_NO_ROUTE, 'distances', FORMAT_FB, callback);}.bind(this));
|
||||||
};
|
};
|
||||||
|
|
||||||
const durationsParse = function(v) { return isNaN(parseInt(v)); };
|
const durationsParse = function(v) { return isNaN(parseInt(v)); };
|
||||||
const distancesParse = function(v) { return isNaN(parseFloat(v)); };
|
const distancesParse = function(v) { return isNaN(parseFloat(v)); };
|
||||||
const estimatesParse = function(v) { return isNaN(parseFloat(v)); };
|
const estimatesParse = function(v) { return isNaN(parseFloat(v)); };
|
||||||
|
|
||||||
function tableParse(table, noRoute, annotation, callback) {
|
function tableParse(table, noRoute, annotation, format, callback) {
|
||||||
|
|
||||||
const parse = annotation == 'distances' ? distancesParse : (annotation == 'durations' ? durationsParse : estimatesParse);
|
const parse = annotation == 'distances' ? distancesParse : (annotation == 'durations' ? durationsParse : estimatesParse);
|
||||||
const params = this.queryParams;
|
const params = this.queryParams;
|
||||||
params.annotations = ['durations','fallback_speed_cells'].indexOf(annotation) !== -1 ? 'duration' : 'distance';
|
params.annotations = ['durations','fallback_speed_cells'].indexOf(annotation) !== -1 ? 'duration' : 'distance';
|
||||||
|
params.output = format;
|
||||||
|
|
||||||
var tableRows = table.raw();
|
var tableRows = table.raw();
|
||||||
|
|
||||||
@ -62,27 +73,53 @@ function tableParse(table, noRoute, annotation, callback) {
|
|||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
if (!response.body.length) return callback(new Error('Invalid response body'));
|
if (!response.body.length) return callback(new Error('Invalid response body'));
|
||||||
|
|
||||||
var json = JSON.parse(response.body);
|
var result = [];
|
||||||
|
if (format === 'json') {
|
||||||
|
var json = JSON.parse(response.body);
|
||||||
|
|
||||||
var result = {};
|
if (annotation === 'fallback_speed_cells') {
|
||||||
if (annotation === 'fallback_speed_cells') {
|
result = table.raw().map(row => row.map(() => ''));
|
||||||
result = table.raw().map(row => row.map(() => ''));
|
json[annotation].forEach(pair => {
|
||||||
json[annotation].forEach(pair => {
|
result[pair[0]+1][pair[1]+1] = 'Y';
|
||||||
result[pair[0]+1][pair[1]+1] = 'Y';
|
|
||||||
});
|
|
||||||
result = result.slice(1).map(row => {
|
|
||||||
var hashes = {};
|
|
||||||
row.slice(1).forEach((v,i) => {
|
|
||||||
hashes[tableRows[0][i+1]] = v;
|
|
||||||
});
|
});
|
||||||
return hashes;
|
result = result.slice(1).map(row => {
|
||||||
});
|
var hashes = {};
|
||||||
} else {
|
row.slice(1).forEach((v,i) => {
|
||||||
result = json[annotation].map(row => {
|
hashes[tableRows[0][i+1]] = v;
|
||||||
var hashes = {};
|
});
|
||||||
row.forEach((v, i) => { hashes[tableRows[0][i+1]] = parse(v) ? '' : v; });
|
return hashes;
|
||||||
return hashes;
|
});
|
||||||
});
|
} else {
|
||||||
|
result = json[annotation].map(row => {
|
||||||
|
var hashes = {};
|
||||||
|
row.forEach((v, i) => { hashes[tableRows[0][i+1]] = parse(v) ? '' : v; });
|
||||||
|
return hashes;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else { //flatbuffers
|
||||||
|
var body = response.body;
|
||||||
|
var bytes = new Uint8Array(body.length);
|
||||||
|
for (var indx = 0; indx < body.length; ++indx) {
|
||||||
|
bytes[indx] = body.charCodeAt(indx);
|
||||||
|
}
|
||||||
|
var buf = new flatbuffers.ByteBuffer(bytes);
|
||||||
|
var fb = FBResult.getRootAsFBResult(buf);
|
||||||
|
|
||||||
|
var matrix;
|
||||||
|
if (annotation === 'durations') {
|
||||||
|
matrix = fb.table().durationsArray();
|
||||||
|
}
|
||||||
|
if (annotation === 'distances') {
|
||||||
|
matrix = fb.table().distancesArray();
|
||||||
|
}
|
||||||
|
var cols = fb.table().cols();
|
||||||
|
var rows = fb.table().rows();
|
||||||
|
for (let r = 0; r < rows; ++r) {
|
||||||
|
result[r]={};
|
||||||
|
for(let c=0; c < cols; ++c) {
|
||||||
|
result[r][tableRows[0][c+1]] = matrix[r*cols + c];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var testRow = (row, ri, cb) => {
|
var testRow = (row, ri, cb) => {
|
||||||
|
@ -21,6 +21,21 @@ Feature: Basic Duration Matrix
|
|||||||
| a | 0 | 10 |
|
| a | 0 | 10 |
|
||||||
| b | 10 | 0 |
|
| b | 10 | 0 |
|
||||||
|
|
||||||
|
Scenario: Testbot - Travel time matrix of minimal network requested with flatbuffer format
|
||||||
|
Given the node map
|
||||||
|
"""
|
||||||
|
a b
|
||||||
|
"""
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes |
|
||||||
|
| ab |
|
||||||
|
|
||||||
|
When I request a travel time matrix with flatbuffers I should get
|
||||||
|
| | a | b |
|
||||||
|
| a | 0 | 10 |
|
||||||
|
| b | 10 | 0 |
|
||||||
|
|
||||||
@ch
|
@ch
|
||||||
Scenario: Testbot - Travel time matrix of minimal network with toll exclude
|
Scenario: Testbot - Travel time matrix of minimal network with toll exclude
|
||||||
Given the query options
|
Given the query options
|
||||||
|
Loading…
Reference in New Issue
Block a user