Add WireMock variant to test server (#105)

* adding wiremock stuff

* remove composite files

* update version (past where the other package was)

* updated package.json

* added in some color and cleaned up messags a bit

* add a space

* if the server process is closed, kill the script

* bump version
This commit is contained in:
Garrett Serack 2019-12-18 12:36:34 -08:00 коммит произвёл GitHub
Родитель 1a10b53241
Коммит f13238699f
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1026 изменённых файлов: 24265 добавлений и 307 удалений

1
.gitignore поставляемый
Просмотреть файл

@ -290,3 +290,4 @@ __pycache__/
package-lock.json
*.tgz
coverage/report-*.json
__files/

Просмотреть файл

@ -20,3 +20,4 @@ packages.config
# VS #
.ntvs_analysis.*
!__files/

233
.scripts/process.js Normal file
Просмотреть файл

@ -0,0 +1,233 @@
const { spawn } = require('child_process');
const { extname, isAbsolute, delimiter, resolve, dirname, basename } = require('path');
const fs = require('fs')
const { promisify } = require('util');
const lstat = promisify(fs.lstat);
const { request } = require('http')
const readline = require('readline');
async function isFile(path) {
try {
return (await lstat(path)).isFile();
} catch (e) {
}
return false;
}
function cmdlineToArray(text, result = [], matcher = /[^\s"]+|"([^"]*)"/gi, count = 0) {
text = text.replace(/\\"/g, '\ufffe');
const match = matcher.exec(text);
return match ? cmdlineToArray(text, result, matcher, result.push(match[1] ? match[1].replace(/\ufffe/g, '\\"') : match[0].replace(/\ufffe/g, '\\"'))) : result;
}
function quoteIfNecessary(text) {
if (text && text.indexOf(' ') > -1 && text.charAt(0) != '"') {
return `"${text}"`;
}
return text;
}
const nodePath = quoteIfNecessary(process.execPath);
function getPathVariableName() {
// windows calls it's path 'Path' usually, but this is not guaranteed.
if (process.platform === 'win32') {
let PATH = 'Path';
Object.keys(process.env).forEach(function (e) {
if (e.match(/^PATH$/i)) {
PATH = e;
}
});
return PATH;
}
return 'PATH';
}
async function realPathWithExtension(command) {
const pathExt = (process.env.pathext || '.EXE').split(';');
for (const each of pathExt) {
const filename = `${command}${each}`;
if (await isFile(filename)) {
return filename;
}
}
return undefined;
}
async function getFullPath(command, searchPath) {
command = command.replace(/"/g, '');
const ext = extname(command);
if (isAbsolute(command)) {
// if the file has an extension, or we're not on win32, and this is an actual file, use it.
if (ext || process.platform !== 'win32') {
if (await isFile(command)) {
return command;
}
}
// if we're on windows, look for a file with an acceptable extension.
if (process.platform === 'win32') {
// try all the PATHEXT extensions to see if it is a recognized program
const cmd = await realPathWithExtension(command);
if (cmd) {
return cmd;
}
}
return undefined;
}
if (searchPath) {
const folders = searchPath.split(delimiter);
for (const each of folders) {
const fullPath = await getFullPath(resolve(each, command));
if (fullPath) {
return fullPath;
}
}
}
return undefined;
}
/*
interface MoreOptions extends SpawnOptions {
onCreate?(cp: ChildProcess): void;
onStdOutData?(chunk: any): void;
onStdErrData?(chunk: any): void;
}
*/
const PathVar = getPathVariableName();
async function execute(cmd, cmdlineargs, options) {
let command;
if (!options && !Array.isArray(cmdlineargs)) {
options = cmdlineargs;
}
options = options || {};
if (Array.isArray(cmdlineargs)) {
command = [cmd, ...cmdlineargs];
} else {
command = cmdlineToArray(cmd);
}
if (command[0] === 'node' || command[0] === 'node.exe') {
command[0] = nodePath;
}
const env = { ...process.env };
// ensure parameters requiring quotes have them.
for (let i = 0; i < command.length; i++) {
command[i] = quoteIfNecessary(command[i]);
}
const fullCommandPath = await getFullPath(command[0], env[getPathVariableName()]);
// == special case ==
// on Windows, if this command has a space in the name, and it's not an .EXE
// then we're going to have to add the folder to the PATH
// and execute it by just the filename
// and set the path back when we're done.
const special = process.platform === 'win32' && fullCommandPath.indexOf(' ') > -1 && !/.exe$/ig.exec(fullCommandPath);
// preserve the current path
const originalPath = process.env[PathVar];
return new Promise((r, j) => {
try {
// insert the dir into the path
if (special) {
process.env[PathVar] = `${dirname(fullCommandPath)}${delimiter}${env[PathVar]}`;
}
// call spawn and return
const cp = spawn(fullCommandPath, command.slice(1), { ...options, stdio: 'pipe' });
cp.on('error', (err) => {
console.log(`error! ${err} `);
})
if (options.onCreate) {
options.onCreate(cp);
}
options.onStdOutData ? cp.stdout.on('data', options.onStdOutData) : cp;
options.onStdErrData ? cp.stderr.on('data', options.onStdErrData) : cp;
let err = '';
let out = '';
cp.stderr.on('data', (chunk) => {
err += chunk;
});
cp.stdout.on('data', (chunk) => {
out += chunk;
});
cp.on('close', (code, signal) => r({ stdout: out, stderr: err, error: code }));
}
finally {
// regardless, restore the original path on the way out!
process.env[PathVar] = originalPath;
}
});
}
function sleep(delayMS) {
return new Promise(res => setTimeout(res, delayMS));
}
async function httpGet(addr) {
return new Promise((r, j) => request(addr, (response) => {
response.on('error', (err) => {
j(err);
});
if (response.statusCode === 200) {
let data = "";
response.on('data', (chunk) => {
data = data + chunk.toString();
});
response.on('end', () => {
r(data);
});
return;
}
j(response);
}).end()
)
}
async function httpPost(addr) {
return new Promise((r, j) => {
try {
request(addr, (response) => {
response.on('error', (err) => {
j(err);
});
if (response.statusCode === 200) {
let data = "";
response.on('data', (chunk) => {
data = data + chunk.toString();
});
response.on('end', () => {
r(data);
});
return;
}
j(response);
}).on('error', (e) => {
j(e);
}).end()
}
catch (e) {
j(e);
}
})
}
async function queryUser(text) {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
return new Promise((r, j) => {
rl.question(text, (answer) => { r(answer); rl.close() });
});
}
module.exports = {
execute,
httpGet,
httpPost,
sleep,
queryUser
}

Просмотреть файл

@ -0,0 +1,148 @@
#!/usr/bin/env node
const { existsSync } = require('fs');
const { resolve } = require('path');
const { execute, queryUser, httpPost } = require('./process');
const { yellow, red, green, white, gray, cyan} = require('chalk');
function prepend( color,pText ,text) {
return text.replace( /^/gm, `${color(pText)} `)
}
// syntax:
// > start-autorest-testserver <command-line...>
// start
// (a) the express server, (and wait for it to be ready)
// (b) run the given command line.
// when the (b) completes, terminate (a)
async function main() {
const cmdArgs = [];
const switches = [];
let switchChecking = true;
for (const each of process.argv.slice(2)) {
if (switchChecking && each.startsWith('--')) {
switches.push(each);
continue;
}
switchChecking = false;
cmdArgs.push(each);
}
const command = cmdArgs.shift()
let serverProc = undefined;
let cmdProc = undefined;
let spResolve = undefined;
let spReject = undefined;
let running = false;
const interactive = switches.indexOf('--interactive') > -1;
const showMessages = switches.indexOf('--show-messages') > -1;
const verbose = switches.indexOf('--verbose') > -1 ? (text) => console.log(prepend( cyan.bold, '[TestServer]', text)) : () => { };
let isReady = new Promise((r, j) => {
spResolve = r;
spReject = j;
})
try {
await execute(process.execPath, [`${__dirname}/../legacy/startup/shutdown.js`]);
verbose('Shutting down existing Express instance.')
} catch (e) {
verbose('Express was not running previously.')
// who cares.
}
// start the express process
verbose('Starting Express Server.')
const spResult = execute(process.execPath, [`${__dirname}/../legacy/startup/www.js`], {
onCreate: (proc) => {
serverProc = proc;
proc.on('close', ()=>{
if( cmdProc && cmdProc.status === null ) {
cmdProc.kill();
}
if( interactive ) {
process.exit(0);
}
})
},
onStdOutData: (chunk) => {
const c = chunk.toString().replace(/\s*$/, '');
if (showMessages) {
console.log(prepend( gray, '[Express]', c));
}
if (/Server started/.exec(c)) {
spResolve();
}
},
onStdErrData: (chunk) => {
const c = chunk.toString().replace(/\s*$/, '');
if (showMessages) {
console.log(prepend( yellow.dim, '[Express]', c ));
}
}
});
// when it's ready, run the command line
await isReady;
verbose('Express is ready.')
if (!interactive) {
await execute(command, cmdArgs, {
onCreate: (proc) => {
verbose(`Started command: '${command} ${cmdArgs.join(' ')}'`);
cmdProc = proc;
running = true;
},
onStdOutData: (chunk) => {
const c = chunk.toString().replace(/\s*$/, '');
console.log(c);
},
onStdErrData: (chunk) => {
const c = chunk.toString().replace(/\s*$/, '');
console.error(c);
}
});
running = false;
verbose('Command completed.');
} else {
await queryUser('\n\nPress enter to stop testserver\n');
}
cmdProc = undefined;
// after the cmdline is done.
// shutdown server process
verbose('Shutting down Express.');
try {
await execute(process.execPath, [`${__dirname}/../legacy/startup/shutdown.js`]);
verbose('Shutting down existing Express instance.')
} catch (e) {
// who cares.
}
// wait for it to close
verbose('Waiting for Express to finish.');
// force-kill server process
if (serverProc && serverProc.status === null) {
verbose('killing express');
serverProc.kill();
}
await spResult;
verbose('Exiting.');
}
async function start() {
try {
await main();
} catch (e) {
console.error(e);
process.exit(1);
}
}
start();

Просмотреть файл

@ -0,0 +1,154 @@
#!/usr/bin/env node
const { existsSync } = require('fs');
const { resolve } = require('path');
const { execute, queryUser, httpPost } = require('./process');
const { yellow, red, green, white, gray, cyan} = require('chalk');
function prepend( color,pText ,text) {
return text.replace( /^/gm, `${color(pText)} `)
}
// syntax:
// > start-autorest-testserver <command-line...>
// start
// (a) the wiremock server, (and wait for it to be ready)
// (b) run the given command line.
// when the (b) completes, terminate (a)
function getEntrypoint() {
var folder = __dirname;
while (!existsSync(`${folder}/node_modules/wiremock/jdeploy-bundle/jdeploy.js`)) {
folder = resolve(`${folder}/..`);
if (folder === '/' || folder.endsWith('\\')) {
throw new Error('Unable to start test-server.')
}
}
return folder;
}
async function main() {
const wmFolderPath = getEntrypoint();
const cmdArgs = [];
const switches = [];
let switchChecking = true;
for (const each of process.argv.slice(2)) {
if (switchChecking && each.startsWith('--')) {
switches.push(each);
continue;
}
switchChecking = false;
cmdArgs.push(each);
}
const command = cmdArgs.shift()
let serverProc = undefined;
let cmdProc = undefined;
let spResolve = undefined;
let spReject = undefined;
let running = false;
const interactive = switches.indexOf('--interactive') > -1;
const showMessages = switches.indexOf('--show-messages') > -1;
const verbose = switches.indexOf('--verbose') > -1 ? (text) => console.log(prepend( cyan.bold, '[TestServer]', text)) : () => { };
let isReady = new Promise((r, j) => {
spResolve = r;
spReject = j;
})
try {
await httpPost({ port: 3000, host: 'localhost', method: 'POST', path: '/__admin/shutdown' });
verbose('Shutting down existing WireMock instance.')
} catch (e) {
verbose('WireMock was not running previously.')
// who cares.
}
// start the wiremock process
verbose('Starting WireMock.')
const spResult = execute(process.execPath, [`${wmFolderPath}/node_modules/wiremock/jdeploy-bundle/jdeploy.js`, '--root-dir', resolve(`${__dirname}/..`), '--port', '3000', '--verbose'], {
onCreate: (proc) => {
serverProc = proc;
proc.on('close', ()=>{
if( cmdProc && cmdProc.status === null ) {
cmdProc.kill();
}
if( interactive ) {
process.exit(0);
}
})
},
onStdOutData: (chunk) => {
const c = chunk.toString().replace(/\s*$/, '');
if (showMessages) {
console.log(prepend( gray, '[WireMock]', c));
}
if (/verbose:.*true/.exec(c)) {
spResolve();
}
},
onStdErrData: (chunk) => {
const c = chunk.toString().replace(/\s*$/, '');
if (showMessages) {
console.log(prepend( yellow.dim, '[WireMock]', c ));
}
}
});
// when it's ready, run the command line
await isReady;
verbose('WireMock is ready.')
if (!interactive) {
await execute(command, cmdArgs, {
onCreate: (process) => {
verbose(`Started command: '${command} ${cmdArgs.join(' ')}'`);
cmdProc = process;
running = true;
},
onStdOutData: (chunk) => {
const c = chunk.toString().replace(/\s*$/, '');
console.log(c);
},
onStdErrData: (chunk) => {
const c = chunk.toString().replace(/\s*$/, '');
console.error(c);
}
});
running = false;
verbose('Command completed.');
} else {
await queryUser('\n\nPress enter to stop testserver\n');
}
cmdProc = undefined;
// after the cmdline is done.
// shutdown server process
verbose('Shutting down WireMock.');
await httpPost({ port: 3000, host: 'localhost', method: 'POST', path: '/__admin/shutdown' });
// wait for it to close
verbose('Waiting for WireMock to finish.');
// force-kill server process
if (serverProc && serverProc.status === null) {
verbose('killing WireMock');
serverProc.kill();
}
await spResult;
verbose('Exiting.');
}
async function start() {
try {
await main();
} catch (e) {
console.error(e);
process.exit(1);
}
}
start();

36
.vscode/launch.json поставляемый
Просмотреть файл

@ -1,20 +1,20 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach",
"port": 9229
},
{
"type": "node",
"request": "launch",
"name": "Start Server",
"program": "${workspaceRoot}/startup/www.js",
"env": {
"PORT": "3000"
}
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Attach",
"port": 9229
},
{
"type": "node",
"request": "launch",
"name": "Start Server",
"program": "${workspaceRoot}/legacy/startup/www.js",
"env": {
"PORT": "3000"
}
]
}
}
]
}

Просмотреть файл

@ -1,114 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{249b077c-f1ac-4eda-9ddb-51f153eeb655}</ProjectGuid>
<ProjectHome />
<ProjectView>ShowAllFiles</ProjectView>
<StartupFile>startup\www.js</StartupFile>
<WorkingDirectory>.</WorkingDirectory>
<OutputPath>.</OutputPath>
<ProjectTypeGuids>{3AF33F2E-1136-4D97-BBB7-1795711AC8B8};{349c5851-65df-11da-9384-00065b846f21};{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}</ProjectTypeGuids>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">11.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<NodejsPort>3000</NodejsPort>
<StartWebBrowser>True</StartWebBrowser>
<Environment>PORT=3000</Environment>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'" />
<PropertyGroup Condition="'$(Configuration)' == 'Release'" />
<ItemGroup>
<Compile Include="routes\azureSpecials.js" />
<Compile Include="routes\azureUrl.js" />
<Compile Include="routes\customUri.js" />
<Compile Include="routes\datetime-rfc1123.js" />
<Compile Include="routes\files.js" />
<Compile Include="routes\formData.js" />
<Compile Include="routes\model-flatten.js" />
<Compile Include="routes\validation.js" />
<Compile Include="util\constants.js" />
<Compile Include="util\utils.js" />
<Content Include="package.json" />
<Compile Include="app.js" />
<Compile Include="routes\array.js" />
<Compile Include="routes\bool.js" />
<Compile Include="routes\byte.js" />
<Compile Include="routes\complex.js" />
<Compile Include="routes\date.js" />
<Compile Include="routes\datetime.js" />
<Compile Include="routes\dictionary.js" />
<Compile Include="routes\duration.js" />
<Compile Include="routes\header.js" />
<Compile Include="routes\httpResponses.js" />
<Compile Include="routes\index.js" />
<Compile Include="routes\int.js" />
<Compile Include="routes\lros.js" />
<Compile Include="routes\number.js" />
<Compile Include="routes\paging.js" />
<Compile Include="routes\pathitem.js" />
<Compile Include="routes\paths.js" />
<Compile Include="routes\queries.js" />
<Compile Include="routes\report.js" />
<Compile Include="routes\reqopt.js" />
<Compile Include="routes\azureParameterGrouping.js" />
<Compile Include="routes\string.js" />
<Content Include="routes\sample.png" />
<Content Include="startup\www.js" />
<Content Include="views\error.pug" />
<Content Include="views\index.pug" />
<Content Include="views\layout.pug" />
<Content Include="public\stylesheets\style.css" />
</ItemGroup>
<ItemGroup>
<Folder Include="etc" />
<Folder Include="public" />
<Folder Include="public\stylesheets" />
<Folder Include="routes" />
<Folder Include="startup" />
<Folder Include="util\" />
<Folder Include="views" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<!--Do not delete the following Import Project. While this appears to do nothing it is a marker for setting TypeScript properties before our import that depends on them.-->
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets" Condition="False" />
<Import Project="$(VSToolsPath)\Node.js Tools\Microsoft.NodejsTools.targets" />
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>False</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>0</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>http://localhost:48022/</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>True</UseCustomServer>
<CustomServerUrl>http://localhost:1337</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}" User="">
<WebProjectProperties>
<StartPageUrl>
</StartPageUrl>
<StartAction>CurrentPage</StartAction>
<AspNetDebugging>True</AspNetDebugging>
<SilverlightDebugging>False</SilverlightDebugging>
<NativeDebugging>False</NativeDebugging>
<SQLDebugging>False</SQLDebugging>
<ExternalProgram>
</ExternalProgram>
<StartExternalURL>
</StartExternalURL>
<StartCmdLineArguments>
</StartCmdLineArguments>
<StartWorkingDirectory>
</StartWorkingDirectory>
<EnableENC>False</EnableENC>
<AlwaysStartWebServerOnDebug>False</AlwaysStartWebServerOnDebug>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project>

Просмотреть файл

@ -1,22 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9092AA53-FB77-4645-B42D-1CCCA6BD08BD}") = "SwaggerBATServer", "SwaggerBATServer.njsproj", "{249B077C-F1AC-4EDA-9DDB-51F153EEB655}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{249B077C-F1AC-4EDA-9DDB-51F153EEB655}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{249B077C-F1AC-4EDA-9DDB-51F153EEB655}.Debug|Any CPU.Build.0 = Debug|Any CPU
{249B077C-F1AC-4EDA-9DDB-51F153EEB655}.Release|Any CPU.ActiveCfg = Release|Any CPU
{249B077C-F1AC-4EDA-9DDB-51F153EEB655}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

