UNPKG

@artilleryio/platform-fargate

Version:
1 lines 2.35 kB
"use strict";const fs=require("fs"),path=require("path"),traverse=require("traverse"),chalk=require("chalk"),debug=require("debug")("plugin:fileUploads"),util=require("../../util");module.exports={Plugin:FileUploadPlugin};let FILENAME_TO_SIZE={};function FileUploadPlugin(script,events,opts){if(global.artillery&&1<Number(global.artillery.version.slice(0,1))&&void 0===process.env.LOCAL_WORKER_ID)debug("Not running in a worker, exiting");else{const basePath=path.dirname(opts.absoluteScriptPath);script.config.processor||(script.config.processor={}),script.config.processor.fileUploadPluginBeforeRequest=function(requestParams,userContext,events,done){if(requestParams&&(requestParams.formData||requestParams.body)){let setContentLengthHeader=!1,uploadFilename;if(traverse(requestParams).forEach(function(o){var filename;o&&o.fromFile&&(filename=path.resolve(basePath,renderVariables(o.fromFile,userContext.vars)),uploadFilename=filename,!0===o.setContentLengthHeader&&(requestParams.headers=Object.assign({},requestParams.headers),-1===Object.keys(requestParams.headers).map(h=>h.toLowerCase()).findIndex(h=>"content-length"===h)?setContentLengthHeader=!0:debug("setContentLengthHeader option is set, but content-length header is already set on request, skipping")),debug("Updating",o,"with",filename),o=fs.createReadStream(filename),this.update(o))}),setContentLengthHeader){let stat,statErr;if(!FILENAME_TO_SIZE[uploadFilename])try{stat=fs.statSync(uploadFilename)}catch(err){debug(`stat() on ${uploadFilename} failed with `+statErr.message),statErr=err}return statErr?done(statErr):(FILENAME_TO_SIZE[uploadFilename]=stat.size,requestParams.headers["content-length"]=FILENAME_TO_SIZE[uploadFilename],debug("Set content-length to "+requestParams.headers["content-length"]),done())}}return done()},script.scenarios.forEach(function(scenario){scenario.beforeRequest||(scenario.beforeRequest=[]),scenario.beforeRequest.push("fileUploadPluginBeforeRequest")}),debug("Plugin initialized")}}function renderVariables(str,vars){var RX=/{{{?[\s$\w]+}}}?/g;let result=str.substring(0,str.length);for(;-1<result.search(RX);){var templateStr=result.match(RX)[0];let varValue=vars[templateStr.replace(/{/g,"").replace(/}/g,"").trim()]||"";"object"==typeof varValue&&(varValue=JSON.stringify(varValue)),result=result.replace(templateStr,varValue)}return result}