1 | import {expect} from 'chai';
|
2 | import {assertFileSystemContract, dirName, fileName, ignoredDir, ignoredFile,} from './implementation-suite'
|
3 | import {SlowFs} from '../test-kit/drivers/slow-fs';
|
4 | import {FileSystem, MemoryFileSystem, TimeoutFileSystem} from '../src/universal';
|
5 |
|
6 | describe('the timeout file system proxy', () => {
|
7 | const timeout = 200;
|
8 |
|
9 | assertFileSystemContract(() =>
|
10 | Promise.resolve(new TimeoutFileSystem(timeout, new MemoryFileSystem(undefined, {ignore: [ignoredDir, ignoredFile]}))),
|
11 | {retries: 15, interval: 2, timeout: 40, noExtraEventsGrace: 10}
|
12 | );
|
13 |
|
14 | describe(`delayed timeout test`, () => {
|
15 | let fs: FileSystem;
|
16 | let startTimestamp: number;
|
17 | const delay = timeout * 2;
|
18 |
|
19 | beforeEach(() => {
|
20 | startTimestamp = Date.now();
|
21 | fs = new TimeoutFileSystem(timeout, new SlowFs(delay));
|
22 | });
|
23 |
|
24 | it(`ensureDirectory exit before delay is over`, () => {
|
25 | return expect(fs.ensureDirectory(dirName)).to.eventually.be.rejectedWith('timed out')
|
26 | .then(() => expect(startTimestamp - Date.now()).to.be.below(delay));
|
27 | });
|
28 |
|
29 | it(`saveFile exit before delay is over`, () => {
|
30 | return expect(fs.saveFile(`${dirName}\\${fileName}`, '#goodnessSquad')).to.eventually.be.rejectedWith('timed out')
|
31 | .then(() => expect(startTimestamp - Date.now()).to.be.below(delay));
|
32 | });
|
33 |
|
34 | it(`deleteFile exit before delay is over`, () => {
|
35 | return expect(fs.deleteFile(`${dirName}\\${fileName}`)).to.eventually.be.rejectedWith('timed out')
|
36 | .then(() => expect(startTimestamp - Date.now()).to.be.below(delay));
|
37 | });
|
38 |
|
39 | it(`deleteDirectory exit before delay is over`, () => {
|
40 | return expect(fs.deleteDirectory(dirName)).to.eventually.be.rejectedWith('timed out')
|
41 | .then(() => expect(startTimestamp - Date.now()).to.be.below(delay));
|
42 | });
|
43 |
|
44 | it(`loadTextFile exit before delay is over`, () => {
|
45 | return expect(fs.loadTextFile(dirName)).to.eventually.be.rejectedWith('timed out')
|
46 | .then(() => expect(startTimestamp - Date.now()).to.be.below(delay));
|
47 | });
|
48 |
|
49 | it(`loadDirectoryTree exit before delay is over`, () => {
|
50 | return expect(fs.loadDirectoryTree()).to.eventually.be.rejectedWith('timed out')
|
51 | .then(() => expect(startTimestamp - Date.now()).to.be.below(delay));
|
52 | });
|
53 | });
|
54 | });
|