15
acorn
Просмотреть файл

@ -1,15 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/acorn/bin/acorn" "$@"
ret=$?
else
node "$basedir/node_modules/acorn/bin/acorn" "$@"
ret=$?
fi
exit $ret

Просмотреть файл

@ -1,7 +0,0 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\acorn\bin\acorn" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\acorn\bin\acorn" %*
)

Просмотреть файл

@ -1,15 +0,0 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/clean-css/bin/cleancss" "$@"
ret=$?
else
node "$basedir/node_modules/clean-css/bin/cleancss" "$@"
ret=$?
fi
exit $ret

Просмотреть файл

@ -1,7 +0,0 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\clean-css\bin\cleancss" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\clean-css\bin\cleancss" %*
)

Просмотреть файл

@ -50,7 +50,7 @@ var app = express();
var now = new Date();
var logFileName = 'AccTestServer-' + now.getHours() +
now.getMinutes() + now.getSeconds() + '.log';
var testResultDir = path.join(__dirname, 'TestResults');
var testResultDir = path.join(__dirname, '..', 'TestResults');
if (!fs.existsSync(testResultDir)) {
fs.mkdirSync(testResultDir);
}
@ -503,6 +503,7 @@ var coverage = {
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
@ -510,6 +511,8 @@ app.use(bodyParser.json({strict: false}));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/__files',express.static(path.join(__dirname,'..','__files')));
app.use('/', routes);
app.use('/bool', new bool(coverage).router);

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 8.5 KiB

После

Ширина:  |  Высота:  |  Размер: 8.5 KiB

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -4,7 +4,7 @@
* Module dependencies.
*/
var io = require('socket.io-client');
var Constants = require('../util/constants.js')
var Constants = require('../util/constants')
/**
* Get HTTP server port and socket client.

Просмотреть файл

@ -7,7 +7,7 @@
var app = require('../app');
var debug = require('debug')('server:server');
var http = require('http');
var Constants = require('../util/constants.js')
var Constants = require('../util/constants')
/**
* Get port from environment and store in Express.

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

Просмотреть файл

@ -0,0 +1,26 @@
{
"id" : "3ab7995b-76eb-4c83-8942-394f36b55f97",
"name" : "",
"request" : {
"url" : "/*&*",
"method" : "GET"
},
"response" : {
"status" : 404,
"base64Body" : "eyJzdGF0dXMiOjQwNH0=",
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:54:59 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "3ab7995b-76eb-4c83-8942-394f36b55f97",
"persistent" : true,
"scenarioName" : "scenario-*&*",
"requiredScenarioState" : "Started",
"newScenarioState" : "scenario-*&*-2",
"insertionIndex" : 951
}

Просмотреть файл

@ -0,0 +1,25 @@
{
"id" : "dc579df9-c258-4244-9936-87782f6465c5",
"name" : "",
"request" : {
"url" : "/*&*",
"method" : "GET"
},
"response" : {
"status" : 404,
"base64Body" : "eyJzdGF0dXMiOjQwNH0=",
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:54:59 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "dc579df9-c258-4244-9936-87782f6465c5",
"persistent" : true,
"scenarioName" : "scenario-*&*",
"requiredScenarioState" : "scenario-*&*-2",
"insertionIndex" : 956
}

Просмотреть файл

@ -0,0 +1,25 @@
{
"id" : "dff20366-d3e2-4046-8470-55359134eb6d",
"name" : "",
"request" : {
"url" : "/*&*",
"method" : "GET"
},
"response" : {
"status" : 404,
"base64Body" : "eyJzdGF0dXMiOjQwNH0=",
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 23:37:04 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "dff20366-d3e2-4046-8470-55359134eb6d",
"persistent" : true,
"scenarioName" : "scenario-*&*",
"requiredScenarioState" : "scenario-*&*-2",
"insertionIndex" : 976
}

Просмотреть файл

@ -0,0 +1,25 @@
{
"id" : "ee1a0404-481e-45d9-b3b5-222cdd06edfc",
"name" : "",
"request" : {
"url" : "/*&*",
"method" : "GET"
},
"response" : {
"status" : 404,
"base64Body" : "eyJzdGF0dXMiOjQwNH0=",
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 22:08:55 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "ee1a0404-481e-45d9-b3b5-222cdd06edfc",
"persistent" : true,
"scenarioName" : "scenario-*&*",
"requiredScenarioState" : "scenario-*&*-2",
"insertionIndex" : 996
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "08f878ba-8db7-41e5-aae2-de9d9f05cd98",
"name" : "azurespecials_apiversion_method_string_none_query_global_2015-07-01-preview",
"request" : {
"url" : "/azurespecials/apiVersion/method/string/none/query/global/2015-07-01-preview?api-version=2015-07-01-preview",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "08f878ba-8db7-41e5-aae2-de9d9f05cd98",
"persistent" : true,
"insertionIndex" : 982
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "1fd7f289-21cb-46e6-9690-4e13253cafb0",
"name" : "azurespecials_apiversion_method_string_none_query_globalnotprovided_2015-07-01-preview",
"request" : {
"url" : "/azurespecials/apiVersion/method/string/none/query/globalNotProvided/2015-07-01-preview?api-version=2015-07-01-preview",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "1fd7f289-21cb-46e6-9690-4e13253cafb0",
"persistent" : true,
"insertionIndex" : 981
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "98fa82b5-9834-4890-9e90-7da01a4b7deb",
"name" : "azurespecials_apiversion_method_string_none_query_local_20",
"request" : {
"url" : "/azurespecials/apiVersion/method/string/none/query/local/2.0?api-version=2.0",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "98fa82b5-9834-4890-9e90-7da01a4b7deb",
"persistent" : true,
"insertionIndex" : 985
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "2b9ddc23-b0c1-4635-a45e-89be3adf64a7",
"name" : "azurespecials_apiversion_method_string_none_query_local_null",
"request" : {
"url" : "/azurespecials/apiVersion/method/string/none/query/local/null",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "2b9ddc23-b0c1-4635-a45e-89be3adf64a7",
"persistent" : true,
"insertionIndex" : 986
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "9b6544c9-4aa2-421b-800b-3511bffb4d27",
"name" : "azurespecials_apiversion_path_string_none_query_global_2015-07-01-preview",
"request" : {
"url" : "/azurespecials/apiVersion/path/string/none/query/global/2015-07-01-preview?api-version=2015-07-01-preview",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "9b6544c9-4aa2-421b-800b-3511bffb4d27",
"persistent" : true,
"insertionIndex" : 983
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "5ca61aaf-3cd7-4f3d-8361-58ad4ac99cec",
"name" : "azurespecials_apiversion_path_string_none_query_local_20",
"request" : {
"url" : "/azurespecials/apiVersion/path/string/none/query/local/2.0?api-version=2.0",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "5ca61aaf-3cd7-4f3d-8361-58ad4ac99cec",
"persistent" : true,
"insertionIndex" : 987
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "7182fab4-3ec2-42b4-bab1-1196683b0aae",
"name" : "azurespecials_apiversion_swagger_string_none_query_global_2015-07-01-preview",
"request" : {
"url" : "/azurespecials/apiVersion/swagger/string/none/query/global/2015-07-01-preview?api-version=2015-07-01-preview",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "7182fab4-3ec2-42b4-bab1-1196683b0aae",
"persistent" : true,
"insertionIndex" : 984
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "95d9459f-6a20-4ea4-8ce5-9f55975c73f8",
"name" : "azurespecials_apiversion_swagger_string_none_query_local_20",
"request" : {
"url" : "/azurespecials/apiVersion/swagger/string/none/query/local/2.0?api-version=2.0",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "95d9459f-6a20-4ea4-8ce5-9f55975c73f8",
"persistent" : true,
"insertionIndex" : 988
}

Просмотреть файл

@ -0,0 +1,23 @@
{
"id" : "b5ba478a-24ff-4e0a-b4bf-7ea46eea4209",
"name" : "azurespecials_customnamedrequestid",
"request" : {
"url" : "/azurespecials/customNamedRequestId",
"method" : "POST"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"foo-request-id" : "123",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "b5ba478a-24ff-4e0a-b4bf-7ea46eea4209",
"persistent" : true,
"insertionIndex" : 1000
}

Просмотреть файл

@ -0,0 +1,23 @@
{
"id" : "64ad0bfc-104f-4a67-9f22-5808c2d7b69a",
"name" : "azurespecials_customnamedrequestidparamgrouping",
"request" : {
"url" : "/azurespecials/customNamedRequestIdParamGrouping",
"method" : "POST"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"foo-request-id" : "123",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "64ad0bfc-104f-4a67-9f22-5808c2d7b69a",
"persistent" : true,
"insertionIndex" : 1001
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "e751ec54-3174-49a3-a71d-620d30207c4e",
"name" : "azurespecials_odata_filter",
"request" : {
"url" : "/azurespecials/odata/filter?$filter=id%20gt%205%20and%20name%20eq%20%27foo%27&$top=10&$orderby=id",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "e751ec54-3174-49a3-a71d-620d30207c4e",
"persistent" : true,
"insertionIndex" : 997
}

Просмотреть файл

@ -0,0 +1,26 @@
{
"id" : "287f43c7-7c30-404b-993e-e85f50d1d393",
"name" : "azurespecials_overwrite_x-ms-client-request-id_method",
"request" : {
"url" : "/azurespecials/overwrite/x-ms-client-request-id/method/",
"method" : "GET"
},
"response" : {
"status" : 400,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"x-ms-request-id" : "123",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "287f43c7-7c30-404b-993e-e85f50d1d393",
"persistent" : true,
"scenarioName" : "scenario-x-ms-client-request-id-method",
"requiredScenarioState" : "scenario-x-ms-client-request-id-method-2",
"newScenarioState" : "scenario-x-ms-client-request-id-method-3",
"insertionIndex" : 1002
}

Просмотреть файл

@ -0,0 +1,26 @@
{
"id" : "743086ae-b98d-42ed-812b-404a024192ae",
"name" : "azurespecials_overwrite_x-ms-client-request-id_method",
"request" : {
"url" : "/azurespecials/overwrite/x-ms-client-request-id/method/",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"x-ms-request-id" : "123",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "743086ae-b98d-42ed-812b-404a024192ae",
"persistent" : true,
"scenarioName" : "scenario-x-ms-client-request-id-method",
"requiredScenarioState" : "Started",
"newScenarioState" : "scenario-x-ms-client-request-id-method-2",
"insertionIndex" : 998
}

Просмотреть файл

@ -0,0 +1,25 @@
{
"id" : "b2facf19-4637-498e-a4b4-75a3521a806e",
"name" : "azurespecials_overwrite_x-ms-client-request-id_method",
"request" : {
"url" : "/azurespecials/overwrite/x-ms-client-request-id/method/",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"x-ms-request-id" : "123",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "b2facf19-4637-498e-a4b4-75a3521a806e",
"persistent" : true,
"scenarioName" : "scenario-x-ms-client-request-id-method",
"requiredScenarioState" : "scenario-x-ms-client-request-id-method-3",
"insertionIndex" : 1003
}

Просмотреть файл

@ -0,0 +1,23 @@
{
"id" : "5763647c-0a9b-47c7-88ee-ad378df473a3",
"name" : "azurespecials_overwrite_x-ms-client-request-id_via-param_method",
"request" : {
"url" : "/azurespecials/overwrite/x-ms-client-request-id/via-param/method/",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"x-ms-request-id" : "123",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "5763647c-0a9b-47c7-88ee-ad378df473a3",
"persistent" : true,
"insertionIndex" : 999
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "fbbeec83-7dde-4987-b9da-f4ca6a3c0f12",
"name" : "azurespecials_skipurlencoding_method_path_valid_path1_path2_path3",
"request" : {
"url" : "/azurespecials/skipUrlEncoding/method/path/valid/path1/path2/path3",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "fbbeec83-7dde-4987-b9da-f4ca6a3c0f12",
"persistent" : true,
"insertionIndex" : 989
}

Просмотреть файл

@ -0,0 +1,25 @@
{
"id" : "40958f8d-1ac2-4b7b-9771-3e3683868dd4",
"name" : "azurespecials_skipurlencoding_method_query_null",
"request" : {
"url" : "/azurespecials/skipUrlEncoding/method/query/null",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "40958f8d-1ac2-4b7b-9771-3e3683868dd4",
"persistent" : true,
"scenarioName" : "scenario-query-null",
"requiredScenarioState" : "Started",
"newScenarioState" : "scenario-query-null-2",
"insertionIndex" : 995
}

Просмотреть файл

@ -0,0 +1,24 @@
{
"id" : "75383cb2-498f-4996-9df9-022c9fb53f37",
"name" : "azurespecials_skipurlencoding_method_query_null",
"request" : {
"url" : "/azurespecials/skipUrlEncoding/method/query/null",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "75383cb2-498f-4996-9df9-022c9fb53f37",
"persistent" : true,
"scenarioName" : "scenario-query-null",
"requiredScenarioState" : "scenario-query-null-2",
"insertionIndex" : 996
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "0e2a0f2d-7638-4217-bc9f-2ec60ed18765",
"name" : "azurespecials_skipurlencoding_method_query_valid",
"request" : {
"url" : "/azurespecials/skipUrlEncoding/method/query/valid?q1=value1&q2=value2&q3=value3",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "0e2a0f2d-7638-4217-bc9f-2ec60ed18765",
"persistent" : true,
"insertionIndex" : 992
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "7f45851c-eb67-48b3-9776-8f97f7165557",
"name" : "azurespecials_skipurlencoding_path_path_valid_path1_path2_path3",
"request" : {
"url" : "/azurespecials/skipUrlEncoding/path/path/valid/path1/path2/path3",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "7f45851c-eb67-48b3-9776-8f97f7165557",
"persistent" : true,
"insertionIndex" : 990
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "f1981002-1af7-479e-90f8-1b3b5932caea",
"name" : "azurespecials_skipurlencoding_path_query_valid",
"request" : {
"url" : "/azurespecials/skipUrlEncoding/path/query/valid?q1=value1&q2=value2&q3=value3",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "f1981002-1af7-479e-90f8-1b3b5932caea",
"persistent" : true,
"insertionIndex" : 993
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "6fe34132-17ab-4d09-8bb0-84c68cf06b0e",
"name" : "azurespecials_skipurlencoding_swagger_path_valid_path1_path2_path3",
"request" : {
"url" : "/azurespecials/skipUrlEncoding/swagger/path/valid/path1/path2/path3",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "6fe34132-17ab-4d09-8bb0-84c68cf06b0e",
"persistent" : true,
"insertionIndex" : 991
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "5753b2b4-c2e7-4a4a-9760-cb1be032f363",
"name" : "azurespecials_skipurlencoding_swagger_query_valid",
"request" : {
"url" : "/azurespecials/skipUrlEncoding/swagger/query/valid?q1=value1&q2=value2&q3=value3",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "5753b2b4-c2e7-4a4a-9760-cb1be032f363",
"persistent" : true,
"insertionIndex" : 994
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "f8223e0b-aed2-4739-94ac-6e09d3accdb2",
"name" : "azurespecials_subscriptionid_method_string_none_path_global_1234-5678-9012-3456_1234-5678-9012-3456",
"request" : {
"url" : "/azurespecials/subscriptionId/method/string/none/path/global/1234-5678-9012-3456/1234-5678-9012-3456",
"method" : "POST"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:54:59 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "f8223e0b-aed2-4739-94ac-6e09d3accdb2",
"persistent" : true,
"insertionIndex" : 975
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "c0d60f71-5568-4919-b667-5a3fb4bb4113",
"name" : "azurespecials_subscriptionid_method_string_none_path_globalnotprovided_1234-5678-9012-3456_1234-5678-9012-3456",
"request" : {
"url" : "/azurespecials/subscriptionId/method/string/none/path/globalNotProvided/1234-5678-9012-3456/1234-5678-9012-3456?api-version=2015-07-01-preview",
"method" : "POST"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:54:59 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "c0d60f71-5568-4919-b667-5a3fb4bb4113",
"persistent" : true,
"insertionIndex" : 974
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "0f09f056-43eb-4056-8abc-09ab7adca05a",
"name" : "azurespecials_subscriptionid_method_string_none_path_local_1234-5678-9012-3456_1234-5678-9012-3456",
"request" : {
"url" : "/azurespecials/subscriptionId/method/string/none/path/local/1234-5678-9012-3456/1234-5678-9012-3456",
"method" : "POST"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "0f09f056-43eb-4056-8abc-09ab7adca05a",
"persistent" : true,
"insertionIndex" : 978
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "508c8df8-ed96-41fc-9532-e454209d53d8",
"name" : "azurespecials_subscriptionid_path_string_none_path_global_1234-5678-9012-3456_1234-5678-9012-3456",
"request" : {
"url" : "/azurespecials/subscriptionId/path/string/none/path/global/1234-5678-9012-3456/1234-5678-9012-3456",
"method" : "POST"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:54:59 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "508c8df8-ed96-41fc-9532-e454209d53d8",
"persistent" : true,
"insertionIndex" : 976
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "1e60859c-8e57-4b6c-a5bc-836104c7d0dd",
"name" : "azurespecials_subscriptionid_path_string_none_path_local_1234-5678-9012-3456_1234-5678-9012-3456",
"request" : {
"url" : "/azurespecials/subscriptionId/path/string/none/path/local/1234-5678-9012-3456/1234-5678-9012-3456",
"method" : "POST"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "1e60859c-8e57-4b6c-a5bc-836104c7d0dd",
"persistent" : true,
"insertionIndex" : 979
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "c7683f05-c97f-4157-98ad-d810c62a7a50",
"name" : "azurespecials_subscriptionid_swagger_string_none_path_global_1234-5678-9012-3456_1234-5678-9012-3456",
"request" : {
"url" : "/azurespecials/subscriptionId/swagger/string/none/path/global/1234-5678-9012-3456/1234-5678-9012-3456",
"method" : "POST"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:54:59 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "c7683f05-c97f-4157-98ad-d810c62a7a50",
"persistent" : true,
"insertionIndex" : 977
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "7f92cf16-2921-4654-b323-4c30cc29be95",
"name" : "azurespecials_subscriptionid_swagger_string_none_path_local_1234-5678-9012-3456_1234-5678-9012-3456",
"request" : {
"url" : "/azurespecials/subscriptionId/swagger/string/none/path/local/1234-5678-9012-3456/1234-5678-9012-3456",
"method" : "POST"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:55:00 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "7f92cf16-2921-4654-b323-4c30cc29be95",
"persistent" : true,
"insertionIndex" : 980
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "c38b48b3-970e-45e3-a540-117d81dc2f74",
"name" : "customuri",
"request" : {
"url" : "/customuri",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:54:50 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "c38b48b3-970e-45e3-a540-117d81dc2f74",
"persistent" : true,
"insertionIndex" : 645
}

Просмотреть файл

@ -0,0 +1,23 @@
{
"id" : "509be4f4-18c1-4b9a-8f1c-ec1d2a37fdb6",
"name" : "duration_invalid",
"request" : {
"url" : "/duration/invalid",
"method" : "GET"
},
"response" : {
"status" : 200,
"base64Body" : "IjEyM0FCQyI=",
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:54:55 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "509be4f4-18c1-4b9a-8f1c-ec1d2a37fdb6",
"persistent" : true,
"insertionIndex" : 648
}

Просмотреть файл

@ -0,0 +1,22 @@
{
"id" : "1288c353-a435-4b62-ae0e-d877b3931379",
"name" : "duration_null",
"request" : {
"url" : "/duration/null",
"method" : "GET"
},
"response" : {
"status" : 200,
"headers" : {
"X-Powered-By" : "Express",
"Vary" : "Origin",
"Access-Control-Allow-Credentials" : "true",
"Access-Control-Expose-Headers" : "x-ms-request-id,foo-request-id,Content-Type,value,Location,Azure-AsyncOperation,Retry-After",
"Date" : "Thu, 18 Oct 2018 21:54:55 GMT",
"Connection" : "keep-alive"
}
},
"uuid" : "1288c353-a435-4b62-ae0e-d877b3931379",
"persistent" : true,
"insertionIndex" : 647
}

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше