pigeon 0.3.0 → 0.4.0
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.
- data/README.rdoc +36 -60
- data/Rakefile +1 -14
- data/VERSION +1 -1
- data/bin/launcher.example +15 -0
- data/lib/pigeon/dispatcher.rb +93 -0
- data/lib/pigeon/engine.rb +36 -27
- data/lib/pigeon/option_accessor.rb +2 -0
- data/lib/pigeon/processor.rb +66 -0
- data/lib/pigeon/queue.rb +269 -36
- data/lib/pigeon/scheduler.rb +101 -0
- data/lib/pigeon/sorted_array.rb +56 -0
- data/lib/pigeon/support.rb +15 -0
- data/lib/pigeon/task.rb +188 -0
- data/lib/pigeon.rb +9 -1
- data/pigeon.gemspec +29 -12
- data/test/helper.rb +19 -0
- data/test/unit/pigeon_backlog_test.rb +25 -0
- data/test/unit/pigeon_dispatcher_test.rb +62 -0
- data/test/{test_pigeon_engine.rb → unit/pigeon_engine_test.rb} +1 -1
- data/test/{test_pigeon_launcher.rb → unit/pigeon_launcher_test.rb} +1 -1
- data/test/{test_pigeon_option_accessor.rb → unit/pigeon_option_accessor_test.rb} +1 -1
- data/test/unit/pigeon_processor_test.rb +94 -0
- data/test/unit/pigeon_queue_test.rb +197 -0
- data/test/unit/pigeon_scheduler_test.rb +70 -0
- data/test/unit/pigeon_sorted_array_test.rb +52 -0
- data/test/unit/pigeon_task_test.rb +164 -0
- data/test/{test_pigeon.rb → unit/pigeon_test.rb} +1 -1
- metadata +30 -13
- data/test/test_pigeon_queue.rb +0 -29
@@ -0,0 +1,164 @@
|
|
1
|
+
require File.expand_path(File.join(*%w[ .. helper ]), File.dirname(__FILE__))
|
2
|
+
|
3
|
+
class ExampleTask < Pigeon::Task
|
4
|
+
attr_accessor :triggers
|
5
|
+
|
6
|
+
def state_initialized!
|
7
|
+
transition_to_state(:state1)
|
8
|
+
end
|
9
|
+
|
10
|
+
def state_state1!
|
11
|
+
transition_to_state(:state2)
|
12
|
+
end
|
13
|
+
|
14
|
+
def state_state2!
|
15
|
+
transition_to_state(:state3)
|
16
|
+
|
17
|
+
dispatch do
|
18
|
+
sleep(3)
|
19
|
+
transition_to_state(:state4)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def state_state4!
|
24
|
+
transition_to_state(:finished)
|
25
|
+
end
|
26
|
+
|
27
|
+
def after_initialized
|
28
|
+
@triggers = [ :after_initialized ]
|
29
|
+
end
|
30
|
+
|
31
|
+
def before_state(state)
|
32
|
+
@triggers << state
|
33
|
+
end
|
34
|
+
|
35
|
+
def after_finished
|
36
|
+
@triggers << :after_finished
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class FailingTask < Pigeon::Task
|
41
|
+
def state_initialized!
|
42
|
+
invalid_method!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class PigeonTaskTest < Test::Unit::TestCase
|
47
|
+
def test_empty_task
|
48
|
+
engine = Pigeon::Engine.new
|
49
|
+
|
50
|
+
task = Pigeon::Task.new(engine)
|
51
|
+
|
52
|
+
reported = 0
|
53
|
+
|
54
|
+
task.run! do
|
55
|
+
reported = 1
|
56
|
+
end
|
57
|
+
|
58
|
+
assert_eventually(5) do
|
59
|
+
task.finished? and reported > 0
|
60
|
+
end
|
61
|
+
|
62
|
+
assert_equal 1, reported
|
63
|
+
assert_equal :finished, task.state
|
64
|
+
|
65
|
+
assert_equal nil, task.exception
|
66
|
+
|
67
|
+
assert_equal engine.object_id, task.engine.object_id
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_example_task
|
71
|
+
engine = Pigeon::Engine.new
|
72
|
+
|
73
|
+
task = ExampleTask.new(engine)
|
74
|
+
|
75
|
+
callbacks = [ ]
|
76
|
+
|
77
|
+
task.run! do |state|
|
78
|
+
callbacks << state
|
79
|
+
end
|
80
|
+
|
81
|
+
assert_eventually(5) do
|
82
|
+
task.finished?
|
83
|
+
end
|
84
|
+
|
85
|
+
assert_equal nil, task.exception
|
86
|
+
|
87
|
+
assert_equal :finished, task.state
|
88
|
+
|
89
|
+
expected_triggers = [
|
90
|
+
:after_initialized,
|
91
|
+
:initialized,
|
92
|
+
:state1,
|
93
|
+
:state2,
|
94
|
+
:state3,
|
95
|
+
:state4,
|
96
|
+
:finished,
|
97
|
+
:after_finished
|
98
|
+
]
|
99
|
+
|
100
|
+
assert_equal expected_triggers, task.triggers
|
101
|
+
|
102
|
+
expected_callbacks = [
|
103
|
+
:initialized,
|
104
|
+
:state1,
|
105
|
+
:state2,
|
106
|
+
:state3,
|
107
|
+
:state4,
|
108
|
+
:finished
|
109
|
+
]
|
110
|
+
|
111
|
+
assert_equal expected_callbacks, callbacks
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_failing_task
|
115
|
+
engine = Pigeon::Engine.new
|
116
|
+
|
117
|
+
task = FailingTask.new(engine)
|
118
|
+
|
119
|
+
reported = false
|
120
|
+
|
121
|
+
task.run! do
|
122
|
+
reported = true
|
123
|
+
end
|
124
|
+
|
125
|
+
assert_eventually(5) do
|
126
|
+
task.failed? and reported
|
127
|
+
end
|
128
|
+
|
129
|
+
assert task.exception?
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_block_notification
|
133
|
+
engine = Pigeon::Engine.new
|
134
|
+
|
135
|
+
task = Pigeon::Task.new(engine)
|
136
|
+
|
137
|
+
states_triggered = [ ]
|
138
|
+
|
139
|
+
task.run! do |state|
|
140
|
+
states_triggered << state
|
141
|
+
end
|
142
|
+
|
143
|
+
assert_eventually(5) do
|
144
|
+
task.finished?
|
145
|
+
end
|
146
|
+
|
147
|
+
assert_equal [ :initialized, :finished ], states_triggered
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_priority_order
|
151
|
+
engine = Pigeon::Engine.new
|
152
|
+
|
153
|
+
tasks = (0..10).collect do
|
154
|
+
task = Pigeon::Task.new(engine)
|
155
|
+
|
156
|
+
# Trigger generation of default priority value
|
157
|
+
task.priority
|
158
|
+
|
159
|
+
task
|
160
|
+
end
|
161
|
+
|
162
|
+
assert_equal tasks.collect(&:object_id), tasks.sort.collect(&:object_id)
|
163
|
+
end
|
164
|
+
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 4
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- tadman
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-11-09 00:00:00 -05:00
|
18
18
|
default_executable: launcher.example
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -48,20 +48,31 @@ files:
|
|
48
48
|
- VERSION
|
49
49
|
- bin/launcher.example
|
50
50
|
- lib/pigeon.rb
|
51
|
+
- lib/pigeon/dispatcher.rb
|
51
52
|
- lib/pigeon/engine.rb
|
52
53
|
- lib/pigeon/launcher.rb
|
53
54
|
- lib/pigeon/logger.rb
|
54
55
|
- lib/pigeon/option_accessor.rb
|
55
56
|
- lib/pigeon/pidfile.rb
|
57
|
+
- lib/pigeon/processor.rb
|
56
58
|
- lib/pigeon/queue.rb
|
59
|
+
- lib/pigeon/scheduler.rb
|
60
|
+
- lib/pigeon/sorted_array.rb
|
57
61
|
- lib/pigeon/support.rb
|
62
|
+
- lib/pigeon/task.rb
|
58
63
|
- pigeon.gemspec
|
59
64
|
- test/helper.rb
|
60
|
-
- test/
|
61
|
-
- test/
|
62
|
-
- test/
|
63
|
-
- test/
|
64
|
-
- test/
|
65
|
+
- test/unit/pigeon_backlog_test.rb
|
66
|
+
- test/unit/pigeon_dispatcher_test.rb
|
67
|
+
- test/unit/pigeon_engine_test.rb
|
68
|
+
- test/unit/pigeon_launcher_test.rb
|
69
|
+
- test/unit/pigeon_option_accessor_test.rb
|
70
|
+
- test/unit/pigeon_processor_test.rb
|
71
|
+
- test/unit/pigeon_queue_test.rb
|
72
|
+
- test/unit/pigeon_scheduler_test.rb
|
73
|
+
- test/unit/pigeon_sorted_array_test.rb
|
74
|
+
- test/unit/pigeon_task_test.rb
|
75
|
+
- test/unit/pigeon_test.rb
|
65
76
|
has_rdoc: true
|
66
77
|
homepage: http://github.com/tadman/pigeon
|
67
78
|
licenses: []
|
@@ -96,8 +107,14 @@ specification_version: 3
|
|
96
107
|
summary: Simple daemonized EventMachine engine framework with plug-in support
|
97
108
|
test_files:
|
98
109
|
- test/helper.rb
|
99
|
-
- test/
|
100
|
-
- test/
|
101
|
-
- test/
|
102
|
-
- test/
|
103
|
-
- test/
|
110
|
+
- test/unit/pigeon_backlog_test.rb
|
111
|
+
- test/unit/pigeon_dispatcher_test.rb
|
112
|
+
- test/unit/pigeon_engine_test.rb
|
113
|
+
- test/unit/pigeon_launcher_test.rb
|
114
|
+
- test/unit/pigeon_option_accessor_test.rb
|
115
|
+
- test/unit/pigeon_processor_test.rb
|
116
|
+
- test/unit/pigeon_queue_test.rb
|
117
|
+
- test/unit/pigeon_scheduler_test.rb
|
118
|
+
- test/unit/pigeon_sorted_array_test.rb
|
119
|
+
- test/unit/pigeon_task_test.rb
|
120
|
+
- test/unit/pigeon_test.rb
|
data/test/test_pigeon_queue.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
require File.expand_path(File.join(*%w[ helper ]), File.dirname(__FILE__))
|
2
|
-
|
3
|
-
class PigeonQueueTest < Test::Unit::TestCase
|
4
|
-
def test_simple_queue
|
5
|
-
queue = Pigeon::Queue.new
|
6
|
-
|
7
|
-
checks = { }
|
8
|
-
|
9
|
-
count = 1000
|
10
|
-
|
11
|
-
count.times do |n|
|
12
|
-
queue.perform do
|
13
|
-
x = 0
|
14
|
-
10_000.times { x += 1 }
|
15
|
-
checks[n] = true
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
while (!queue.empty?)
|
20
|
-
sleep(1)
|
21
|
-
end
|
22
|
-
|
23
|
-
assert queue.empty?
|
24
|
-
assert_equal [ ], queue.exceptions
|
25
|
-
assert !queue.exceptions?
|
26
|
-
|
27
|
-
assert_equal (0..count - 1).to_a, checks.keys.sort
|
28
|
-
end
|
29
|
-
end
|