@artilleryio/platform-fargate
Version:
Fargate support for Artillery
88 lines (76 loc) • 2.17 kB
JavaScript
;
const A = require('async');
const debug = require('debug')('commands:list-tests');
const util = require('../util');
const createS3Client = require('../utils/create-s3-client');
const setDefaultAWSCredentials = require('../utils/aws-set-default-credentials');
function tryDeleteTest(testName, options) {
deleteTest(testName, options);
}
async function deleteTest(testName, options) {
await setDefaultAWSCredentials();
A.waterfall(
[
A.constant({
testName: testName
}),
async function(context) {
context.s3Bucket = await util.getBucketName();
return context;
},
listTestObjects,
deleteTestObjects
],
function(err, context) {
if (err) {
// Check error type - special message for when test does not exist? Or list first to make
// sure.
console.error(`Error: ${err.message}`);
debug(err);
process.exit(1);
} else {
console.log(`Deleted named test ${testName}`);
}
});
}
function listTestObjects(context, callback) {
const prefix = `tests/${context.testName}/`;
util.listAllObjectsWithPrefix(
context.s3Bucket,
prefix,
(err, testObjects) => {
if (err) {
return callback(err, context);
}
if (testObjects.length === 0) {
return callback(new Error(`Test ${context.testName} not found`), context);
} else {
context.testObjectKeys = testObjects;
return callback(null, context);
}
});
}
// TODO: deleteObjects supports up to 1000 objects at a time. This function
// should work with more than 1000 objects OR 1000 objects should be a limit
// for a test package.
function deleteTestObjects(context, callback) {
const s3 = createS3Client();
const params = {
Bucket: context.s3Bucket,
Delete: {
Objects: context.testObjectKeys.map((o) => { return { Key: o.Key }; }),
Quiet: true
}
};
s3.deleteObjects(
params,
(s3Err, s3Resp) => {
if (s3Err) {
return callback(s3Err, context);
}
return callback(null, context);
});
}
module.exports = {
tryDeleteTest
};