|
1 | | -const AWS = require('aws-sdk'); |
2 | 1 | const werelogs = require('werelogs'); |
3 | 2 | const assert = require('assert'); |
4 | 3 |
|
5 | | -const BackbeatClient = require('../../../BackbeatClient'); |
6 | | -const ReplicationStatusUpdater = require('../../../CRR/ReplicationStatusUpdater'); |
7 | 4 | const { |
8 | 5 | initializeCrrWithMocks, |
9 | 6 | listVersionRes, |
10 | 7 | listVersionsRes, |
11 | 8 | listVersionWithMarkerRes, |
12 | | - getBucketReplicationRes, |
13 | 9 | getMetadataRes, |
14 | | - putMetadataRes, |
15 | 10 | } = require('../../utils/crr'); |
16 | 11 |
|
17 | 12 | const logger = new werelogs.Logger('ReplicationStatusUpdater::tests', 'debug', 'debug'); |
@@ -534,3 +529,174 @@ describe('ReplicationStatusUpdater with specifics', () => { |
534 | 529 | }); |
535 | 530 | }); |
536 | 531 | }); |
| 532 | + |
| 533 | +describe('ReplicationStatusUpdater with currentVersionOnly', () => { |
| 534 | + it('should process only latest versions when currentVersionOnly is true', done => { |
| 535 | + const listVersionsWithMixedLatest = { |
| 536 | + IsTruncated: false, |
| 537 | + Versions: [ |
| 538 | + { |
| 539 | + ETag: '"dabcc341ecab339daf766e1cddd5d1bb"', |
| 540 | + ChecksumAlgorithm: [], |
| 541 | + Size: 3263, |
| 542 | + StorageClass: 'STANDARD', |
| 543 | + Key: 'key0', |
| 544 | + VersionId: 'aJdO148N3LjN00000000001I4j3QKItW', |
| 545 | + IsLatest: true, |
| 546 | + LastModified: '2024-01-05T13:11:31.861Z', |
| 547 | + Owner: { |
| 548 | + DisplayName: 'bart', |
| 549 | + ID: '0', |
| 550 | + }, |
| 551 | + }, |
| 552 | + { |
| 553 | + ETag: '"dabcc341ecab339daf766e1cddd5d1bb"', |
| 554 | + ChecksumAlgorithm: [], |
| 555 | + Size: 3263, |
| 556 | + StorageClass: 'STANDARD', |
| 557 | + Key: 'key0', |
| 558 | + VersionId: 'aJdO148N3LjN00000000001I4j3QKItV', |
| 559 | + IsLatest: false, |
| 560 | + LastModified: '2024-01-05T13:11:30.861Z', |
| 561 | + Owner: { |
| 562 | + DisplayName: 'bart', |
| 563 | + ID: '0', |
| 564 | + }, |
| 565 | + }, |
| 566 | + { |
| 567 | + ETag: '"dabcc341ecab339daf766e1cddd5d1bb"', |
| 568 | + ChecksumAlgorithm: [], |
| 569 | + Size: 3263, |
| 570 | + StorageClass: 'STANDARD', |
| 571 | + Key: 'key1', |
| 572 | + VersionId: 'aJdO148N3LjN00000000001I4j3QKItU', |
| 573 | + IsLatest: true, |
| 574 | + LastModified: '2024-01-05T13:11:32.861Z', |
| 575 | + Owner: { |
| 576 | + DisplayName: 'bart', |
| 577 | + ID: '0', |
| 578 | + }, |
| 579 | + }, |
| 580 | + { |
| 581 | + ETag: '"dabcc341ecab339daf766e1cddd5d1bb"', |
| 582 | + ChecksumAlgorithm: [], |
| 583 | + Size: 3263, |
| 584 | + StorageClass: 'STANDARD', |
| 585 | + Key: 'key1', |
| 586 | + VersionId: 'aJdO148N3LjN00000000001I4j3QKItT', |
| 587 | + IsLatest: false, |
| 588 | + LastModified: '2024-01-05T13:11:31.861Z', |
| 589 | + Owner: { |
| 590 | + DisplayName: 'bart', |
| 591 | + ID: '0', |
| 592 | + }, |
| 593 | + }, |
| 594 | + ], |
| 595 | + DeleteMarkers: [], |
| 596 | + Name: 'bucket0', |
| 597 | + MaxKeys: 1000, |
| 598 | + CommonPrefixes: [], |
| 599 | + }; |
| 600 | + |
| 601 | + const crr = initializeCrrWithMocks({ |
| 602 | + buckets: ['bucket0'], |
| 603 | + workers: 10, |
| 604 | + replicationStatusToProcess: ['NEW'], |
| 605 | + currentVersionOnly: true, |
| 606 | + }, logger); |
| 607 | + |
| 608 | + crr.s3.listObjectVersions = jest.fn((params, cb) => cb(null, listVersionsWithMixedLatest)); |
| 609 | + |
| 610 | + crr.run(err => { |
| 611 | + assert.ifError(err); |
| 612 | + |
| 613 | + expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(1); |
| 614 | + expect(crr.s3.getBucketReplication).toHaveBeenCalledTimes(1); |
| 615 | + |
| 616 | + expect(crr.bb.getMetadata).toHaveBeenCalledTimes(2); |
| 617 | + expect(crr.bb.getMetadata).toHaveBeenNthCalledWith(1, { |
| 618 | + Bucket: 'bucket0', |
| 619 | + Key: 'key0', |
| 620 | + VersionId: 'aJdO148N3LjN00000000001I4j3QKItW', |
| 621 | + }, expect.any(Function)); |
| 622 | + expect(crr.bb.getMetadata).toHaveBeenNthCalledWith(2, { |
| 623 | + Bucket: 'bucket0', |
| 624 | + Key: 'key1', |
| 625 | + VersionId: 'aJdO148N3LjN00000000001I4j3QKItU', |
| 626 | + }, expect.any(Function)); |
| 627 | + |
| 628 | + expect(crr.bb.putMetadata).toHaveBeenCalledTimes(2); |
| 629 | + |
| 630 | + assert.strictEqual(crr._nProcessed, 2); |
| 631 | + assert.strictEqual(crr._nSkipped, 2); |
| 632 | + assert.strictEqual(crr._nUpdated, 2); |
| 633 | + assert.strictEqual(crr._nErrors, 0); |
| 634 | + done(); |
| 635 | + }); |
| 636 | + }); |
| 637 | + |
| 638 | + it('should process all versions when currentVersionOnly is false', done => { |
| 639 | + const listVersionsWithMixedLatest = { |
| 640 | + IsTruncated: false, |
| 641 | + Versions: [ |
| 642 | + { |
| 643 | + ETag: '"dabcc341ecab339daf766e1cddd5d1bb"', |
| 644 | + ChecksumAlgorithm: [], |
| 645 | + Size: 3263, |
| 646 | + StorageClass: 'STANDARD', |
| 647 | + Key: 'key0', |
| 648 | + VersionId: 'aJdO148N3LjN00000000001I4j3QKItW', |
| 649 | + IsLatest: true, |
| 650 | + LastModified: '2024-01-05T13:11:31.861Z', |
| 651 | + Owner: { |
| 652 | + DisplayName: 'bart', |
| 653 | + ID: '0', |
| 654 | + }, |
| 655 | + }, |
| 656 | + { |
| 657 | + ETag: '"dabcc341ecab339daf766e1cddd5d1bb"', |
| 658 | + ChecksumAlgorithm: [], |
| 659 | + Size: 3263, |
| 660 | + StorageClass: 'STANDARD', |
| 661 | + Key: 'key0', |
| 662 | + VersionId: 'aJdO148N3LjN00000000001I4j3QKItV', |
| 663 | + IsLatest: false, |
| 664 | + LastModified: '2024-01-05T13:11:30.861Z', |
| 665 | + Owner: { |
| 666 | + DisplayName: 'bart', |
| 667 | + ID: '0', |
| 668 | + }, |
| 669 | + }, |
| 670 | + ], |
| 671 | + DeleteMarkers: [], |
| 672 | + Name: 'bucket0', |
| 673 | + MaxKeys: 1000, |
| 674 | + CommonPrefixes: [], |
| 675 | + }; |
| 676 | + |
| 677 | + const crr = initializeCrrWithMocks({ |
| 678 | + buckets: ['bucket0'], |
| 679 | + workers: 10, |
| 680 | + replicationStatusToProcess: ['NEW'], |
| 681 | + currentVersionOnly: false, |
| 682 | + }, logger); |
| 683 | + |
| 684 | + crr.s3.listObjectVersions = jest.fn((params, cb) => cb(null, listVersionsWithMixedLatest)); |
| 685 | + |
| 686 | + crr.run(err => { |
| 687 | + assert.ifError(err); |
| 688 | + |
| 689 | + expect(crr.s3.listObjectVersions).toHaveBeenCalledTimes(1); |
| 690 | + expect(crr.s3.getBucketReplication).toHaveBeenCalledTimes(1); |
| 691 | + |
| 692 | + expect(crr.bb.getMetadata).toHaveBeenCalledTimes(2); |
| 693 | + expect(crr.bb.putMetadata).toHaveBeenCalledTimes(2); |
| 694 | + |
| 695 | + assert.strictEqual(crr._nProcessed, 2); |
| 696 | + assert.strictEqual(crr._nSkipped, 0); |
| 697 | + assert.strictEqual(crr._nUpdated, 2); |
| 698 | + assert.strictEqual(crr._nErrors, 0); |
| 699 | + done(); |
| 700 | + }); |
| 701 | + }); |
| 702 | +}); |
0 commit comments