Skip to content

Commit 1e32fa3

Browse files
authored
Merge pull request #8825 from romayalon/romy-close-fds-on-test
NC | Tests | test_bucketspace_fs.js leaves a fd opened
2 parents a85e1c2 + 893729f commit 1e32fa3

File tree

1 file changed

+38
-24
lines changed

1 file changed

+38
-24
lines changed

src/test/unit_tests/test_bucketspace_fs.js

Lines changed: 38 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* Copyright (C) 2016 NooBaa */
2-
/*eslint max-lines-per-function: ["error", 800]*/
2+
/*eslint max-lines-per-function: ['error', 800]*/
33
'use strict';
44

55
const fs = require('fs');
@@ -90,7 +90,7 @@ const account_user2 = {
9090
secret_key: 's-abcdefghijklmn123457'
9191
}],
9292
nsfs_account_config: {
93-
distinguished_name: "root",
93+
distinguished_name: 'root',
9494
new_buckets_path: new_buckets_path_user2,
9595
},
9696
creation_date: '2023-10-30T04:46:33.815Z',
@@ -581,7 +581,7 @@ mocha.describe('bucketspace_fs', function() {
581581
await create_bucket(param.name);
582582
const bucket_file_path = path.join(new_buckets_path, param.name, 'dummy.txt');
583583
await nb_native().fs.writeFile(ACCOUNT_FS_CONFIG, bucket_file_path,
584-
Buffer.from(JSON.stringify("data")), {
584+
Buffer.from(JSON.stringify('data')), {
585585
mode: config.BASE_MODE_FILE,
586586
});
587587
try {
@@ -676,28 +676,33 @@ mocha.describe('bucketspace_fs', function() {
676676
});
677677

678678
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;
695680
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);
701706
}
702707
});
703708
});
@@ -964,6 +969,15 @@ async function create_bucket(bucket_name) {
964969
assert.equal(stat1.nlink, 1);
965970
}
966971

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+
*/
967981
async function create_versioned_object(object_path, data, version_id, return_fd) {
968982
console.log(object_path);
969983
const target_file = await nb_native().fs.open(ACCOUNT_FS_CONFIG, object_path, 'w+');

0 commit comments

Comments
 (0)