fileq 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,218 @@
1
+
2
+ class FileQJobTests < Test::Unit::TestCase
3
+
4
+ def setup
5
+ @fq = Xxeo::FileQ.new('test', {:dir => 'test/test_fq'})
6
+ @fq.create_queue_dirs
7
+
8
+ @tmp_fname1 = 'tmp_file1'
9
+ @tmp_name1 = 'test/test_fq/' + @tmp_fname1
10
+ @data1 = "blah blah1\nblah blah1\n"
11
+ File.open(@tmp_name1, "w") { |f| f.write(@data1) }
12
+
13
+ @tmp_fname2 = 'tmp_file2'
14
+ @tmp_name2 = 'test/test_fq/' + @tmp_fname2
15
+ @data2 = "blah blah2\nblah blah2\n"
16
+ File.open(@tmp_name2, "w") { |f| f.write(@data2) }
17
+
18
+ @job1 = @fq.insert_data('This is a test')
19
+ @job2 = @fq.insert_file(@tmp_name1)
20
+ @job3 = @fq.insert_file(@tmp_name2)
21
+ end
22
+
23
+ def teardown
24
+ FileUtils.rm_rf 'test/test_fq'
25
+ end
26
+
27
+ def test_status_getter_plain
28
+ assert_equal(@job1.status, Xxeo::ST_QUEUED)
29
+ assert_equal(@job2.status, Xxeo::ST_QUEUED)
30
+ assert_equal(@job3.status, Xxeo::ST_QUEUED)
31
+ end
32
+
33
+ def test_pull_job
34
+ job1 = @fq.pull_job(@job1.name)
35
+ assert(job1)
36
+ end
37
+
38
+ def test_pull_job_via_instance
39
+ assert(@job1.pull)
40
+ end
41
+
42
+
43
+ # This is a rare case, the typical cycle is
44
+ # Process 1 -> insert into que
45
+ # Process 2 -> pull from que, mark_done/err
46
+ def test_pull_job_via_instance_twice
47
+ assert(@job1.pull)
48
+ assert(@job1.pull)
49
+ end
50
+
51
+ def test_pull_job_via_instance_fail
52
+ assert(@job1.pull)
53
+ @job1.mark_done
54
+ assert(!@job1.pull)
55
+ end
56
+
57
+ def test_status_mesg_setter_bad
58
+ assert_raise Xxeo::WrongStatus do
59
+ @job1.status_mesg = 'blah'
60
+ end
61
+ assert_raise Xxeo::WrongStatus do
62
+ @job1.mark_done
63
+ end
64
+ end
65
+
66
+ def test_status_mesg_setter
67
+ assert(@job1.pull)
68
+ @job1.status_mesg = 'pushing now'
69
+
70
+ assert_equal(@job1.status_mesg, 'pushing now')
71
+ end
72
+
73
+ def test_logger
74
+ assert(@job1.pull)
75
+ assert(@job1.log('doing push now'))
76
+ end
77
+
78
+ def test_log_reader
79
+ assert(@job1.pull)
80
+ assert(@job1.log('doing push now'))
81
+ assert_match(/ doing push now$/, @job1.read_log)
82
+ end
83
+
84
+ def test_mark_done
85
+ @job1.pull
86
+ @job1.mark_done
87
+
88
+ assert_equal(@job1.status, Xxeo::ST_DONE)
89
+ assert_equal(@job2.status, Xxeo::ST_QUEUED)
90
+ assert_equal(@job3.status, Xxeo::ST_QUEUED)
91
+
92
+ assert_equal({:done => 1, :que => 2}, @fq.all_lengths)
93
+
94
+ assert_equal(2, @fq.length)
95
+ end
96
+
97
+ def test_mark_err
98
+ @job1.pull
99
+ @job1.mark_error
100
+
101
+ assert_equal(@job1.status, Xxeo::ST_ERROR)
102
+ assert_equal(@job2.status, Xxeo::ST_QUEUED)
103
+ assert_equal(@job3.status, Xxeo::ST_QUEUED)
104
+
105
+ assert_equal({:que => 2, :_err => 1}, @fq.all_lengths)
106
+
107
+ assert_equal(2, @fq.length)
108
+ end
109
+
110
+ def test_reinsert
111
+ @job1.pull
112
+ @job1.reinsert
113
+
114
+ assert_equal(@job1.status, Xxeo::ST_QUEUED)
115
+ assert_equal(@job2.status, Xxeo::ST_QUEUED)
116
+ assert_equal(@job3.status, Xxeo::ST_QUEUED)
117
+
118
+ assert_equal({:que => 3 }, @fq.all_lengths)
119
+
120
+ assert_equal(3, @fq.length)
121
+ end
122
+
123
+ def test_owning_pid1
124
+ @job1.pull
125
+
126
+ @job2.pull
127
+ @job2.mark_done
128
+
129
+ @job3.pull
130
+ @job3.mark_done
131
+
132
+ assert_equal(@job1.owning_pid, $$)
133
+ assert_equal(@job2.owning_pid, nil)
134
+ assert_equal(@job3.owning_pid, nil)
135
+ end
136
+
137
+ def test_owning_pid2
138
+ @job1.pull
139
+
140
+ assert_equal(@job1.owning_pid, $$)
141
+ assert_equal(@job2.owning_pid, nil)
142
+ assert_equal(@job3.owning_pid, nil)
143
+ end
144
+
145
+ def test_own_yes
146
+ @job1.pull
147
+
148
+ @job2.pull
149
+ @job2.mark_done
150
+
151
+ @job3.pull
152
+ @job3.mark_done
153
+
154
+ assert(@job1.own?)
155
+ assert(!@job2.own?)
156
+ assert(!@job3.own?)
157
+ end
158
+
159
+ def test_own_not
160
+ @job1.pull
161
+
162
+ @job2.pull
163
+ @job2.mark_done
164
+
165
+ @job3.pull
166
+ @job3.mark_done
167
+
168
+ job1 = @fq.find_job(@job1.name)
169
+ job2 = @fq.find_job(@job2.name)
170
+ job3 = @fq.find_job(@job3.name)
171
+
172
+ assert(!job1.own?)
173
+ assert(!job2.own?)
174
+ assert(!job3.own?)
175
+ end
176
+
177
+
178
+ def test_status_all1
179
+ @job1.pull
180
+
181
+ @job2.pull
182
+ @job2.mark_error
183
+
184
+ @job3.pull
185
+ @job3.mark_done
186
+
187
+ assert_equal(@job1.status_all, [Xxeo::ST_RUN, $$, ''])
188
+ assert_equal(@job2.status_all, [Xxeo::ST_ERROR, nil, ''])
189
+ assert_equal(@job3.status_all, [Xxeo::ST_DONE, nil, ''])
190
+ end
191
+
192
+ def test_status_all2
193
+ @job1.pull
194
+ assert_equal(@job1.status_all, [Xxeo::ST_RUN, $$, ''])
195
+ assert_equal(@job2.status_all, [Xxeo::ST_QUEUED, nil, ''])
196
+ assert_equal(@job3.status_all, [Xxeo::ST_QUEUED, nil, ''])
197
+ end
198
+
199
+ # TODO: test a crash and cleanup
200
+ # TODO: test a fork and owning pid of different process
201
+
202
+ def test_is_file
203
+ assert(!@job1.is_file?)
204
+ assert(@job2.is_file?)
205
+ assert(@job3.is_file?)
206
+ end
207
+
208
+ def test_file_original_name
209
+ assert(@job2.is_file?)
210
+ assert_equal(@job2.original_pathname, @tmp_name2)
211
+ end
212
+
213
+ def test_file_original_name
214
+ assert(!@job1.is_file?)
215
+ assert_equal(@job1.original_pathname, nil)
216
+ end
217
+
218
+ end
@@ -0,0 +1,365 @@
1
+
2
+ class FileQQueueTests < Test::Unit::TestCase
3
+
4
+ def setup
5
+ @fq = Xxeo::FileQ.new('test', {:dir => 'test/test_fq'})
6
+ @fq.create_queue_dirs
7
+
8
+ @tmp_fname1 = 'tmp_file1'
9
+ @tmp_name1 = 'test/test_fq/' + @tmp_fname1
10
+ @data1 = "blah blah1\nblah blah1\n"
11
+ File.open(@tmp_name1, "w") { |f| f.write(@data1) }
12
+
13
+ @tmp_fname2 = 'tmp_file2'
14
+ @tmp_name2 = 'test/test_fq/' + @tmp_fname2
15
+ @data2 = "blah blah2\nblah blah2\n"
16
+ File.open(@tmp_name2, "w") { |f| f.write(@data2) }
17
+ end
18
+
19
+ def teardown
20
+ FileUtils.rm_rf 'test/test_fq'
21
+ end
22
+
23
+ def test_error_log
24
+ @fq.log('busted')
25
+ msgs = @fq.read_log
26
+ assert_match(/ busted$/, msgs)
27
+ end
28
+
29
+ def test_insert_data
30
+ assert_equal(0, @fq.length)
31
+
32
+ job1 = @fq.insert_data('This is a test')
33
+ assert(job1, 'invalid job1: nil : ' + @fq.read_log)
34
+
35
+ y = @fq.all_lengths
36
+ assert_equal({:que => 1}, y) #@fq.all_lengths)
37
+
38
+ assert_equal(1, @fq.length)
39
+ return
40
+ end
41
+
42
+ def test_multi_insert_data
43
+ job1 = @fq.insert_data('This is a test1')
44
+ assert(job1, 'invalid job1: false : ' + @fq.read_log)
45
+
46
+ job2 = @fq.insert_data('This is a test2')
47
+ assert(job2, 'invalid job2: false : ' + @fq.read_log)
48
+
49
+ assert_equal({:que => 2}, @fq.all_lengths)
50
+
51
+ assert_equal(2, @fq.length)
52
+ end
53
+
54
+ # assert(FileTest.zero?('test/test_fq/_lock'))
55
+ # assert(FileTest.zero?('test/test_fq/_log'))
56
+ # assert_equal(0, Dir.glob('test/test_fq/_tmp/*').length, Dir.glob('test/test_fq/_tmp'))
57
+ # assert_equal(1, Dir.glob('test/test_fq/que/*').length)
58
+ # assert_equal(0, Dir.glob('test/test_fq/run/*').length)
59
+ # assert_equal(0, Dir.glob('test/test_fq/pause/*').length)
60
+ # assert_equal(0, Dir.glob('test/test_fq/done/*').length)
61
+ # assert_equal(0, Dir.glob('test/test_fq/_err/*').length)
62
+
63
+ def test_insert_file
64
+ job1 = @fq.insert_file(@tmp_name1)
65
+ assert(job1, 'invalid job1: false : ' + @fq.read_log)
66
+
67
+ assert_equal({:que => 1}, @fq.all_lengths)
68
+
69
+ assert_equal(1, @fq.length)
70
+ end
71
+
72
+ def test_file_original_name
73
+ job1 = @fq.insert_file(@tmp_name1)
74
+ assert(job1, 'invalid job1: false : ' + @fq.read_log)
75
+
76
+ assert_equal(job1.original_pathname, @tmp_name1)
77
+
78
+ assert_equal(1, @fq.length)
79
+ end
80
+
81
+
82
+ def test_multi_insert_file
83
+ job1 = @fq.insert_file(@tmp_name1)
84
+ assert(job1, 'invalid job1: false : ' + @fq.read_log)
85
+
86
+ job2 = @fq.insert_file(@tmp_name2)
87
+ assert(job2, 'invalid job2: false : ' + @fq.read_log)
88
+
89
+ assert_equal({:que => 2}, @fq.all_lengths)
90
+
91
+ assert_equal(2, @fq.length)
92
+ end
93
+
94
+ def test_pull_none
95
+ assert_equal(0, @fq.length)
96
+
97
+ job = @fq.pull_job
98
+ assert_equal(nil, job)
99
+ end
100
+
101
+ def test_pull_none_by_id
102
+ assert_equal(0, @fq.length)
103
+
104
+ job = @fq.pull_job('slslslslsl')
105
+ assert_equal(nil, job)
106
+ end
107
+
108
+
109
+ # Test queueing
110
+
111
+ def test_insert_pull_data_top_of_queue
112
+ job1 = @fq.insert_data('This is a test 1')
113
+ assert(job1.name, 'invalid job1: false : ' + @fq.read_log)
114
+ job2 = @fq.insert_data('This is a test 2')
115
+ assert(job1.name, 'invalid job2: false : ' + @fq.read_log)
116
+
117
+ job = @fq.pull_job()
118
+
119
+ assert_equal(job.name, job.name)
120
+
121
+ assert_equal(job.data, 'This is a test 1')
122
+
123
+ assert_equal(job.status, Xxeo::ST_RUN)
124
+ assert_equal(1, @fq.length)
125
+ assert_equal({:que => 1, :run => 1}, @fq.all_lengths)
126
+
127
+ job.mark_done
128
+
129
+ assert_equal(job.status, Xxeo::ST_DONE)
130
+ assert_equal(1, @fq.length)
131
+ assert_equal({:que => 1, :done => 1}, @fq.all_lengths)
132
+ end
133
+
134
+ def test_pull_by_wrong_id
135
+ job1 = @fq.insert_data('This is a test 1')
136
+ assert(job1.name, 'invalid job1: false : ' + @fq.read_log)
137
+ job2 = @fq.insert_data('This is a test 2')
138
+ assert(job1.name, 'invalid job2: false : ' + @fq.read_log)
139
+
140
+ assert_equal(2, @fq.length)
141
+
142
+ job = @fq.pull_job('slslslslsl')
143
+ assert_equal(nil, job)
144
+ end
145
+
146
+ def test_insert_pull_data_by_id
147
+ job1 = @fq.insert_data('This is a test 1')
148
+ assert(job1.name, 'invalid job1 false : ' + @fq.read_log)
149
+ job2 = @fq.insert_data('This is a test 2')
150
+ assert(job2.name, 'invalid job2 false : ' + @fq.read_log)
151
+
152
+ job = @fq.pull_job(job1.name)
153
+
154
+ assert_equal(job.name, job1.name)
155
+
156
+ assert_equal(job.data, 'This is a test 1')
157
+
158
+ assert_equal(job.status, Xxeo::ST_RUN)
159
+ assert_equal(1, @fq.length)
160
+ assert_equal({:que => 1, :run => 1}, @fq.all_lengths)
161
+
162
+ job.mark_done
163
+
164
+ assert_equal(job.status, Xxeo::ST_DONE)
165
+ assert_equal(1, @fq.length)
166
+ assert_equal({:que => 1, :done => 1}, @fq.all_lengths)
167
+ end
168
+
169
+
170
+ def test_insert_pull_file
171
+ job1 = @fq.insert_file(@tmp_name1)
172
+ assert(job1.name, 'invalid job1 false : ' + @fq.read_log)
173
+ job2 = @fq.insert_file(@tmp_name2)
174
+ assert(job2.name, 'invalid job2: false : ' + @fq.read_log)
175
+
176
+ assert_equal(2, @fq.length)
177
+
178
+ job = @fq.pull_job()
179
+
180
+ assert_equal(job1.name, job.name)
181
+
182
+ assert_equal(job.data, @data1)
183
+ assert(job.is_file?)
184
+ assert(job.original_pathname, @tmp_name1)
185
+
186
+ assert_equal(job.status, Xxeo::ST_RUN)
187
+ assert_equal(1, @fq.length)
188
+ assert_equal({:que => 1, :run => 1 }, @fq.all_lengths)
189
+
190
+ job.mark_done
191
+
192
+ assert_equal(job.status, Xxeo::ST_DONE)
193
+ assert_equal(1, @fq.length)
194
+ assert_equal({:que => 1, :done => 1}, @fq.all_lengths)
195
+ end
196
+
197
+ def test_insert_pull_file_by_id1
198
+ job1 = @fq.insert_file(@tmp_name1)
199
+ assert(job1.name, 'invalid job1 false : ' + @fq.read_log)
200
+ job2 = @fq.insert_file(@tmp_name2)
201
+ assert(job2.name, 'invalid job2: false : ' + @fq.read_log)
202
+
203
+ assert_equal(2, @fq.length)
204
+
205
+ job = @fq.pull_job(job1.name)
206
+
207
+ assert_equal(job1.name, job.name)
208
+
209
+ assert_equal(job.data, @data1)
210
+
211
+ assert_equal(job.status, Xxeo::ST_RUN)
212
+ assert_equal(1, @fq.length)
213
+ assert_equal({:que => 1, :run => 1}, @fq.all_lengths)
214
+
215
+ job.mark_done
216
+
217
+ assert_equal(job.status, Xxeo::ST_DONE)
218
+ assert_equal(1, @fq.length)
219
+ assert_equal({:que => 1, :done => 1}, @fq.all_lengths)
220
+ end
221
+
222
+ def test_insert_pull_file_by_id2
223
+ job1 = @fq.insert_file(@tmp_name1)
224
+ assert(job1.name, 'invalid job1 false : ' + @fq.read_log)
225
+ job2 = @fq.insert_file(@tmp_name2)
226
+ assert(job2.name, 'invalid job2: false : ' + @fq.read_log)
227
+
228
+ assert_equal(2, @fq.length)
229
+
230
+ job = @fq.pull_job(job2.name)
231
+
232
+ assert_equal(job2.name, job.name)
233
+
234
+ assert_equal(job.data, @data2)
235
+
236
+ assert_equal(job.status, Xxeo::ST_RUN)
237
+ assert_equal(1, @fq.length)
238
+ assert_equal({:que => 1, :run => 1}, @fq.all_lengths)
239
+
240
+ job.mark_done
241
+
242
+ assert_equal(job.status, Xxeo::ST_DONE)
243
+ assert_equal(1, @fq.length)
244
+ assert_equal({:que => 1, :done => 1}, @fq.all_lengths)
245
+ end
246
+
247
+ def test_insert_pull_data_and_file
248
+ job1 = @fq.insert_data('This is a test 1')
249
+ assert(job1, 'invalid job1: ' + @fq.read_log)
250
+ job2 = @fq.insert_file(@tmp_name1)
251
+ assert(job2, 'invalid job2: ' + @fq.read_log)
252
+ job3 = @fq.insert_data('This is a test 2')
253
+ assert(job3, 'invalid job3: ' + @fq.read_log)
254
+ job4 = @fq.insert_file(@tmp_name2)
255
+ assert(job4, 'invalid job4: ' + @fq.read_log)
256
+
257
+ assert_equal(4, @fq.length)
258
+
259
+ jobX1 = @fq.pull_job
260
+ assert(jobX1, 'invalid jobX1: ' + @fq.read_log)
261
+ assert_equal(job1.name, jobX1.name)
262
+
263
+ assert_equal(jobX1.data, 'This is a test 1')
264
+ assert_equal(jobX1.status, Xxeo::ST_RUN)
265
+ assert_equal(3, @fq.length)
266
+ assert_equal({:que => 3, :run => 1}, @fq.all_lengths)
267
+ jobX1.mark_done
268
+ assert_equal(jobX1.status, Xxeo::ST_DONE)
269
+
270
+ jobX2 = @fq.pull_job()
271
+ assert_equal(job2.name, jobX2.name)
272
+
273
+ assert_equal(jobX2.data, @data1)
274
+ assert_equal(jobX2.status, Xxeo::ST_RUN)
275
+ assert_equal(2, @fq.length)
276
+ assert_equal({:run => 1, :que => 2, :done => 1}, @fq.all_lengths)
277
+ jobX2.mark_done
278
+ assert_equal(jobX1.status, Xxeo::ST_DONE)
279
+
280
+ jobX3 = @fq.pull_job()
281
+ assert_equal(job3.name, jobX3.name)
282
+
283
+ assert_equal(jobX3.data, 'This is a test 2')
284
+ assert_equal(jobX3.status, Xxeo::ST_RUN)
285
+ assert_equal(1, @fq.length)
286
+ assert_equal({:run => 1, :que => 1, :done => 2}, @fq.all_lengths)
287
+ jobX3.mark_done
288
+ assert_equal(jobX3.status, Xxeo::ST_DONE)
289
+
290
+ jobX4 = @fq.pull_job()
291
+ assert_equal(job4.name, jobX4.name)
292
+
293
+ assert_equal(jobX4.data, @data2)
294
+ assert_equal(jobX4.status, Xxeo::ST_RUN)
295
+ assert_equal(0, @fq.length)
296
+ assert_equal({:run => 1, :done => 3}, @fq.all_lengths)
297
+ jobX4.mark_done
298
+ assert_equal(jobX4.status, Xxeo::ST_DONE)
299
+
300
+ assert_equal(0, @fq.length)
301
+ assert_equal({:done => 4}, @fq.all_lengths)
302
+
303
+ end
304
+
305
+ def test_insert_pull_data_and_file_by_id
306
+ job1 = @fq.insert_data('This is a test 1')
307
+ assert(job1, 'invalid job1: false : ' + @fq.read_log)
308
+ job2 = @fq.insert_file(@tmp_name1)
309
+ assert(job2, 'invalid job2: false : ' + @fq.read_log)
310
+ job3 = @fq.insert_data('This is a test 2')
311
+ assert(job3, 'invalid job3: false : ' + @fq.read_log)
312
+ job4 = @fq.insert_file(@tmp_name2)
313
+ assert(job4, 'invalid job4: false : ' + @fq.read_log)
314
+
315
+ assert_equal(4, @fq.length)
316
+
317
+ # How do we pull items from the queue?
318
+ # Multiple consumers could happen
319
+ jobX1 = @fq.pull_job(job1.name)
320
+ assert_equal(job1.name, jobX1.name)
321
+
322
+ assert_equal(jobX1.data, 'This is a test 1')
323
+ assert_equal(jobX1.status, Xxeo::ST_RUN)
324
+ assert_equal(3, @fq.length)
325
+ assert_equal({:que => 3, :run => 1}, @fq.all_lengths)
326
+ jobX1.mark_done
327
+ assert_equal(jobX1.status, Xxeo::ST_DONE)
328
+
329
+ jobX2 = @fq.pull_job(job2.name)
330
+ assert_equal(job2.name, jobX2.name)
331
+
332
+ assert_equal(jobX2.data, @data1)
333
+ assert_equal(jobX2.status, Xxeo::ST_RUN)
334
+ assert_equal(2, @fq.length)
335
+ assert_equal({:done => 1, :que => 2, :run => 1}, @fq.all_lengths)
336
+ jobX2.mark_done
337
+ assert_equal(jobX1.status, Xxeo::ST_DONE)
338
+
339
+ jobX3 = @fq.pull_job(job3.name)
340
+ assert_equal(job3.name, jobX3.name)
341
+
342
+ assert_equal(jobX3.data, 'This is a test 2')
343
+ assert_equal(jobX3.status, Xxeo::ST_RUN)
344
+ assert_equal(1, @fq.length)
345
+ assert_equal({:done => 2, :que => 1, :run => 1}, @fq.all_lengths)
346
+ jobX3.mark_done
347
+ assert_equal(jobX3.status, Xxeo::ST_DONE)
348
+
349
+ jobX4 = @fq.pull_job(job4.name)
350
+ assert_equal(job4.name, jobX4.name)
351
+
352
+ assert_equal(jobX4.data, @data2)
353
+ assert_equal(jobX4.status, Xxeo::ST_RUN)
354
+ assert_equal(0, @fq.length)
355
+ assert_equal({:done => 3, :run => 1}, @fq.all_lengths)
356
+ jobX4.mark_done
357
+ assert_equal(jobX4.status, Xxeo::ST_DONE)
358
+
359
+ assert_equal(0, @fq.length)
360
+ assert_equal({:done => 4}, @fq.all_lengths)
361
+
362
+ end
363
+
364
+
365
+ end