UNPKG

@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.

261 lines (240 loc) 11.2 kB
var express = require('express'); var router = express.Router(); var util = require('util'); var constants = require('../util/constants'); var utils = require('../util/utils') var specials = function (coverage) { coverage['AzureSubscriptionMethodLocalValid'] = 0; coverage['AzureSubscriptionMethodGlobalValid'] = 0; coverage['AzureSubscriptionMethodGlobalNotProvidedValid'] = 0; coverage['AzureSubscriptionPathLocalValid'] = 0; coverage['AzureSubscriptionPathGlobalValid'] = 0; coverage['AzureSubscriptionSwaggerLocalValid'] = 0; coverage['AzureSubscriptionSwaggerGlobalValid'] = 0; coverage['AzureApiVersionMethodLocalNull'] = 0; coverage['AzureApiVersionMethodLocalValid'] = 0; coverage['AzureApiVersionMethodGlobalValid'] = 0; coverage['AzureApiVersionMethodGlobalNotProvidedValid'] = 0; coverage['AzureApiVersionPathLocalValid'] = 0; coverage['AzureApiVersionPathGlobalValid'] = 0; coverage['AzureApiVersionSwaggerLocalValid'] = 0; coverage['AzureApiVersionSwaggerGlobalValid'] = 0; coverage['AzureMethodPathUrlEncoding'] = 0; coverage['AzurePathPathUrlEncoding'] = 0; coverage['AzureSwaggerPathUrlEncoding'] = 0; coverage['AzureMethodQueryUrlEncoding'] = 0; coverage['AzurePathQueryUrlEncoding'] = 0; coverage['AzureSwaggerQueryUrlEncoding'] = 0; coverage['AzureMethodQueryUrlEncodingNull'] = 0; coverage['AzureXmsRequestClientOverwrite'] = 0; coverage['AzureXmsRequestClientOverwriteViaParameter'] = 0; coverage['AzureXmsRequestClientIdNull'] = 0; coverage['AzureXmsCustomNamedRequestId'] = 0; coverage['AzureXmsCustomNamedRequestIdParameterGroup'] = 0; coverage['AzureRequestClientIdInError'] = 0; coverage['AzureODataFilter'] = 0; router.post('/subscriptionId/:location/string/none/path/:scope/:scenario/:subscription', function (req, res, next) { var location = req.params.location; var scope = req.params.scope; var scenario = req.params.scenario; var subscription = req.params.subscription; var coverageScenario = ''; if (!req.get("x-ms-client-request-id")) { utils.send400(res, next, "Header x-ms-client-request-id must be provided in each request."); } if (location === 'method') { coverageScenario = 'AzureSubscriptionMethod'; if (scope === 'local') { coverageScenario += 'LocalValid'; } else if (scope === 'global') { coverageScenario += 'GlobalValid'; } else if (scope === 'globalNotProvided') { coverageScenario += 'GlobalNotProvidedValid'; } else { utils.send400(res, next, 'Unable to parse location: "' + util.inspect(location) + '"'); } } else if (location === 'path') { coverageScenario = 'AzureSubscriptionPath'; if (scope === 'local') { coverageScenario += 'LocalValid'; } else if (scope === 'global') { coverageScenario += 'GlobalValid'; } else { utils.send400(res, next, 'Unable to parse location: "' + util.inspect(location) + '"'); } } else if (location === 'swagger') { coverageScenario = 'AzureSubscriptionSwagger'; if (scope === 'local') { coverageScenario += 'LocalValid'; } else if (scope === 'global') { coverageScenario += 'GlobalValid'; } else { utils.send400(res, next, 'Unable to parse location: "' + util.inspect(location) + '"'); } } else { utils.send400(res, next, 'Unable to parse definition location: "' + util.inspect(location) + '"'); } if (scenario === subscription) { coverage[coverageScenario]++; res.status(200).end(); } else { utils.send400(res, next, 'Expected subscription: "' + util.inspect(scenario) + '" did not match actual "' + subscription + '"'); } }); router.get('/apiVersion/:location/string/none/query/:scope/:scenario', function (req, res, next) { var location = req.params.location; var scope = req.params.scope; var scenario = req.params.scenario; var apiVersion = req.query['api-version']; var coverageScenario = 'AzureApiVersion'; if (location === 'method') { coverageScenario += 'Method'; if (scope === 'local' && scenario === '2.0') { coverageScenario += 'LocalValid'; } else if (scope === 'local' && scenario === 'null') { coverageScenario += 'LocalNull'; } else if (scope === 'global') { coverageScenario += 'GlobalValid'; } else if (scope === 'globalNotProvided') { coverageScenario += 'GlobalNotProvidedValid'; } else { utils.send400(res, next, 'Unable to parse location: "' + util.inspect(location) + '"'); } } else if (location === 'path') { coverageScenario += 'Path'; if (scope === 'local') { coverageScenario += 'LocalValid'; } else if (scope === 'global') { coverageScenario += 'GlobalValid'; } else { utils.send400(res, next, 'Unable to parse location: "' + util.inspect(location) + '"'); } } else if (location === 'swagger') { coverageScenario += 'Swagger'; if (scope === 'local') { coverageScenario += 'LocalValid'; } else if (scope === 'global') { coverageScenario += 'GlobalValid'; } else { utils.send400(res, next, 'Unable to parse location: "' + util.inspect(location) + '"'); } } else { utils.send400(res, next, 'Unable to parse definition location: "' + util.inspect(location) + '"'); } if (scenario === apiVersion || (scenario === 'null' && Object.keys(req.query).length === 0)) { coverage[coverageScenario]++; res.status(200).end(); } else { utils.send400(res, next, 'Expected api-version: "' + util.inspect(scenario) + '" did not match actual "' + apiVersion + '"'); } }); router.get('/skipUrlEncoding/:location/path/valid/path1/path2/path3', function (req, res, next) { var location = req.params.location; if (location === 'method' || location === 'path' || location === 'swagger') { var scenario = 'Azure' + utils.toPascalCase(location) + 'PathUrlEncoding'; coverage[scenario]++; res.status(200).end(); } else { utils.send400(res, next, 'Unable to determine location "' + util.inspect(location) + '" for AzurePathUrlEncoding scenario'); } }); router.get('/skipUrlEncoding/:location/query/valid', function (req, res, next) { var location = req.params.location; if (location === 'method' || location === 'path' || location === 'swagger') { var scenario = 'Azure' + utils.toPascalCase(location) + 'QueryUrlEncoding'; if (Object.keys(req.query).length > 2 && req.query['q1'] === 'value1' && req.query['q2'] === 'value2' && req.query['q3'] === 'value3') { coverage[scenario]++; res.status(200).end(); } else { utils.send400(res, next, 'Unexpected query values for scenario "' + scenario + '": "' + util.inspect(req.query) + '"'); } } else { utils.send400(res, next, 'Unable to determine location "' + util.inspect(location) + '" for AzurePathUrlEncoding scenario'); } }); router.get('/skipUrlEncoding/method/query/null', function (req, res, next) { var scenario = 'AzureMethodQueryUrlEncodingNull'; if (Object.keys(req.query).length <= 1 && (req.query['q1'] === undefined || req.query['q1'] === null)) { coverage[scenario]++; res.status(200).end(); } else { utils.send400(res, next, 'Unexpected query values for scenario "' + scenario + '": "' + util.inspect(req.query) + '"'); } }); router.get('/odata/filter', function (req, res, next) { var scenario = 'AzureODataFilter'; if (req.query['$filter'] !== "id gt 5 and name eq 'foo'") { utils.send400(res, next, 'Unexpected $filter value for "' + scenario + '": expect "id gt 5 and name eq \'foo\'" actual "' + req.query['$filter'] + '"'); } if (req.query['$top'] !== "10") { utils.send400(res, next, 'Unexpected $top value for "' + scenario + '": expect "10" actual "' + req.query['$top'] + '"'); } if (req.query['$orderby'] !== "id") { utils.send400(res, next, 'Unexpected $top value for "' + scenario + '": expect "id" actual "' + req.query['$orderby'] + '"'); } coverage[scenario]++; res.status(200).end(); }); router.get('/overwrite/x-ms-client-request-id/method/', function (req, res, next) { var headers = { 'x-ms-request-id': '123' }; if (!req.headers["x-ms-client-request-id"]) { coverage['AzureXmsRequestClientIdNull']++; res.set(headers).status(200).end(); } else if (req.headers["x-ms-client-request-id"] !== '9C4D50EE-2D56-4CD3-8152-34347DC9F2B0') { coverage['AzureRequestClientIdInError']++; res.set(headers).status(400).end(); } else { coverage['AzureXmsRequestClientOverwrite']++; res.set(headers).status(200).end(); } }); router.get('/overwrite/x-ms-client-request-id/via-param/method/', function (req, res, next) { var headers = { 'x-ms-request-id': '123' }; if (req.get("x-ms-client-request-id") !== '9C4D50EE-2D56-4CD3-8152-34347DC9F2B0') { utils.send400(res, next, "Header x-ms-client-request-id must be set to 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0."); } else { coverage['AzureXmsRequestClientOverwriteViaParameter']++; res.set(headers).status(200).end(); } }); router.post('/customNamedRequestId', function (req, res, next) { var headers = { 'foo-request-id': '123' }; if (req.get("foo-client-request-id") !== '9C4D50EE-2D56-4CD3-8152-34347DC9F2B0') { utils.send400(res, next, "Header foo-client-request-id must be set to 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0."); } else { coverage['AzureXmsCustomNamedRequestId']++; res.set(headers).status(200).end(); } }); router.post('/customNamedRequestIdParamGrouping', function (req, res, next) { var headers = { 'foo-request-id': '123' }; if (req.get("foo-client-request-id") !== '9C4D50EE-2D56-4CD3-8152-34347DC9F2B0') { utils.send400(res, next, "Header foo-client-request-id must be set to 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0."); } else { coverage['AzureXmsCustomNamedRequestIdParameterGroup']++; res.set(headers).status(200).end(); } }); router.head('/customNamedRequestIdHead', function (req, res, next) { var headers = { 'foo-request-id': '123' }; if (req.get("foo-client-request-id") !== '9C4D50EE-2D56-4CD3-8152-34347DC9F2B0') { utils.send400(res, next, "Header foo-client-request-id must be set to 9C4D50EE-2D56-4CD3-8152-34347DC9F2B0."); } else { coverage['AzureXmsCustomNamedRequestId']++; res.set(headers).status(200).end(); } }); } specials.prototype.router = router; module.exports = specials;