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