Skip to content

Commit a00456b

Browse files
committed
mpu helper coverage amelioration
1 parent 01cb970 commit a00456b

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

tests/unit/storage/data/external/GcpService.spec.js

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const assert = require('assert');
22
const http = require('http');
33
const { GCP } = require('../../../../../lib/storage/data/external/GCP');
44
const { ListObjectsCommand, ListObjectVersionsCommand } = require('@aws-sdk/client-s3');
5+
const MpuHelper = require('../../../../../lib/storage/data/external/GCP/GcpApis/mpuHelper');
56

67
const httpPort = 8888;
78

@@ -492,3 +493,113 @@ describe('GcpService helper behavior', () => {
492493
});
493494
});
494495
});
496+
497+
describe('GcpService mpu helper behavior', () => {
498+
describe('removeParts', () => {
499+
it('should list versions via send(ListObjectVersionsCommand) and delete each version', done => {
500+
const service = {
501+
_maxConcurrent: 10,
502+
send: jest.fn()
503+
.mockImplementationOnce(command => {
504+
// page 1 (truncated)
505+
assert(command instanceof ListObjectVersionsCommand);
506+
assert.deepStrictEqual(command.input, {
507+
Bucket: 'mpu-bucket',
508+
Prefix: 'pfx/',
509+
KeyMarker: undefined,
510+
VersionIdMarker: undefined,
511+
});
512+
return Promise.resolve({
513+
IsTruncated: true,
514+
NextKeyMarker: 'k2',
515+
NextVersionIdMarker: 'v2',
516+
Versions: [
517+
{ Key: 'a', VersionId: '1' },
518+
],
519+
});
520+
})
521+
.mockImplementationOnce(command => {
522+
// page 2 (final)
523+
assert(command instanceof ListObjectVersionsCommand);
524+
assert.deepStrictEqual(command.input, {
525+
Bucket: 'mpu-bucket',
526+
Prefix: 'pfx/',
527+
KeyMarker: 'k2',
528+
VersionIdMarker: 'v2',
529+
});
530+
return Promise.resolve({
531+
IsTruncated: false,
532+
NextKeyMarker: undefined,
533+
NextVersionIdMarker: undefined,
534+
Versions: [
535+
{ Key: 'b', VersionId: '2' },
536+
{ Key: 'c', VersionId: '3' },
537+
],
538+
});
539+
}),
540+
deleteObject: jest.fn((params, cb) => cb(null)),
541+
};
542+
543+
const helper = new MpuHelper(service);
544+
helper.removeParts({ MPU: 'mpu-bucket', Prefix: 'pfx/' }, err => {
545+
assert.ifError(err);
546+
expect(service.send).toHaveBeenCalledTimes(2);
547+
expect(service.deleteObject).toHaveBeenCalledTimes(3);
548+
expect(service.deleteObject).toHaveBeenNthCalledWith(1, {
549+
Bucket: 'mpu-bucket',
550+
Key: 'a',
551+
VersionId: '1',
552+
}, expect.any(Function));
553+
done();
554+
});
555+
});
556+
557+
it('should ignore NoSuchKey errors during delete', done => {
558+
const service = {
559+
_maxConcurrent: 10,
560+
send: jest.fn().mockResolvedValue({
561+
IsTruncated: false,
562+
Versions: [
563+
{ Key: 'a', VersionId: '1' },
564+
{ Key: 'b', VersionId: '2' },
565+
],
566+
}),
567+
deleteObject: jest.fn((params, cb) => {
568+
if (params.Key === 'a') {
569+
const err = new Error('gone');
570+
err.name = 'NoSuchKey';
571+
return cb(err);
572+
}
573+
return cb(null);
574+
}),
575+
};
576+
577+
const helper = new MpuHelper(service);
578+
helper.removeParts({ MPU: 'mpu-bucket', Prefix: 'pfx/' }, err => {
579+
assert.ifError(err);
580+
expect(service.send).toHaveBeenCalledTimes(1);
581+
expect(service.deleteObject).toHaveBeenCalledTimes(2);
582+
done();
583+
});
584+
});
585+
586+
it('should return error when send(ListObjectVersionsCommand) rejects', done => {
587+
const listObjectVersionsError = new Error('send(ListObjectVersionsCommand) failed');
588+
const service = {
589+
_maxConcurrent: 10,
590+
send: jest.fn(command => {
591+
assert(command instanceof ListObjectVersionsCommand);
592+
return Promise.reject(listObjectVersionsError);
593+
}),
594+
deleteObject: jest.fn(),
595+
};
596+
597+
const helper = new MpuHelper(service);
598+
helper.removeParts({ MPU: 'mpu-bucket', Prefix: 'pfx/' }, err => {
599+
assert.strictEqual(err, listObjectVersionsError);
600+
expect(service.deleteObject).not.toHaveBeenCalled();
601+
done();
602+
});
603+
});
604+
});
605+
});

0 commit comments

Comments
 (0)