Skip to content

Commit 8e3f746

Browse files
refactor crr tests
1 parent 8de2a4b commit 8e3f746

File tree

3 files changed

+162
-120
lines changed

3 files changed

+162
-120
lines changed

CRR/ReplicationStatusUpdater.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -270,15 +270,13 @@ class ReplicationStatusUpdater {
270270
* @returns {void}
271271
*/
272272
_listObjectVersions(bucket, VersionIdMarker, KeyMarker, cb) {
273-
const command = new ListObjectVersionsCommand({
273+
this.s3.send(new ListObjectVersionsCommand({
274274
Bucket: bucket,
275275
MaxKeys: this.listingLimit,
276276
Prefix: this.targetPrefix,
277277
VersionIdMarker,
278278
KeyMarker,
279-
});
280-
281-
this.s3.send(command)
279+
}))
282280
.then(data => cb(null, data))
283281
.catch(err => cb(err));
284282
}
@@ -292,11 +290,11 @@ class ReplicationStatusUpdater {
292290
* @returns {void}
293291
*/
294292
_markPending(bucket, versions, cb) {
295-
const options = { Bucket: bucket };
296293
waterfall([
297294
next => {
298-
const command = new GetBucketReplicationCommand(options);
299-
this.s3.send(command)
295+
this.s3.send(new GetBucketReplicationCommand(
296+
{ Bucket: bucket },
297+
))
300298
.then(res => next(null, res.ReplicationConfiguration))
301299
.catch(err => {
302300
this.log.error('error getting bucket replication', { error: err });

tests/unit/CRR/ReplicationStatusUpdater.js

Lines changed: 145 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -29,27 +29,24 @@ describe('ReplicationStatusUpdater', () => {
2929
crr.run(err => {
3030
assert.ifError(err);
3131

32-
// Verify AWS SDK v3 send method was called
3332
expect(crr.s3.send).toHaveBeenCalledTimes(2); // One for list, one for getBucketReplication
33+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
34+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }),
35+
input: expect.objectContaining({
36+
Bucket: 'bucket0',
37+
MaxKeys: 10,
38+
Prefix: 'toto',
39+
VersionIdMarker: null,
40+
KeyMarker: null,
41+
})
42+
}));
3443

35-
// Verify the commands were created with correct parameters
36-
const sendCalls = crr.s3.send.mock.calls;
37-
const listCommand = sendCalls.find(call =>
38-
call[0].constructor.name === 'ListObjectVersionsCommand'
39-
);
40-
const replicationCommand = sendCalls.find(call =>
41-
call[0].constructor.name === 'GetBucketReplicationCommand'
42-
);
43-
44-
expect(listCommand).toBeDefined();
45-
expect(listCommand[0].input.Bucket).toBe('bucket0');
46-
expect(listCommand[0].input.MaxKeys).toBe(10);
47-
expect(listCommand[0].input.Prefix).toBe('toto');
48-
expect(listCommand[0].input.VersionIdMarker).toBeUndefined();
49-
expect(listCommand[0].input.KeyMarker).toBeUndefined();
50-
51-
expect(replicationCommand).toBeDefined();
52-
expect(replicationCommand[0].input.Bucket).toBe('bucket0');
44+
expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({
45+
constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }),
46+
input: expect.objectContaining({
47+
Bucket: 'bucket0'
48+
})
49+
}));
5350

5451
expect(crr.bb.getMetadata).toHaveBeenCalledTimes(1);
5552
expect(crr.bb.getMetadata).toHaveBeenCalledWith({
@@ -91,7 +88,6 @@ describe('ReplicationStatusUpdater', () => {
9188
});
9289

9390
it('should process bucket for CRR with multiple objects', done => {
94-
// Create a new instance with custom response for multiple objects
9591
crr = initializeCrrWithMocks({
9692
buckets: ['bucket0'],
9793
workers: 10,
@@ -100,33 +96,30 @@ describe('ReplicationStatusUpdater', () => {
10096
listingLimit: 10,
10197
siteName: 'aws-location',
10298
}, logger, {
103-
ListObjectVersionsCommand: listVersionsRes,
99+
ListObjectVersionsCommand: listVersionsRes, // Use custom response for list object versions
104100
});
105101

106102
crr.run(err => {
107103
assert.ifError(err);
108104

109-
// Verify AWS SDK v3 send method was called
110-
expect(crr.s3.send).toHaveBeenCalledTimes(2); // One for list, one for getBucketReplication
105+
expect(crr.s3.send).toHaveBeenCalledTimes(2);
106+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
107+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }),
108+
input: expect.objectContaining({
109+
Bucket: 'bucket0',
110+
MaxKeys: 10,
111+
Prefix: 'toto',
112+
VersionIdMarker: null,
113+
KeyMarker: null,
114+
})
115+
}));
111116

112-
// Verify the commands were created with correct parameters
113-
const sendCalls = crr.s3.send.mock.calls;
114-
const listCommand = sendCalls.find(call =>
115-
call[0].constructor.name === 'ListObjectVersionsCommand'
116-
);
117-
const replicationCommand = sendCalls.find(call =>
118-
call[0].constructor.name === 'GetBucketReplicationCommand'
119-
);
120-
121-
expect(listCommand).toBeDefined();
122-
expect(listCommand[0].input.Bucket).toBe('bucket0');
123-
expect(listCommand[0].input.MaxKeys).toBe(10);
124-
expect(listCommand[0].input.Prefix).toBe('toto');
125-
expect(listCommand[0].input.VersionIdMarker).toBeUndefined();
126-
expect(listCommand[0].input.KeyMarker).toBeUndefined();
127-
128-
expect(replicationCommand).toBeDefined();
129-
expect(replicationCommand[0].input.Bucket).toBe('bucket0');
117+
expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({
118+
constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }),
119+
input: expect.objectContaining({
120+
Bucket: 'bucket0'
121+
})
122+
}));
130123

131124
expect(crr.bb.getMetadata).toHaveBeenCalledTimes(2);
132125
expect(crr.bb.getMetadata).toHaveBeenNthCalledWith(1, {
@@ -377,8 +370,25 @@ describe('ReplicationStatusUpdater', () => {
377370
crr.run(err => {
378371
assert.ifError(err);
379372

380-
expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(1);
381-
expect(crr.s3.getBucketReplication).toHaveBeenCalledTimes(1);
373+
expect(crr.s3.send).toHaveBeenCalledTimes(2);
374+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
375+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }),
376+
input: expect.objectContaining({
377+
Bucket: 'bucket0',
378+
MaxKeys: 10,
379+
Prefix: 'toto',
380+
VersionIdMarker: null,
381+
KeyMarker: null,
382+
})
383+
}));
384+
385+
expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({
386+
constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' }),
387+
input: expect.objectContaining({
388+
Bucket: 'bucket0'
389+
})
390+
}));
391+
382392
expect(crr.bb.getMetadata).toHaveBeenCalledTimes(1);
383393
expect(crr.bb.putMetadata).toHaveBeenCalledTimes(1);
384394
expect(crr.bb.putMetadata).toHaveBeenCalledWith(
@@ -405,15 +415,21 @@ describe('ReplicationStatusUpdater with specifics', () => {
405415
workers: 10,
406416
replicationStatusToProcess: ['NEW'],
407417
maxUpdates: 1,
408-
}, logger);
409-
410-
crr.s3.listObjectVersions = jest.fn((params, cb) => cb(null, listVersionWithMarkerRes));
418+
}, logger, {
419+
ListObjectVersionsCommand: listVersionWithMarkerRes,
420+
});
411421

412422
crr.run(err => {
413423
assert.ifError(err);
414424

415-
expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(1);
416-
expect(crr.s3.getBucketReplication).toHaveBeenCalledTimes(1);
425+
expect(crr.s3.send).toHaveBeenCalledTimes(2);
426+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
427+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' })
428+
}));
429+
expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({
430+
constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' })
431+
}));
432+
417433
expect(crr.bb.getMetadata).toHaveBeenCalledTimes(1);
418434
expect(crr.bb.putMetadata).toHaveBeenCalledTimes(1);
419435

@@ -431,32 +447,39 @@ describe('ReplicationStatusUpdater with specifics', () => {
431447
workers: 10,
432448
replicationStatusToProcess: ['NEW'],
433449
maxUpdates: 2,
434-
}, logger);
435-
436-
crr.s3.listObjectVersions = jest.fn((params, cb) => cb(null, listVersionWithMarkerRes));
450+
}, logger, {
451+
ListObjectVersionsCommand: listVersionWithMarkerRes,
452+
});
437453

