-
-
Notifications
You must be signed in to change notification settings - Fork 172
/
path-reservations.js
56 lines (50 loc) · 1.46 KB
/
path-reservations.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const t = require('tap')
const { reserve } = require('../lib/path-reservations.js')()
t.test('basic race', t => {
// simulate the race conditions we care about
let didFile = false
const file = done => {
t.equal(didFile, false, 'only call file once')
didFile = true
t.equal(didLink, false, 'do file before link')
setTimeout(done)
}
let didLink = false
const link = done => {
t.equal(didLink, false, 'only call once')
t.equal(didFile, true, 'do file before link')
didLink = true
// make sure this one is super duper cleared lol
// the subsequent calls are no-ops, but verify as much
done()
done()
done()
}
let didDir = false
const dir = done => {
t.equal(didDir, false, 'only do dir once')
t.equal(didLink, true, 'do link before dir')
didDir = true
done()
}
let didDir2 = false
const dir2 = done => {
t.equal(didDir, true, 'did dir before dir2')
t.equal(didDir2, false, 'only do dir2 once')
didDir2 = true
done()
}
let didDir3 = false
const dir3 = done => {
t.equal(didDir2, true, 'did dir2 before dir3')
t.equal(didDir3, false, 'only do dir3 once')
didDir3 = true
done()
t.end()
}
t.ok(reserve(['a/b/c/d'], file), 'file starts right away')
t.notOk(reserve(['a/B/c////D', 'a/b/e'], link), 'link waits')
t.notOk(reserve(['a/b/e/f'], dir), 'dir waits')
t.notOk(reserve(['a/b'], dir2), 'dir2 waits')
t.notOk(reserve(['a/b/x'], dir3), 'dir3 waits')
})