YUKI Hiroshi
null+****@clear*****
Mon Nov 12 18:29:23 JST 2012
YUKI Hiroshi 2012-11-12 18:29:23 +0900 (Mon, 12 Nov 2012) New Revision: 8a4b7b82885040454a31cdf7601b939d6dd85b7a https://github.com/groonga/gcs/commit/8a4b7b82885040454a31cdf7601b939d6dd85b7a Log: Split implementation of runner module and command line runner completely Modified files: tools/run-scenarios tools/scenario-runner.js Modified: tools/run-scenarios (+26 -4) =================================================================== --- tools/run-scenarios 2012-11-12 18:01:00 +0900 (5681c55) +++ tools/run-scenarios 2012-11-12 18:29:23 +0900 (46a9f40) @@ -11,6 +11,7 @@ var Client = require(__dirname + '/../lib/client').Client; var Runner = require(__dirname + '/scenario-runner').Runner; var fs = require('fs'); var path = require('path'); +var mkdirp = require('mkdirp'); var commandLine = new CLI(); commandLine @@ -68,6 +69,22 @@ if (commandLine.options.scenario) { '"--scenarios" option.'); } +scenarios = scenarios.forEach(function(file) { + var scenarioName = path.basename(file, '.json'); + var scenario = { name: scenarioName, + path: file }; + + var requests = fs.readFileSync(file); + scenario.requests = JSON.parse(scenario); + + if (commandLine.options.outputDirectory) { + scenario.resultsDir = path.resolve(commandLine.options.outputDirectory, + scenarioName); + } + + return scenario; +}); + var options = {}; Object.keys(commandLine.options).forEach(function(key) { var type = typeof commandLine.options[key]; @@ -84,7 +101,8 @@ var runner = new Runner(options, function(error, event) { switch (event.type) { case 'scenario:start': console.log(''); - console.log('Scenario file: ' + event.path); + console.log('Scenario file: ' + event.scenario.path); + mkdirp.sync(event.scenario.resultsDir); break; case 'scenario:finish': @@ -92,11 +110,14 @@ var runner = new Runner(options, function(error, event) { break; case 'request:start': - console.log(' Processing request: ' + event.name); + console.log(' Processing request: ' + event.request.name); break; - case 'request:write': - console.log(' Wrote ' + event.path); + case 'request:finish': + var filename = Runner.toSafeName(event.request.name) + '.txt'; + var resultPath = path.resolve(event.scenario.resultsDir, filename); + fs.writeFile(resultPath, request.result); + console.log(' Wrote ' + resultPath); break; case 'all:finish': @@ -111,4 +132,5 @@ var runner = new Runner(options, function(error, event) { break; } }); + runner.run(scenarios); Modified: tools/scenario-runner.js (+45 -43) =================================================================== --- tools/scenario-runner.js 2012-11-12 18:01:00 +0900 (5d67598) +++ tools/scenario-runner.js 2012-11-12 18:29:23 +0900 (ebda6e8) @@ -1,7 +1,6 @@ var Client = require(__dirname + '/../lib/client').Client; var fs = require('fs'); var path = require('path'); -var mkdirp = require('mkdirp'); var statusCodeTable = { 500: 'Inetnal Server Error', @@ -20,65 +19,60 @@ function Runner(options, callback) { } Runner.prototype = { run: function(scenarios) { - this.processScenarios({ scenarios: scenarios }); + if (!Array.isArray(scenarios)) + scenarios = [scenarios]; + this._processScenario({ scenarios: scenarios }); }, - processScenarios: function(params) { + _processScenario: function(params) { if (!params.start) params.start = Date.now(); - var scenarioFile = params.scenarios.shift(); + var scenario = params.scenarios.shift(); - this.callback(null, { type: 'scenario:start', path: scenarioFile }); - - var scenario = fs.readFileSync(scenarioFile); - scenario = JSON.parse(scenario); - - var scenarioName = path.basename(scenarioFile, '.json'); - var resultsDir; - if (this.options.outputDirectory) { - resultsDir = path.resolve(this.options.outputDirectory, - scenarioName); - mkdirp.sync(resultsDir); - } + if (this.callback) + this.callback(null, { type: 'scenario:start', + scenario: scenario }); var self = this; - this.processScenario( - { name: scenarioName, - requests: scenario, - resultsDir: resultsDir }, + this._processScenario( + scenario, function(error) { if (params.scenarios.length) { - self.processScenarios(params); + self._processScenario(params); } else { var elapsedTime = Date.now() - params.start; - self.callback(null, { type: 'all:finish', elapsedTime: elapsedTime }); + if (self.callback) + self.callback(null, { type: 'all:finish', + elapsedTime: elapsedTime }); } } ); }, - scenarioNameToFileName: function(scenarioName) { + toFileName: function(scenarioName) { return scenarioName .replace(/[^a-zA-Z0-9]+/g, '-') .replace(/-$/, '') + '.txt'; }, - processScenario: function(params, callback) { - if (!params.start) params.start = Date.now(); - if (!params.processed) params.processed = {}; + _processScenario: function(scenario, callback) { + if (!scenario.start) scenario.start = Date.now(); + if (!scenario.processed) scenario.processed = {}; - var request = params.requests.shift(); + var request = scenario.requests.shift(); var results = {}; var self = this; function processNext() { - if (params.requests.length) { - self.processScenario(params, callback); + if (scenario.requests.length) { + self.processScenario(scenario, callback); } else { - var elapsedTime = Date.now() - params.start; - self.callback(null, { type: 'scenario:finish', - elapsedTime: elapsedTime, - results: results }); - callback(null); + scenario.results = results; + var elapsedTime = Date.now() - scenario.start; + if (self.callback) + self.callback(null, { type: 'scenario:finish', + elapsedTime: elapsedTime, + scenario: scenario }); + callback(null, results); } } @@ -87,19 +81,22 @@ Runner.prototype = { var name = request.name; var count = 1; - while (name in params.processed) { + while (name in scenario.processed) { name = request.name + count++; } - this.callback(null, { type: 'request:start', name: name }); + if (this.callback) + this.callback(null, { type: 'request:start', + scenario: scenario, + request: request }); - var filename = this.scenarioNameToFileName(name); this.client.rawConfigurationRequest(request.params.Action, request.params, function(error, result) { var response = error || result; var statusCode = response.StatusCode; if (!statusCodeTable[statusCode]) { - self.callback(null, { type: 'error', statusCode: statusCode }); + if (self.callback) + self.callback(null, { type: 'error', statusCode: statusCode }); return; } @@ -112,14 +109,19 @@ Runner.prototype = { output += response.Body.toString(); results[name] = output; - if (params.resultsDir) { - var resultPath = path.resolve(params.resultsDir, filename); - fs.writeFile(resultPath, output); - self.callback(null, { type: 'request:write', path: resultPath }); - } + request.result = output; + if (self.callback) + self.callback(null, { type: 'request:finish', + scenario: scenario, + request: request }); processNext(); }); } }; +Runner.toSafeName = function(name) { + return name + .replace(/[^a-zA-Z0-9]+/g, '-') + .replace(/-$/, ''); +}; exports.Runner = Runner; -------------- next part -------------- HTML����������������������������...Download