438454
crr.run(err => {
439455
assert.ifError(err);
440456

441-
expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(2);
442-
443-
expect(crr.s3.listObjectVersions).toHaveBeenNthCalledWith(1, {
444-
Bucket: 'bucket0',
445-
Prefix: undefined,
446-
MaxKeys: undefined,
447-
KeyMarker: null,
448-
VersionIdMarker: null,
449-
}, expect.any(Function));
450-
451-
expect(crr.s3.listObjectVersions).toHaveBeenNthCalledWith(2, {
452-
Bucket: 'bucket0',
453-
Prefix: undefined,
454-
MaxKeys: undefined,
455-
KeyMarker: 'key0',
456-
VersionIdMarker: 'aJdO148N3LjN00000000001I4j3QKItW',
457-
}, expect.any(Function));
457+
expect(crr.s3.send).toHaveBeenCalledTimes(4);
458+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
459+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }),
460+
input: expect.objectContaining({
461+
Bucket: 'bucket0',
462+
Prefix: undefined,
463+
MaxKeys: undefined,
464+
KeyMarker: null,
465+
VersionIdMarker: null,
466+
})
467+
}));
468+
expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({
469+
constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' })
470+
}));
471+
expect(crr.s3.send).toHaveBeenNthCalledWith(3, expect.objectContaining({
472+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }),
473+
input: expect.objectContaining({
474+
Bucket: 'bucket0',
475+
KeyMarker: 'key0',
476+
VersionIdMarker: 'aJdO148N3LjN00000000001I4j3QKItW'
477+
})
478+
}));
479+
expect(crr.s3.send).toHaveBeenNthCalledWith(4, expect.objectContaining({
480+
constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' })
481+
}));
458482

