1
- var raf = require ( './' )
2
- var tape = require ( 'tape' )
3
- var os = require ( 'os' )
4
- var path = require ( 'path' )
5
- var fs = require ( 'fs' )
6
- var mkdirp = require ( 'mkdirp' )
7
- var isWin = process . platform === 'win32'
1
+ const test = require ( 'brittle' )
2
+ const os = require ( 'os' )
3
+ const path = require ( 'path' )
4
+ const fs = require ( 'fs' )
5
+ const RAF = require ( '.' )
8
6
9
- var tmp = path . join ( os . tmpdir ( ) , 'random-access-file-' + process . pid + '-' + Date . now ( ) )
10
- var i = 0
7
+ const tmp = path . join ( os . tmpdir ( ) , 'random-access-file-' + process . pid + '-' + Date . now ( ) )
8
+ let i = 0
11
9
12
- mkdirp . sync ( tmp )
10
+ fs . mkdirSync ( tmp , { recursive : true } )
13
11
14
- tape ( 'write and read' , function ( t ) {
15
- var file = raf ( gen ( ) )
12
+ test ( 'write and read' , function ( t ) {
13
+ t . plan ( 4 )
14
+
15
+ const file = new RAF ( gen ( ) )
16
16
17
17
file . write ( 0 , Buffer . from ( 'hello' ) , function ( err ) {
18
- t . error ( err , 'no error' )
18
+ t . absent ( err , 'no error' )
19
19
file . read ( 0 , 5 , function ( err , buf ) {
20
- t . error ( err , 'no error' )
21
- t . same ( buf , Buffer . from ( 'hello' ) )
22
- file . destroy ( ( ) => t . end ( ) )
20
+ t . absent ( err , 'no error' )
21
+ t . alike ( buf , Buffer . from ( 'hello' ) )
22
+ file . destroy ( ( ) => t . pass ( ) )
23
23
} )
24
24
} )
25
25
} )
26
26
27
- tape ( 'read empty' , function ( t ) {
28
- var file = raf ( gen ( ) , { writable : true } )
27
+ test ( 'read empty' , function ( t ) {
28
+ t . plan ( 3 )
29
+
30
+ const file = new RAF ( gen ( ) , { writable : true } )
29
31
30
32
file . read ( 0 , 0 , function ( err , buf ) {
31
- t . error ( err , 'no error' )
32
- t . same ( buf , Buffer . alloc ( 0 ) , 'empty buffer' )
33
- file . destroy ( ( ) => t . end ( ) )
33
+ t . absent ( err , 'no error' )
34
+ t . alike ( buf , Buffer . alloc ( 0 ) , 'empty buffer' )
35
+ file . destroy ( ( ) => t . pass ( ) )
34
36
} )
35
37
} )
36
38
37
- tape ( 'read range > file' , function ( t ) {
38
- var file = raf ( gen ( ) )
39
+ test ( 'read range > file' , function ( t ) {
40
+ t . plan ( 2 )
41
+
42
+ const file = new RAF ( gen ( ) )
39
43
40
44
file . read ( 0 , 5 , function ( err , buf ) {
41
45
t . ok ( err , 'not satisfiable' )
42
- file . destroy ( ( ) => t . end ( ) )
46
+ file . destroy ( ( ) => t . pass ( ) )
43
47
} )
44
48
} )
45
49
46
- tape ( 'read range > file with data' , function ( t ) {
47
- var file = raf ( gen ( ) )
50
+ test ( 'read range > file with data' , function ( t ) {
51
+ t . plan ( 3 )
52
+
53
+ const file = new RAF ( gen ( ) )
48
54
49
55
file . write ( 0 , Buffer . from ( 'hello' ) , function ( err ) {
50
- t . error ( err , 'no error' )
56
+ t . absent ( err , 'no error' )
51
57
file . read ( 0 , 10 , function ( err , buf ) {
52
58
t . ok ( err , 'not satisfiable' )
53
- file . destroy ( ( ) => t . end ( ) )
59
+ file . destroy ( ( ) => t . pass ( ) )
54
60
} )
55
61
} )
56
62
} )
57
63
58
- tape ( 'random access write and read' , function ( t ) {
59
- var file = raf ( gen ( ) )
64
+ test ( 'random access write and read' , function ( t ) {
65
+ t . plan ( 8 )
66
+
67
+ const file = new RAF ( gen ( ) )
60
68
61
69
file . write ( 10 , Buffer . from ( 'hi' ) , function ( err ) {
62
- t . error ( err , 'no error' )
70
+ t . absent ( err , 'no error' )
63
71
file . write ( 0 , Buffer . from ( 'hello' ) , function ( err ) {
64
- t . error ( err , 'no error' )
72
+ t . absent ( err , 'no error' )
65
73
file . read ( 10 , 2 , function ( err , buf ) {
66
- t . error ( err , 'no error' )
67
- t . same ( buf , Buffer . from ( 'hi' ) )
74
+ t . absent ( err , 'no error' )
75
+ t . alike ( buf , Buffer . from ( 'hi' ) )
68
76
file . read ( 0 , 5 , function ( err , buf ) {
69
- t . error ( err , 'no error' )
70
- t . same ( buf , Buffer . from ( 'hello' ) )
77
+ t . absent ( err , 'no error' )
78
+ t . alike ( buf , Buffer . from ( 'hello' ) )
71
79
file . read ( 5 , 5 , function ( err , buf ) {
72
- t . error ( err , 'no error' )
73
- t . same ( buf , Buffer . from ( [ 0 , 0 , 0 , 0 , 0 ] ) )
74
- t . end ( )
80
+ t . absent ( err , 'no error' )
81
+ t . alike ( buf , Buffer . from ( [ 0 , 0 , 0 , 0 , 0 ] ) )
75
82
} )
76
83
} )
77
84
} )
78
85
} )
79
86
} )
80
87
} )
81
88
82
- tape ( 're-open' , function ( t ) {
83
- var name = gen ( )
84
- var file = raf ( name )
89
+ test ( 're-open' , function ( t ) {
90
+ t . plan ( 3 )
91
+
92
+ const name = gen ( )
93
+ const file = new RAF ( name )
85
94
86
95
file . write ( 10 , Buffer . from ( 'hello' ) , function ( err ) {
87
- t . error ( err , 'no error' )
88
- var file2 = raf ( name )
96
+ t . absent ( err , 'no error' )
97
+ const file2 = new RAF ( name )
89
98
file2 . read ( 10 , 5 , function ( err , buf ) {
90
- t . error ( err , 'no error' )
91
- t . same ( buf , Buffer . from ( 'hello' ) )
92
- t . end ( )
99
+ t . absent ( err , 'no error' )
100
+ t . alike ( buf , Buffer . from ( 'hello' ) )
93
101
} )
94
102
} )
95
103
} )
96
104
97
- tape ( 're-open and truncate' , function ( t ) {
98
- var name = gen ( )
99
- var file = raf ( name )
105
+ test ( 're-open and truncate' , function ( t ) {
106
+ t . plan ( 2 )
107
+
108
+ const name = gen ( )
109
+ const file = new RAF ( name )
100
110
101
111
file . write ( 10 , Buffer . from ( 'hello' ) , function ( err ) {
102
- t . error ( err , 'no error' )
103
- var file2 = raf ( name , { truncate : true } )
112
+ t . absent ( err , 'no error' )
113
+ const file2 = new RAF ( name , { truncate : true } )
104
114
file2 . read ( 10 , 5 , function ( err , buf ) {
105
115
t . ok ( err , 'file should be truncated' )
106
- t . end ( )
107
116
} )
108
117
} )
109
118
} )
110
119
111
- tape ( 'truncate with size' , function ( t ) {
112
- var file = raf ( gen ( ) , { size : 100 , writable : true } )
120
+ test ( 'truncate with size' , function ( t ) {
121
+ t . plan ( 3 )
122
+
123
+ const file = new RAF ( gen ( ) , { size : 100 , writable : true } )
113
124
114
125
file . stat ( function ( err , st ) {
115
- t . error ( err , 'no error' )
116
- t . same ( st . size , 100 )
117
- file . destroy ( ( ) => t . end ( ) )
126
+ t . absent ( err , 'no error' )
127
+ t . is ( st . size , 100 )
128
+ file . destroy ( ( ) => t . pass ( ) )
118
129
} )
119
130
} )
120
131
121
- tape ( 'bad open' , function ( t ) {
122
- if ( isWin ) return t . end ( ) // windows apparently allow you to open dirs :/
132
+ test ( 'bad open' , {
133
+ // windows apparently allow you to open dirs :/
134
+ skip : process . platform === 'win32'
135
+ } , function ( t ) {
136
+ t . plan ( 2 )
123
137
124
- var file = raf ( tmp , { writable : true } )
138
+ const file = new RAF ( tmp , { writable : true } )
125
139
126
140
file . open ( function ( err ) {
127
141
t . ok ( err )
128
- file . close ( ( ) => t . end ( ) )
142
+ file . close ( ( ) => t . pass ( ) )
129
143
} )
130
144
} )
131
145
132
- tape ( 'mkdir path' , function ( t ) {
133
- var name = path . join ( tmp , ++ i + '-folder' , 'test.txt' )
134
- var file = raf ( name )
146
+ test ( 'mkdir path' , function ( t ) {
147
+ t . plan ( 4 )
148
+
149
+ const name = path . join ( tmp , ++ i + '-folder' , 'test.txt' )
150
+ const file = new RAF ( name )
135
151
136
152
file . write ( 0 , Buffer . from ( 'hello' ) , function ( err ) {
137
- t . error ( err , 'no error' )
153
+ t . absent ( err , 'no error' )
138
154
file . read ( 0 , 5 , function ( err , buf ) {
139
- t . error ( err , 'no error' )
140
- t . same ( buf , Buffer . from ( 'hello' ) )
141
- t . end ( )
142
- file . destroy ( )
155
+ t . absent ( err , 'no error' )
156
+ t . alike ( buf , Buffer . from ( 'hello' ) )
157
+ file . destroy ( ( ) => t . pass ( ) )
143
158
} )
144
159
} )
145
160
} )
146
161
147
- tape ( 'write/read big chunks' , function ( t ) {
148
- var file = raf ( gen ( ) )
149
- var bigBuffer = Buffer . alloc ( 10 * 1024 * 1024 )
150
- var missing = 2
162
+ test ( 'write/read big chunks' , async function ( t ) {
163
+ t . plan ( 2 )
164
+
165
+ const file = new RAF ( gen ( ) )
166
+ const bigBuffer = Buffer . alloc ( 10 * 1024 * 1024 )
151
167
152
168
bigBuffer . fill ( 'hey. hey. how are you doing?. i am good thanks how about you? i am good' )
153
169
170
+ const io = t . test ( 'write and read' )
171
+ io . plan ( 6 )
172
+
154
173
file . write ( 0 , bigBuffer , function ( err ) {
155
- t . error ( err , 'no error' )
174
+ io . absent ( err , 'no error' )
156
175
file . read ( 0 , bigBuffer . length , function ( err , buf ) {
157
- t . error ( err , 'no error' )
158
- t . same ( buf , bigBuffer )
159
- done ( )
176
+ io . absent ( err , 'no error' )
177
+ io . alike ( buf , bigBuffer )
160
178
} )
161
179
} )
162
180
file . write ( bigBuffer . length * 2 , bigBuffer , function ( err ) {
163
- t . error ( err , 'no error' )
181
+ io . absent ( err , 'no error' )
164
182
file . read ( bigBuffer . length * 2 , bigBuffer . length , function ( err , buf ) {
165
- t . error ( err , 'no error' )
166
- t . same ( buf , bigBuffer )
167
- done ( )
183
+ io . absent ( err , 'no error' )
184
+ io . alike ( buf , bigBuffer )
168
185
} )
169
186
} )
170
187
171
- function done ( ) {
172
- if ( ! -- missing ) file . destroy ( ( ) => t . end ( ) )
173
- }
188
+ await io
189
+
190
+ file . destroy ( ( ) => t . pass ( ) )
174
191
} )
175
192
176
- tape ( 'rmdir option' , function ( t ) {
177
- var name = path . join ( 'rmdir' , ++ i + '' , 'folder' , 'test.txt' )
178
- var file = raf ( name , { rmdir : true , directory : tmp } )
193
+ test ( 'rmdir option' , function ( t ) {
194
+ t . plan ( 5 )
195
+
196
+ const name = path . join ( 'rmdir' , ++ i + '' , 'folder' , 'test.txt' )
197
+ const file = new RAF ( name , { rmdir : true , directory : tmp } )
179
198
180
199
file . write ( 0 , Buffer . from ( 'hi' ) , function ( err ) {
181
- t . error ( err , 'no error' )
200
+ t . absent ( err , 'no error' )
182
201
file . read ( 0 , 2 , function ( err , buf ) {
183
- t . error ( err , 'no error' )
184
- t . same ( buf , Buffer . from ( 'hi' ) )
202
+ t . absent ( err , 'no error' )
203
+ t . alike ( buf , Buffer . from ( 'hi' ) )
185
204
file . destroy ( ondestroy )
186
205
} )
187
206
} )
188
207
189
208
function ondestroy ( err ) {
190
- t . error ( err , 'no error' )
209
+ t . absent ( err , 'no error' )
191
210
fs . stat ( path . join ( tmp , 'rmdir' ) , function ( err ) {
192
- t . same ( err && err . code , 'ENOENT' , 'should be removed' )
193
- t . end ( )
211
+ t . is ( err && err . code , 'ENOENT' , 'should be removed' )
194
212
} )
195
213
}
196
214
} )
197
215
198
- tape ( 'rmdir option with non empty parent' , function ( t ) {
199
- var name = path . join ( 'rmdir' , ++ i + '' , 'folder' , 'test.txt' )
200
- var nonEmpty = path . join ( tmp , name , '../..' )
201
- var file = raf ( name , { rmdir : true , directory : tmp } )
216
+ test ( 'rmdir option with non empty parent' , function ( t ) {
217
+ t . plan ( 7 )
218
+
219
+ const name = path . join ( 'rmdir' , ++ i + '' , 'folder' , 'test.txt' )
220
+ const nonEmpty = path . join ( tmp , name , '../..' )
221
+ const file = new RAF ( name , { rmdir : true , directory : tmp } )
202
222
203
223
file . write ( 0 , Buffer . from ( 'hi' ) , function ( err ) {
204
- t . error ( err , 'no error' )
224
+ t . absent ( err , 'no error' )
205
225
fs . writeFileSync ( path . join ( nonEmpty , 'thing' ) , '' )
206
226
file . read ( 0 , 2 , function ( err , buf ) {
207
- t . error ( err , 'no error' )
208
- t . same ( buf , Buffer . from ( 'hi' ) )
227
+ t . absent ( err , 'no error' )
228
+ t . alike ( buf , Buffer . from ( 'hi' ) )
209
229
file . destroy ( ondestroy )
210
230
} )
211
231
} )
212
232
213
233
function ondestroy ( err ) {
214
- t . error ( err , 'no error' )
234
+ t . absent ( err , 'no error' )
215
235
fs . stat ( path . join ( tmp , 'rmdir' ) , function ( err ) {
216
- t . error ( err , 'should not be removed' )
236
+ t . absent ( err , 'should not be removed' )
217
237
fs . readdir ( nonEmpty , function ( err , list ) {
218
- t . error ( err , 'no error' )
219
- t . same ( list , [ 'thing' ] , 'should only be one entry' )
220
- t . end ( )
238
+ t . absent ( err , 'no error' )
239
+ t . alike ( list , [ 'thing' ] , 'should only be one entry' )
221
240
} )
222
241
} )
223
242
}
224
243
} )
225
244
226
- tape ( 'del' , function ( t ) {
227
- var file = raf ( gen ( ) )
245
+ test ( 'del' , function ( t ) {
246
+ t . plan ( 10 )
247
+
248
+ const file = new RAF ( gen ( ) )
228
249
229
250
file . write ( 0 , Buffer . alloc ( 100 ) , function ( err ) {
230
- t . error ( err , 'no error' )
251
+ t . absent ( err , 'no error' )
231
252
file . stat ( function ( err , st ) {
232
- t . error ( err , 'no error' )
233
- t . same ( st . size , 100 )
253
+ t . absent ( err , 'no error' )
254
+ t . is ( st . size , 100 )
234
255
file . del ( 0 , 40 , function ( err ) {
235
- t . error ( err , 'no error' )
256
+ t . absent ( err , 'no error' )
236
257
file . stat ( function ( err , st ) {
237
- t . error ( err , 'no error' )
238
- t . same ( st . size , 100 , 'inplace del, same size' )
258
+ t . absent ( err , 'no error' )
259
+ t . is ( st . size , 100 , 'inplace del, same size' )
239
260
file . del ( 50 , 50 , function ( err ) {
240
- t . error ( err , 'no error' )
261
+ t . absent ( err , 'no error' )
241
262
file . stat ( function ( err , st ) {
242
- t . error ( err , 'no error' )
243
- t . same ( st . size , 50 )
244
- file . destroy ( ( ) => t . end ( ) )
263
+ t . absent ( err , 'no error' )
264
+ t . is ( st . size , 50 )
265
+ file . destroy ( ( ) => t . pass ( ) )
245
266
} )
246
267
} )
247
268
} )
@@ -250,25 +271,27 @@ tape('del', function (t) {
250
271
} )
251
272
} )
252
273
253
- tape ( 'open and close many times' , function ( t ) {
254
- var name = gen ( )
255
- var file = raf ( name )
256
- var buf = Buffer . alloc ( 4 )
274
+ test ( 'open and close many times' , function ( t ) {
275
+ t . plan ( 3 )
276
+
277
+ const name = gen ( )
278
+ const file = new RAF ( name )
279
+ const buf = Buffer . alloc ( 4 )
257
280
258
281
file . write ( 0 , buf , function ( err ) {
259
- t . error ( err , 'no error' )
282
+ t . absent ( err , 'no error' )
260
283
loop ( 5000 , function ( err ) {
261
- t . error ( err , 'no error' )
262
- file . destroy ( ( ) => t . end ( ) )
284
+ t . absent ( err , 'no error' )
285
+ file . destroy ( ( ) => t . pass ( ) )
263
286
} )
264
287
} )
265
288
266
289
function loop ( n , cb ) {
267
- var file = raf ( name )
290
+ const file = new RAF ( name )
268
291
file . read ( 0 , 4 , function ( err , buffer ) {
269
292
if ( err ) return cb ( err )
270
293
if ( ! buf . equals ( buffer ) ) {
271
- t . same ( buffer , buf )
294
+ t . alike ( buffer , buf )
272
295
return cb ( )
273
296
}
274
297
buf . writeUInt32BE ( n )
@@ -283,48 +306,51 @@ tape('open and close many times', function (t) {
283
306
}
284
307
} )
285
308
286
- tape ( 'trigger bad open' , function ( t ) {
287
- var file = raf ( gen ( ) , { writable : true } )
309
+ test ( 'trigger bad open' , function ( t ) {
310
+ t . plan ( 3 )
311
+
312
+ const file = new RAF ( gen ( ) , { writable : true } )
288
313
289
314
file . fd = 10000
290
315
file . open ( function ( err ) {
291
316
t . ok ( err , 'should error trying to close old fd' )
292
317
file . open ( function ( err ) {
293
- t . error ( err , 'no error' )
294
- file . destroy ( ( ) => t . end ( ) )
318
+ t . absent ( err , 'no error' )
319
+ file . destroy ( ( ) => t . pass ( ) )
295
320
} )
296
321
} )
297
322
} )
298
323
299
- tape ( 'trigger lock' , function ( t ) {
300
- var p = gen ( )
301
- var file = raf ( p , { writable : true , lock : ( ) => false } )
324
+ test ( 'trigger lock' , function ( t ) {
325
+ t . plan ( 4 )
326
+
327
+ const p = gen ( )
328
+ const file = new RAF ( p , { writable : true , lock : ( ) => false } )
302
329
303
330
file . open ( function ( err ) {
304
331
t . ok ( err , 'should error because it is locked' )
305
- t . same ( err . message , 'ELOCKED: File is locked' )
306
- t . same ( err . path , p )
307
- t . same ( err . code , 'ELOCKED' )
308
- t . end ( )
332
+ t . is ( err . message , 'ELOCKED: File is locked' )
333
+ t . is ( err . path , p )
334
+ t . is ( err . code , 'ELOCKED' )
309
335
} )
310
336
} )
311
337
312
- tape ( 'cannot escape directory' , function ( t ) {
313
- var name = '../../../../../../../../../../../../../tmp'
314
- var file = raf ( name , { writable : true , directory : tmp } )
338
+ test ( 'cannot escape directory' , function ( t ) {
339
+ t . plan ( 2 )
340
+
341
+ const name = '../../../../../../../../../../../../../tmp'
342
+ const file = new RAF ( name , { writable : true , directory : tmp } )
315
343
316
344
file . open ( function ( err ) {
317
- t . error ( err , 'no error' )
318
- t . same ( file . filename , path . join ( tmp , 'tmp' ) )
319
- t . end ( )
345
+ t . absent ( err , 'no error' )
346
+ t . is ( file . filename , path . join ( tmp , 'tmp' ) )
320
347
} )
321
348
} )
322
349
323
- tape ( 'directory filename resolves correctly' , function ( t ) {
324
- var name = 'test.txt'
325
- var file = raf ( name , { writable : true , directory : tmp } )
326
- t . same ( file . filename , path . join ( tmp , name ) )
327
- t . end ( )
350
+ test ( 'directory filename resolves correctly' , function ( t ) {
351
+ const name = 'test.txt'
352
+ const file = new RAF ( name , { writable : true , directory : tmp } )
353
+ t . is ( file . filename , path . join ( tmp , name ) )
328
354
} )
329
355
330
356
function gen ( ) {
0 commit comments