merb_whenever 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,178 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class OutputAtTest < Test::Unit::TestCase
4
+
5
+ context "weekday at a (single) given time" do
6
+ setup do
7
+ @output = Whenever.cron \
8
+ <<-file
9
+ every "weekday", :at => '5:02am' do
10
+ command "blahblah"
11
+ end
12
+ file
13
+ end
14
+
15
+ should "output the command using that time" do
16
+ assert_match '2 5 * * 1-5 blahblah', @output
17
+ end
18
+ end
19
+
20
+ context "weekday at a multiple diverse times, via an array" do
21
+ setup do
22
+ @output = Whenever.cron \
23
+ <<-file
24
+ every "weekday", :at => %w(5:02am 3:52pm) do
25
+ command "blahblah"
26
+ end
27
+ file
28
+ end
29
+
30
+ should "output the commands for both times given" do
31
+ assert_match '2 5 * * 1-5 blahblah', @output
32
+ assert_match '52 15 * * 1-5 blahblah', @output
33
+ end
34
+ end
35
+
36
+ context "weekday at a multiple diverse times, comma separated" do
37
+ setup do
38
+ @output = Whenever.cron \
39
+ <<-file
40
+ every "weekday", :at => '5:02am, 3:52pm' do
41
+ command "blahblah"
42
+ end
43
+ file
44
+ end
45
+
46
+ should "output the commands for both times given" do
47
+ assert_match '2 5 * * 1-5 blahblah', @output
48
+ assert_match '52 15 * * 1-5 blahblah', @output
49
+ end
50
+ end
51
+
52
+ context "weekday at a multiple aligned times" do
53
+ setup do
54
+ @output = Whenever.cron \
55
+ <<-file
56
+ every "weekday", :at => '5:02am, 3:02pm' do
57
+ command "blahblah"
58
+ end
59
+ file
60
+ end
61
+
62
+ should "output the command using one entry because the times are aligned" do
63
+ assert_match '2 5,15 * * 1-5 blahblah', @output
64
+ end
65
+ end
66
+
67
+ context "various days at a various aligned times" do
68
+ setup do
69
+ @output = Whenever.cron \
70
+ <<-file
71
+ every "mon,wed,fri", :at => '5:02am, 3:02pm' do
72
+ command "blahblah"
73
+ end
74
+ file
75
+ end
76
+
77
+ should "output the command using one entry because the times are aligned" do
78
+ assert_match '2 5,15 * * 1,3,5 blahblah', @output
79
+ end
80
+ end
81
+
82
+ context "various days at a various aligned times using a runner" do
83
+ setup do
84
+ @output = Whenever.cron \
85
+ <<-file
86
+ set :path, '/your/path'
87
+ every "mon,wed,fri", :at => '5:02am, 3:02pm' do
88
+ runner "blahblah"
89
+ end
90
+ file
91
+ end
92
+
93
+ should "output the runner using one entry because the times are aligned" do
94
+ assert_match '2 5,15 * * 1,3,5 /your/path/script/runner -e production "blahblah"', @output
95
+ end
96
+ end
97
+
98
+ context "various days at a various aligned times using a rake task" do
99
+ setup do
100
+ @output = Whenever.cron \
101
+ <<-file
102
+ set :path, '/your/path'
103
+ every "mon,wed,fri", :at => '5:02am, 3:02pm' do
104
+ rake "blah:blah"
105
+ end
106
+ file
107
+ end
108
+
109
+ should "output the rake task using one entry because the times are aligned" do
110
+ assert_match '2 5,15 * * 1,3,5 cd /your/path && RAILS_ENV=production /usr/bin/env rake blah:blah', @output
111
+ end
112
+ end
113
+
114
+ context "A command every 1.month at very diverse times" do
115
+ setup do
116
+ @output = Whenever.cron \
117
+ <<-file
118
+ every [1.month, 1.day], :at => 'january 5:02am, june 17th at 2:22pm, june 3rd at 3:33am' do
119
+ command "blahblah"
120
+ end
121
+ file
122
+ end
123
+
124
+ should "output 6 commands since none align" do
125
+ # The 1.month commands
126
+ assert_match '2 5 1 * * blahblah', @output
127
+ assert_match '22 14 17 * * blahblah', @output
128
+ assert_match '33 3 3 * * blahblah', @output
129
+
130
+ # The 1.day commands
131
+ assert_match '2 5 * * * blahblah', @output
132
+ assert_match '22 14 * * * blahblah', @output
133
+ assert_match '33 3 * * * blahblah', @output
134
+ end
135
+ end
136
+
137
+ context "Multiple commands output every :reboot" do
138
+ setup do
139
+ @output = Whenever.cron \
140
+ <<-file
141
+ every :reboot do
142
+ command "command_1"
143
+ command "command_2"
144
+ end
145
+ file
146
+ end
147
+
148
+ should "output both commands @reboot" do
149
+ assert_match "@reboot command_1", @output
150
+ assert_match "@reboot command_2", @output
151
+ end
152
+ end
153
+
154
+ context "Many different job types output every :day" do
155
+ setup do
156
+ @output = Whenever.cron \
157
+ <<-file
158
+ set :path, '/your/path'
159
+ every :day do
160
+ rake "blah:blah"
161
+ runner "runner_1"
162
+ command "command_1"
163
+ runner "runner_2"
164
+ command "command_2"
165
+ end
166
+ file
167
+ end
168
+
169
+ should "output all of the commands @daily" do
170
+ assert_match '@daily cd /your/path && RAILS_ENV=production /usr/bin/env rake blah:blah', @output
171
+ assert_match '@daily /your/path/script/runner -e production "runner_1"', @output
172
+ assert_match '@daily command_1', @output
173
+ assert_match '@daily /your/path/script/runner -e production "runner_2"', @output
174
+ assert_match '@daily command_2', @output
175
+ end
176
+ end
177
+
178
+ end
@@ -0,0 +1,37 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class OutputCommandTest < Test::Unit::TestCase
4
+
5
+ context "A plain command" do
6
+ setup do
7
+ @output = Whenever.cron \
8
+ <<-file
9
+ every 2.hours do
10
+ command "blahblah"
11
+ end
12
+ file
13
+ end
14
+
15
+ should "output the command" do
16
+ assert_match /^.+ .+ .+ .+ blahblah$/, @output
17
+ end
18
+ end
19
+
20
+ context "An every statement with two commands in it" do
21
+ setup do
22
+ @output = Whenever.cron \
23
+ <<-file
24
+ every 1.hour do
25
+ command "first"
26
+ command "second"
27
+ end
28
+ file
29
+ end
30
+
31
+ should "output both commands" do
32
+ assert_match "0 * * * * first", @output
33
+ assert_match "0 * * * * second", @output
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,56 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class OutputEnvTest < Test::Unit::TestCase
4
+
5
+ context "The output from Whenever with environment variables set" do
6
+ setup do
7
+ @output = Whenever.cron \
8
+ <<-file
9
+ env :MYVAR, 'blah'
10
+ env 'MAILTO', "someone@example.com"
11
+ file
12
+ end
13
+
14
+ should "output MYVAR environment variable" do
15
+ assert_match "MYVAR=blah", @output
16
+ end
17
+
18
+ should "output MAILTO environment variable" do
19
+ assert_match "MAILTO=someone@example.com", @output
20
+ end
21
+ end
22
+
23
+ context "No PATH environment variable set" do
24
+ setup do
25
+ Whenever::JobList.any_instance.expects(:read_path).at_least_once.returns('/usr/local/bin')
26
+ @output = Whenever.cron ""
27
+ end
28
+
29
+ should "add a PATH variable based on the user's PATH" do
30
+ assert_match "PATH=/usr/local/bin", @output
31
+ end
32
+ end
33
+
34
+ context "A PATH environment variable set" do
35
+ setup do
36
+ Whenever::JobList.stubs(:read_path).returns('/usr/local/bin')
37
+ @output = Whenever.cron "env :PATH, '/my/path'"
38
+ end
39
+
40
+ should "use that path and the user's PATH" do
41
+ assert_match "PATH=/my/path", @output
42
+ assert_no_match /local/, @output
43
+ end
44
+ end
45
+
46
+ context "No PATH set and instructed not to automatically load the user's path" do
47
+ setup do
48
+ @output = Whenever.cron "set :set_path_automatically, false"
49
+ end
50
+
51
+ should "not have a PATH set" do
52
+ assert_no_match /PATH/, @output
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,74 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class OutputRakeTest < Test::Unit::TestCase
4
+
5
+ # Rake are generated in an almost identical way to runners so we
6
+ # only need some basic tests to ensure they are output correctly
7
+
8
+ context "A rake command with path set" do
9
+ setup do
10
+ @output = Whenever.cron \
11
+ <<-file
12
+ set :path, '/my/path'
13
+ every 2.hours do
14
+ rake "blahblah"
15
+ end
16
+ file
17
+ end
18
+
19
+ should "output the rake command using that path" do
20
+ assert_match two_hours + ' cd /my/path && RAILS_ENV=production /usr/bin/env rake blahblah', @output
21
+ end
22
+ end
23
+
24
+ context "A rake command that overrides the path set" do
25
+ setup do
26
+ @output = Whenever.cron \
27
+ <<-file
28
+ set :path, '/my/path'
29
+ every 2.hours do
30
+ rake "blahblah", :path => '/some/other/path'
31
+ end
32
+ file
33
+ end
34
+
35
+ should "output the rake command using that path" do
36
+ assert_match two_hours + ' cd /some/other/path && RAILS_ENV=production /usr/bin/env rake blahblah', @output
37
+ end
38
+ end
39
+
40
+ context "A rake command with environment set" do
41
+ setup do
42
+ @output = Whenever.cron \
43
+ <<-file
44
+ set :environment, :silly
45
+ set :path, '/my/path'
46
+ every 2.hours do
47
+ rake "blahblah"
48
+ end
49
+ file
50
+ end
51
+
52
+ should "output the rake command using that environment" do
53
+ assert_match two_hours + ' cd /my/path && RAILS_ENV=silly /usr/bin/env rake blahblah', @output
54
+ end
55
+ end
56
+
57
+ context "A rake command that overrides the environment set" do
58
+ setup do
59
+ @output = Whenever.cron \
60
+ <<-file
61
+ set :environment, :silly
62
+ set :path, '/my/path'
63
+ every 2.hours do
64
+ rake "blahblah", :environment => :serious
65
+ end
66
+ file
67
+ end
68
+
69
+ should "output the rake command using that environment" do
70
+ assert_match two_hours + ' cd /my/path && RAILS_ENV=serious /usr/bin/env rake blahblah', @output
71
+ end
72
+ end
73
+
74
+ end
@@ -0,0 +1,289 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class OutputRedirectionTest < Test::Unit::TestCase
4
+
5
+ context "A command when the output is set to nil" do
6
+ setup do
7
+ @output = Whenever.cron \
8
+ <<-file
9
+ set :output, nil
10
+ every 2.hours do
11
+ command "blahblah"
12
+ end
13
+ file
14
+ end
15
+
16
+ should "output the command with the log syntax appended" do
17
+ assert_match /^.+ .+ .+ .+ blahblah >> \/dev\/null 2>&1$/, @output
18
+ end
19
+ end
20
+
21
+
22
+ context "A command when the output is set" do
23
+ setup do
24
+ @output = Whenever.cron \
25
+ <<-file
26
+ set :output, 'logfile.log'
27
+ every 2.hours do
28
+ command "blahblah"
29
+ end
30
+ file
31
+ end
32
+
33
+ should "output the command with the log syntax appended" do
34
+ assert_match /^.+ .+ .+ .+ blahblah >> logfile.log 2>&1$/, @output
35
+ end
36
+ end
37
+
38
+ context "A command when the error and standard output is set by the command" do
39
+ setup do
40
+ @output = Whenever.cron \
41
+ <<-file
42
+ every 2.hours do
43
+ command "blahblah", :output => {:standard => 'dev_null', :error => 'dev_err'}
44
+ end
45
+ file
46
+ end
47
+
48
+ should "output the command without the log syntax appended" do
49
+ assert_match /^.+ .+ .+ .+ blahblah >> dev_null 2> dev_err$/, @output
50
+ end
51
+ end
52
+
53
+ context "A command when the output is set and the comand overrides it" do
54
+ setup do
55
+ @output = Whenever.cron \
56
+ <<-file
57
+ set :output, 'logfile.log'
58
+ every 2.hours do
59
+ command "blahblah", :output => 'otherlog.log'
60
+ end
61
+ file
62
+ end
63
+
64
+ should "output the command with the command syntax appended" do
65
+ assert_no_match /.+ .+ .+ .+ blahblah >> logfile.log 2>&1/, @output
66
+ assert_match /^.+ .+ .+ .+ blahblah >> otherlog.log 2>&1$/, @output
67
+ end
68
+ end
69
+
70
+ context "A command when the output is set and the comand overrides with standard and error" do
71
+ setup do
72
+ @output = Whenever.cron \
73
+ <<-file
74
+ set :output, 'logfile.log'
75
+ every 2.hours do
76
+ command "blahblah", :output => {:error => 'dev_err', :standard => 'dev_null' }
77
+ end
78
+ file
79
+ end
80
+
81
+ should "output the command with the overridden redirection syntax appended" do
82
+ assert_no_match /.+ .+ .+ .+ blahblah >> logfile.log 2>&1/, @output
83
+ assert_match /^.+ .+ .+ .+ blahblah >> dev_null 2> dev_err$/, @output
84
+ end
85
+ end
86
+
87
+ context "A command when the output is set and the comand rejects it" do
88
+ setup do
89
+ @output = Whenever.cron \
90
+ <<-file
91
+ set :output, 'logfile.log'
92
+ every 2.hours do
93
+ command "blahblah", :output => false
94
+ end
95
+ file
96
+ end
97
+
98
+ should "output the command without the log syntax appended" do
99
+ assert_no_match /.+ .+ .+ .+ blahblah >> logfile.log 2>&1/, @output
100
+ assert_match /^.+ .+ .+ .+ blahblah$/, @output
101
+ end
102
+ end
103
+
104
+ context "A command when the output is set and is overridden by the :set option" do
105
+ setup do
106
+ @output = Whenever.cron :set => 'output=otherlog.log', :string => \
107
+ <<-file
108
+ set :output, 'logfile.log'
109
+ every 2.hours do
110
+ command "blahblah"
111
+ end
112
+ file
113
+ end
114
+
115
+ should "output the otherlog.log as the log file" do
116
+ assert_no_match /.+ .+ .+ .+ blahblah >> logfile.log 2>&1/, @output
117
+ assert_match /^.+ .+ .+ .+ blahblah >> otherlog.log 2>&1/, @output
118
+ end
119
+ end
120
+
121
+ context "A command when the error and standard output is set" do
122
+ setup do
123
+ @output = Whenever.cron \
124
+ <<-file
125
+ set :output, {:error => 'dev_err', :standard => 'dev_null' }
126
+ every 2.hours do
127
+ command "blahblah"
128
+ end
129
+ file
130
+ end
131
+
132
+ should "output the command without the redirection syntax appended" do
133
+ assert_match /^.+ .+ .+ .+ blahblah >> dev_null 2> dev_err$/, @output
134
+ end
135
+ end
136
+
137
+ context "A command when error output is set" do
138
+ setup do
139
+ @output = Whenever.cron \
140
+ <<-file
141
+ set :output, {:error => 'dev_null'}
142
+ every 2.hours do
143
+ command "blahblah"
144
+ end
145
+ file
146
+ end
147
+
148
+ should "output the command without the standard errror syntax appended" do
149
+ assert_match /^.+ .+ .+ .+ blahblah 2> dev_null$/, @output
150
+ end
151
+ end
152
+
153
+ context "A command when the standard output is set" do
154
+ setup do
155
+ @output = Whenever.cron \
156
+ <<-file
157
+ set :output, {:standard => 'dev_out'}
158
+ every 2.hours do
159
+ command "blahblah"
160
+ end
161
+ file
162
+ end
163
+
164
+ should "output the command with standard output syntax appended" do
165
+ assert_match /^.+ .+ .+ .+ blahblah >> dev_out$/, @output
166
+ end
167
+ end
168
+
169
+ context "A command when error output is set by the command" do
170
+ setup do
171
+ @output = Whenever.cron \
172
+ <<-file
173
+ every 2.hours do
174
+ command "blahblah", :output => {:error => 'dev_err'}
175
+ end
176
+ file
177
+ end
178
+
179
+ should "output the command without the log syntax appended" do
180
+ assert_match /^.+ .+ .+ .+ blahblah 2> dev_err$/, @output
181
+ end
182
+ end
183
+
184
+ context "A command when standard output is set by the command" do
185
+ setup do
186
+ @output = Whenever.cron \
187
+ <<-file
188
+ every 2.hours do
189
+ command "blahblah", :output => {:standard => 'dev_out'}
190
+ end
191
+ file
192
+ end
193
+
194
+ should "output the command without the log syntax appended" do
195
+ assert_match /^.+ .+ .+ .+ blahblah >> dev_out$/, @output
196
+ end
197
+ end
198
+
199
+ context "A command when standard output is set to nil" do
200
+ setup do
201
+ @output = Whenever.cron \
202
+ <<-file
203
+ every 2.hours do
204
+ command "blahblah", :output => {:standard => nil}
205
+ end
206
+ file
207
+ end
208
+
209
+ should "output the command with stdout directed to /dev/null" do
210
+ assert_match /^.+ .+ .+ .+ blahblah >> \/dev\/null$/, @output
211
+ end
212
+ end
213
+
214
+ context "A command when standard error is set to nil" do
215
+ setup do
216
+ @output = Whenever.cron \
217
+ <<-file
218
+ every 2.hours do
219
+ command "blahblah", :output => {:error => nil}
220
+ end
221
+ file
222
+ end
223
+
224
+ should "output the command with stderr directed to /dev/null" do
225
+ assert_match /^.+ .+ .+ .+ blahblah 2> \/dev\/null$/, @output
226
+ end
227
+ end
228
+
229
+ context "A command when standard output and standard error is set to nil" do
230
+ setup do
231
+ @output = Whenever.cron \
232
+ <<-file
233
+ every 2.hours do
234
+ command "blahblah", :output => {:error => nil, :standard => nil}
235
+ end
236
+ file
237
+ end
238
+
239
+ should "output the command with stderr directed to /dev/null" do
240
+ assert_match /^.+ .+ .+ .+ blahblah >> \/dev\/null 2>&1$/, @output
241
+ end
242
+ end
243
+
244
+ context "A command when standard output is set and standard error is set to nil" do
245
+ setup do
246
+ @output = Whenever.cron \
247
+ <<-file
248
+ every 2.hours do
249
+ command "blahblah", :output => {:error => nil, :standard => 'my.log'}
250
+ end
251
+ file
252
+ end
253
+
254
+ should "output the command with stderr directed to /dev/null" do
255
+ assert_match /^.+ .+ .+ .+ blahblah >> my.log 2> \/dev\/null$/, @output
256
+ end
257
+ end
258
+
259
+ context "A command when standard output is nil and standard error is set" do
260
+ setup do
261
+ @output = Whenever.cron \
262
+ <<-file
263
+ every 2.hours do
264
+ command "blahblah", :output => {:error => 'my_error.log', :standard => nil}
265
+ end
266
+ file
267
+ end
268
+
269
+ should "output the command with stderr directed to /dev/null" do
270
+ assert_match /^.+ .+ .+ .+ blahblah >> \/dev\/null 2> my_error.log$/, @output
271
+ end
272
+ end
273
+
274
+ context "A command when the deprecated :cron_log is set" do
275
+ setup do
276
+ @output = Whenever.cron \
277
+ <<-file
278
+ set :cron_log, "cron.log"
279
+ every 2.hours do
280
+ command "blahblah"
281
+ end
282
+ file
283
+ end
284
+
285
+ should "output the command with with the stdout and stderr going to the log" do
286
+ assert_match /^.+ .+ .+ .+ blahblah >> cron.log 2>&1$/, @output
287
+ end
288
+ end
289
+ end