459-
expect(crr.s3.getBucketReplication).toHaveBeenCalledTimes(2);
460483
expect(crr.bb.getMetadata).toHaveBeenCalledTimes(2);
461484
expect(crr.bb.putMetadata).toHaveBeenCalledTimes(2);
462485

@@ -474,15 +497,24 @@ describe('ReplicationStatusUpdater with specifics', () => {
474497
workers: 10,
475498
replicationStatusToProcess: ['NEW'],
476499
maxScanned: 1,
477-
}, logger);
478-
479-
crr.s3.listObjectVersions = jest.fn((params, cb) => cb(null, listVersionWithMarkerRes));
500+
}, logger, {
501+
ListObjectVersionsCommand: listVersionWithMarkerRes,
502+
});
480503

481504
crr.run(err => {
482505
assert.ifError(err);
483506

484-
expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(1);
485-
expect(crr.s3.getBucketReplication).toHaveBeenCalledTimes(1);
507+
// Verify AWS SDK v3 send method was called
508+
expect(crr.s3.send).toHaveBeenCalledTimes(2); // One for list, one for getBucketReplication
509+
510+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
511+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' })
512+
}));
513+
514+
expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({
515+
constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' })
516+
}));
517+
486518
expect(crr.bb.getMetadata).toHaveBeenCalledTimes(1);
487519
expect(crr.bb.putMetadata).toHaveBeenCalledTimes(1);
488520

