@microsoft.azure/autorest.testserver
Version:
This project contains a set of OpenAPI definitions and a server implementing the corresponding API. Use this to test compliance of AutoRest generators.
163 lines (149 loc) • 6.06 kB
JavaScript
var express = require('express');
var router = express.Router();
var util = require('util');
var constants = require('../util/constants');
var utils = require('../util/utils')
var scenarioMap = {
"true": "True",
"false": "False",
"1000000": "Positive",
"-1000000": "Negative",
"10000000000": "Positive",
"-10000000000": "Negative",
"1.034E+20": "Positive",
"-1.034E-20": "Negative",
"9999999.999": "Positive",
"-9999999.999": "Negative",
"begin!*'();:@ &=+$,/?#[]end": "UrlEncoded",
"begin!*'();:@&=+$,end": "UrlNonEncoded",
"multibyte": "MultiByte",
"empty": "Empty",
"null": "Null",
"2012-01-01": "Valid",
"2012-01-01T01:01:01Z": "Valid",
"green color" : "Valid",
"bG9yZW0" : "Base64Url",
"1460505600": "UnixTime",
"ArrayPath1,begin!*'();:@ &=+$,/?#[]end,,": "CSVInPath"
};
var typeMap = {
"bool": "Bool",
"int": "Int",
"long": "Long",
"float": "Float",
"double": "Double",
"string": "String",
"byte": "Byte",
"date": "Date",
"datetime": "DateTime",
"enum" : "Enum",
"array": "Array"
};
var getScenarioName = function (type, scenario) {
console.log('received type "' + type + '" and scenario "' + scenario + '"\n');
var parsedType = typeMap[type];
var parsedScenario = scenarioMap[scenario];
if (!parsedScenario || !parsedType) {
return null;
}
console.log('Got parsed type "' + parsedType + '" and parsed scenario "' + parsedScenario + '"\n');
return '' + parsedType + parsedScenario;
};
var validateArrayPath = function (arrayValue, separator) {
console.log('received array value "' + arrayValue + '" separator "' + separator + '"');
return (arrayValue === "ArrayPath1" + separator + "begin!*'();:@ &=+$,/?#[]end" + separator + separator);
};
var paths = function (coverage) {
router.get('/:type/empty', function (req, res, next) {
console.log("inside router\n");
var type = req.params.type;
var scenario = "empty";
var test = getScenarioName(type, scenario);
if (test === null) {
console.log("test was null\n");
utils.send400(res, next, 'Unable to parse scenario \"\/paths\/' + type + '\/' + scenario + '\"');
} else if (scenario === "empty") {
console.log("in empty test\n");
coverage['UrlPaths' + test]++;
res.status(200).end();
} else {
console.log('Empty Failure!\n');
utils.send400(res, next, 'Unable to find matching empty scenario for type "' + type + '"');
}
});
router.get('/:type/:scenario/:wireParameter', function (req, res, next) {
console.log("inside router\n");
var type = req.params.type;
var scenario = req.params.scenario;
var wireParameter = req.params.wireParameter;
var test = getScenarioName(type, scenario);
var bytes = new Buffer(constants.MULTIBYTE_BUFFER);
if (type === 'enum' || type === 'date' || type === 'array' ||
type === 'datetime' ||
scenario === 'multibyte' ||
(type === 'string' &&
scenario.indexOf('begin') === 0) ||
scenario === 'bG9yZW0') {
scenario = '"' + scenario + '"';
wireParameter = '"' + wireParameter + '"';
}
scenario = JSON.parse(scenario);
wireParameter = JSON.parse(wireParameter);
if (test === null) {
console.log("test was null\n");
utils.send400(res, next, 'Unable to parse scenario \"\/paths\/' + type + '\/' + scenario + '\"');
} else if (scenario === "empty" && (wireParameter !== '' && wireParameter !== null)) {
console.log("in empty test\n");
utils.send400(res, next, 'Empty scenario must have empty parameter instead of \"' + wireParameter + '\"');
} else if (type === 'string') {
if (scenario === wireParameter) {
console.log("Success!\n");
coverage['UrlPaths' + test]++;
res.status(200).end();
} else {
utils.send400(res, next, 'Failed string scenario \"' + scenario + '\" does not match wire parameter \"' + wireParameter + '\"');
}
} else if (type === 'array') {
if (scenario === wireParameter && validateArrayPath(wireParameter, ',')) {
console.log("Success!\n");
coverage['UrlPaths' + test]++;
res.status(200).end();
} else {
utils.send400(res, next, 'Failed enum scenario \"' + scenario + '\" does not match wire parameter \"' + wireParameter + '\"');
}
} else if (type === 'enum') {
if (scenario === wireParameter) {
console.log("Success!\n");
coverage['UrlPaths' + test]++;
res.status(200).end();
} else {
utils.send400(res, next, 'Failed enum scenario \"' + scenario + '\" does not match wire parameter \"' + wireParameter + '\"');
}
} else if (type === 'byte') {
if (scenario === 'multibyte' && wireParameter === bytes.toString("base64")) {
console.log("Success!\n");
coverage['UrlPaths' + test]++;
res.status(200).end();
} else {
utils.send400(res, next, 'Failed byte scenario \"' + wireParameter + '\" does not match expected encoded string \"' + bytes.toString("base64") + '\"');
}
} else if (type === 'datetime') {
if (utils.coerceDate(wireParameter) === scenario) {
console.log("Success!\n");
coverage['UrlPaths' + test]++;
res.status(200).end();
} else {
utils.send400(res, next, 'Failed date-time scenario \"' + utils.coerceDate(wireParameter) + '\" does not match expected date string \"' + scenario +'\"');
}
} else if (scenario !== wireParameter) {
console.log("mismatched parameters\n");
utils.send400(res, next, 'Expected path parameter \"' + scenario + '\" does not match wire parameter \"' + wireParameter + '\"');
} else {
console.log("Success!\n");
coverage['UrlPaths' + test]++;
res.status(200).end();
}
});
}
paths.prototype.router = router;
module.exports = paths;