Skip to content

Commit 5f336ff

Browse files
bombguyAmplifiyer
andauthored
fix: close file handle warning (#715)
* fix: close fd warning * adding changeset * moving fs.close to finally block * mock .close for test * fix tests --------- Co-authored-by: Praveen Gupta <[email protected]>
1 parent 590662a commit 5f336ff

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

.changeset/fresh-lobsters-cheer.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@aws-amplify/platform-core': patch
3+
---
4+
5+
close file handle after reading config

packages/platform-core/src/config/local_configuration_controller.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,20 @@ void describe('config controller', () => {
77
const mockedFsReadFile = mock.method(fs, 'readFile');
88
const mockedFsWriteFile = mock.method(fs, 'writeFile');
99
const mockedFsOpen = mock.method(fs, 'open');
10+
const mockedFdClose = mock.fn();
1011

1112
beforeEach(() => {
1213
mockedFsReadFile.mock.resetCalls();
1314
mockedFsWriteFile.mock.resetCalls();
1415
mockedFsOpen.mock.resetCalls();
16+
mockedFdClose.mock.resetCalls();
1517
});
1618

1719
void it('if config has not been cached, read from fs', async () => {
1820
mockedFsOpen.mock.mockImplementationOnce(() => {
19-
return Promise.resolve();
21+
return Promise.resolve({
22+
close: mockedFdClose,
23+
});
2024
});
2125
mockedFsReadFile.mock.mockImplementationOnce(function () {
2226
return Promise.resolve('{"hello": 123}');
@@ -26,6 +30,7 @@ void describe('config controller', () => {
2630
assert.strictEqual(resolvedValue, undefined);
2731
assert.strictEqual(mockedFsOpen.mock.callCount(), 1);
2832
assert.strictEqual(mockedFsReadFile.mock.callCount(), 1);
33+
assert.strictEqual(mockedFdClose.mock.callCount(), 1);
2934
});
3035

3136
void it('should not throw & return undefined with path points to undefined nested object ', async () => {

packages/platform-core/src/config/local_configuration_controller.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,22 @@ export class LocalConfigurationController implements ConfigurationController {
3030
if (this._store) {
3131
return this._store;
3232
}
33+
// check if file exists & readable.
34+
let fd;
35+
3336
try {
34-
// check if file exists & readable.
35-
const fd = await fs.open(
37+
fd = await fs.open(
3638
this.configFilePath,
3739
fs.constants.F_OK,
3840
fs.constants.O_RDWR
3941
);
40-
4142
const fileContent = await fs.readFile(fd, 'utf-8');
4243
this._store = JSON.parse(fileContent);
4344
} catch {
4445
this._store = {};
4546
await this.write();
47+
} finally {
48+
await fd?.close();
4649
}
4750
return this._store;
4851
}

0 commit comments

Comments
 (0)