|
1 | 1 | /* Copyright (C) 2016 NooBaa */
|
2 |
| -/*eslint max-lines-per-function: ["error", 800]*/ |
| 2 | +/*eslint max-lines-per-function: ['error', 800]*/ |
3 | 3 | 'use strict';
|
4 | 4 |
|
5 | 5 | const fs = require('fs');
|
@@ -90,7 +90,7 @@ const account_user2 = {
|
90 | 90 | secret_key: 's-abcdefghijklmn123457'
|
91 | 91 | }],
|
92 | 92 | nsfs_account_config: {
|
93 |
| - distinguished_name: "root", |
| 93 | + distinguished_name: 'root', |
94 | 94 | new_buckets_path: new_buckets_path_user2,
|
95 | 95 | },
|
96 | 96 | creation_date: '2023-10-30T04:46:33.815Z',
|
@@ -581,7 +581,7 @@ mocha.describe('bucketspace_fs', function() {
|
581 | 581 | await create_bucket(param.name);
|
582 | 582 | const bucket_file_path = path.join(new_buckets_path, param.name, 'dummy.txt');
|
583 | 583 | await nb_native().fs.writeFile(ACCOUNT_FS_CONFIG, bucket_file_path,
|
584 |
| - Buffer.from(JSON.stringify("data")), { |
| 584 | + Buffer.from(JSON.stringify('data')), { |
585 | 585 | mode: config.BASE_MODE_FILE,
|
586 | 586 | });
|
587 | 587 | try {
|
@@ -676,28 +676,33 @@ mocha.describe('bucketspace_fs', function() {
|
676 | 676 | });
|
677 | 677 |
|
678 | 678 | mocha.it('delete_bucket with delete marker', async function() {
|
679 |
| - const versioning_sdk = make_versioning_object_sdk(); |
680 |
| - const param = { name: test_bucket_delete_marker }; |
681 |
| - await create_bucket(param.name); |
682 |
| - |
683 |
| - await bucketspace_fs.set_bucket_versioning({ name: param.name, versioning: 'ENABLED' }, versioning_sdk); |
684 |
| - const version_dir = path.join(new_buckets_path, param.name, '.versions'); |
685 |
| - await nb_native().fs.mkdir(ACCOUNT_FS_CONFIG, version_dir); |
686 |
| - |
687 |
| - const versioned_path = path.join(version_dir, 'dummy_mtime-crkfjum9883k-ino-guu7'); |
688 |
| - await create_versioned_object(versioned_path, Buffer.from(JSON.stringify("data")), 'mtime-crkfjum9883k-ino-guu7', false); |
689 |
| - |
690 |
| - const delete_marker_path = path.join(version_dir, 'dummy_mtime-crkfjx1hui2o-ino-guu9'); |
691 |
| - const delete_marker_obj = await create_versioned_object(delete_marker_path, Buffer.from(JSON.stringify("data")), 'mtime-crkfjx1hui2o-ino-guu9', true); |
692 |
| - const xattr_delete_marker = { [XATTR_DELETE_MARKER]: 'true' }; |
693 |
| - delete_marker_obj.replacexattr(DEFAULT_FS_CONFIG, xattr_delete_marker); |
694 |
| - |
| 679 | + let delete_marker_fd; |
695 | 680 | try {
|
696 |
| - await bucketspace_fs.delete_bucket(param, versioning_sdk); |
697 |
| - assert.fail('should have failed with NOT EMPTY'); |
698 |
| - } catch (err) { |
699 |
| - assert.strictEqual(err.rpc_code, 'NOT_EMPTY'); |
700 |
| - assert.equal(err.message, 'underlying directory has files in it'); |
| 681 | + const versioning_sdk = make_versioning_object_sdk(); |
| 682 | + const param = { name: test_bucket_delete_marker }; |
| 683 | + await create_bucket(param.name); |
| 684 | + |
| 685 | + await bucketspace_fs.set_bucket_versioning({ name: param.name, versioning: 'ENABLED' }, versioning_sdk); |
| 686 | + const version_dir = path.join(new_buckets_path, param.name, '.versions'); |
| 687 | + await nb_native().fs.mkdir(ACCOUNT_FS_CONFIG, version_dir); |
| 688 | + |
| 689 | + const versioned_path = path.join(version_dir, 'dummy_mtime-crkfjum9883k-ino-guu7'); |
| 690 | + await create_versioned_object(versioned_path, Buffer.from(JSON.stringify('data')), 'mtime-crkfjum9883k-ino-guu7', false); |
| 691 | + |
| 692 | + const delete_marker_path = path.join(version_dir, 'dummy_mtime-crkfjx1hui2o-ino-guu9'); |
| 693 | + delete_marker_fd = await create_versioned_object(delete_marker_path, Buffer.from(JSON.stringify('data')), 'mtime-crkfjx1hui2o-ino-guu9', true); |
| 694 | + const xattr_delete_marker = { [XATTR_DELETE_MARKER]: 'true' }; |
| 695 | + delete_marker_fd.replacexattr(DEFAULT_FS_CONFIG, xattr_delete_marker); |
| 696 | + |
| 697 | + try { |
| 698 | + await bucketspace_fs.delete_bucket(param, versioning_sdk); |
| 699 | + assert.fail('should have failed with NOT EMPTY'); |
| 700 | + } catch (err) { |
| 701 | + assert.strictEqual(err.rpc_code, 'NOT_EMPTY'); |
| 702 | + assert.equal(err.message, 'underlying directory has files in it'); |
| 703 | + } |
| 704 | + } finally { |
| 705 | + if (delete_marker_fd) await delete_marker_fd.close(ACCOUNT_FS_CONFIG); |
701 | 706 | }
|
702 | 707 | });
|
703 | 708 | });
|
@@ -964,6 +969,15 @@ async function create_bucket(bucket_name) {
|
964 | 969 | assert.equal(stat1.nlink, 1);
|
965 | 970 | }
|
966 | 971 |
|
| 972 | +/** |
| 973 | + * create_versioned_object creates a versioned object in the filesystem |
| 974 | + * IMPORTANT - if return_fd is true, the file will not be closed and should be closed manually by the test |
| 975 | + * @param {String} object_path |
| 976 | + * @param {Object} data |
| 977 | + * @param {String} version_id |
| 978 | + * @param {Boolean} return_fd |
| 979 | + * @returns {Promise<Void | nb.NativeFile>} |
| 980 | + */ |
967 | 981 | async function create_versioned_object(object_path, data, version_id, return_fd) {
|
968 | 982 | console.log(object_path);
|
969 | 983 | const target_file = await nb_native().fs.open(ACCOUNT_FS_CONFIG, object_path, 'w+');
|
|
0 commit comments