@@ -505,14 +537,16 @@ describe('ReplicationStatusUpdater with specifics', () => {
505537
crr.run(err => {
506538
assert.ifError(err);
507539

508-
expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(1);
509-
expect(crr.s3.listObjectVersions).toHaveBeenNthCalledWith(1, {
510-
Bucket: 'bucket0',
511-
Prefix: undefined,
512-
MaxKeys: undefined,
513-
KeyMarker: 'key1',
514-
VersionIdMarker: undefined,
515-
}, expect.any(Function));
540+
// Verify AWS SDK v3 send method was called
541+
expect(crr.s3.send).toHaveBeenCalledTimes(2); // One for list, one for getBucketReplication
542+
543+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
544+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }),
545+
input: expect.objectContaining({
546+
Bucket: 'bucket0',
547+
KeyMarker: 'key1'
548+
})
549+
}));
516550

517551
done();
518552
});
@@ -530,14 +564,15 @@ describe('ReplicationStatusUpdater with specifics', () => {
530564
crr.run(err => {
531565
assert.ifError(err);
532566

533-
expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(1);
534-
expect(crr.s3.listObjectVersions).toHaveBeenNthCalledWith(1, {
535-
Bucket: 'bucket0',
536-
Prefix: undefined,
537-
MaxKeys: undefined,
538-
KeyMarker: 'key1',
539-
VersionIdMarker: 'vid1',
540-
}, expect.any(Function));
567+
expect(crr.s3.send).toHaveBeenCalledTimes(2);
568+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
569+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' }),
570+
input: expect.objectContaining({
571+
Bucket: 'bucket0',
572+
KeyMarker: 'key1',
573+
VersionIdMarker: 'vid1'
574+
})
575+
}));
541576

542577
done();
543578
});
@@ -617,15 +652,20 @@ describe('ReplicationStatusUpdater with currentVersionOnly', () => {
617652
workers: 10,
618653
replicationStatusToProcess: ['NEW'],
619654
currentVersionOnly: true,
620-
}, logger);
621-
622-
crr.s3.listObjectVersions = jest.fn((params, cb) => cb(null, listVersionsWithMixedLatest));
655+
}, logger, {
656+
ListObjectVersionsCommand: listVersionsWithMixedLatest,
657+
});
623658

624659
crr.run(err => {
625660
assert.ifError(err);
626661

627-
expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(1);
628-
expect(crr.s3.getBucketReplication).toHaveBeenCalledTimes(1);
662+
expect(crr.s3.send).toHaveBeenCalledTimes(2);
663+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
664+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' })
665+
}));
666+
expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({
667+
constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' })
668+
}));
629669

630670
expect(crr.bb.getMetadata).toHaveBeenCalledTimes(2);
631671
expect(crr.bb.getMetadata).toHaveBeenNthCalledWith(1, {
@@ -693,15 +733,20 @@ describe('ReplicationStatusUpdater with currentVersionOnly', () => {
693733
workers: 10,
694734
replicationStatusToProcess: ['NEW'],
695735
currentVersionOnly: false,
696-
}, logger);
697-
698-
crr.s3.listObjectVersions = jest.fn((params, cb) => cb(null, listVersionsWithMixedLatest));
736+
}, logger, {
737+
ListObjectVersionsCommand: listVersionsWithMixedLatest,
738+
});
699739

700740
crr.run(err => {
701741
assert.ifError(err);
702742

703-
expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(1);
704-
expect(crr.s3.getBucketReplication).toHaveBeenCalledTimes(1);
743+
expect(crr.s3.send).toHaveBeenCalledTimes(2);
744+
expect(crr.s3.send).toHaveBeenNthCalledWith(1, expect.objectContaining({
745+
constructor: expect.objectContaining({ name: 'ListObjectVersionsCommand' })
746+
}));
747+
expect(crr.s3.send).toHaveBeenNthCalledWith(2, expect.objectContaining({
748+
constructor: expect.objectContaining({ name: 'GetBucketReplicationCommand' })
749+
}));
705750

706751
expect(crr.bb.getMetadata).toHaveBeenCalledTimes(2);
707752
expect(crr.bb.putMetadata).toHaveBeenCalledTimes(2);

0 commit comments

Comments
 (0)