forked from mafintosh/fsctl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.js
88 lines (64 loc) · 2.35 KB
/
test.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
const tape = require('tape')
const { lock, unlock, sparse } = require('./')
const { openSync, closeSync, unlinkSync } = require('fs')
const { spawnSync } = require('child_process')
const { tmpdir } = require('os')
const path = require('path')
tape('two in one process', function (assert) {
const fd = openSync(__filename, 'r')
assert.ok(lock(fd), 'could lock')
const fd1 = openSync(__filename, 'r')
assert.notOk(lock(fd1), 'could not lock again')
assert.ok(unlock(fd), 'could unlock')
assert.ok(lock(fd1), 'could lock the other one now')
assert.notOk(lock(fd), 'could not lock first one')
closeSync(fd1)
assert.ok(lock(fd), 'could lock first one after closing second one')
closeSync(fd)
assert.end()
})
tape('two in one process (new file)', function (assert) {
const fd = openSync(__filename + '.tmp', 'w')
assert.ok(lock(fd), 'could lock')
const fd1 = openSync(__filename + '.tmp', 'r')
assert.notOk(lock(fd1), 'could not lock again')
assert.ok(unlock(fd), 'could unlock')
assert.ok(lock(fd1), 'could lock the other one now')
assert.notOk(lock(fd), 'could not lock first one')
closeSync(fd1)
assert.ok(lock(fd), 'could lock first one after closing second one')
closeSync(fd)
unlinkSync(__filename + '.tmp')
assert.end()
})
tape('two in different processes', function (assert) {
const fd = openSync(__filename, 'r')
assert.ok(lock(fd))
{
const { stdout, stderr } = spawnSync(process.execPath, [ '-e', `
const { lock } = require(${JSON.stringify(__dirname)})
const { openSync } = require('fs')
console.log(lock(openSync(${JSON.stringify(__filename)}, 'r')))
` ])
assert.same(stderr.toString(), '')
assert.same(stdout.toString().trim(), 'false', 'other process could not lock')
}
closeSync(fd)
{
const { stdout, stderr } = spawnSync(process.execPath, [ '-e', `
const { lock } = require(${JSON.stringify(__dirname)})
const { openSync } = require('fs')
console.log(lock(openSync(${JSON.stringify(__filename)}, 'r')))
` ])
assert.same(stderr.toString(), '')
assert.same(stdout.toString().trim(), 'true', 'other process could lock')
}
assert.end()
})
tape('set sparse', function (assert) {
const file = path.join(tmpdir(), 'fsctl-testfile')
const fd = openSync(file, 'w')
const res = sparse(fd)
assert.ok(res, 'could set as sparse')
assert.end()
})