whenever 0.9.2 → 0.10.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +17 -7
  4. data/CHANGELOG.md +63 -0
  5. data/Gemfile +0 -5
  6. data/LICENSE +1 -1
  7. data/README.md +101 -18
  8. data/Rakefile +3 -10
  9. data/bin/whenever +3 -0
  10. data/bin/wheneverize +8 -5
  11. data/gemfiles/activesupport4.1.gemfile +5 -0
  12. data/gemfiles/activesupport4.2.gemfile +5 -0
  13. data/lib/whenever/capistrano/v2/recipes.rb +4 -3
  14. data/lib/whenever/capistrano/v3/tasks/whenever.rake +20 -7
  15. data/lib/whenever/capistrano.rb +1 -1
  16. data/lib/whenever/command_line.rb +49 -28
  17. data/lib/whenever/cron.rb +43 -21
  18. data/lib/whenever/job.rb +4 -3
  19. data/lib/whenever/job_list.rb +54 -24
  20. data/lib/whenever/numeric.rb +13 -0
  21. data/lib/whenever/numeric_seconds.rb +48 -0
  22. data/lib/whenever/os.rb +7 -0
  23. data/lib/whenever/setup.rb +5 -1
  24. data/lib/whenever/version.rb +1 -1
  25. data/lib/whenever.rb +15 -14
  26. data/test/functional/command_line_test.rb +379 -255
  27. data/test/functional/output_at_test.rb +227 -249
  28. data/test/functional/output_default_defined_jobs_test.rb +239 -288
  29. data/test/functional/output_defined_job_test.rb +65 -91
  30. data/test/functional/output_env_test.rb +22 -26
  31. data/test/functional/output_jobs_for_roles_test.rb +46 -66
  32. data/test/functional/output_jobs_with_mailto_test.rb +168 -0
  33. data/test/functional/output_redirection_test.rb +231 -309
  34. data/test/test_case.rb +32 -0
  35. data/test/test_helper.rb +44 -15
  36. data/test/unit/capistrano_support_test.rb +126 -148
  37. data/test/unit/cron_test.rb +327 -210
  38. data/test/unit/executable_test.rb +142 -0
  39. data/test/unit/job_test.rb +111 -121
  40. data/whenever.gemspec +5 -4
  41. metadata +37 -28
  42. data/lib/whenever/tasks/whenever.rake +0 -43
@@ -1,169 +1,147 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
- require File.expand_path(File.dirname(__FILE__) + "/../../lib/whenever/capistrano/v2/support")
1
+ require 'test_helper'
2
+ require 'whenever/capistrano/v2/support'
3
3
 
4
4
  class CapistranoSupportTestSubject
5
5
  include Whenever::CapistranoSupport
6
6
  end
7
7
 
8
- class CapistranoSupportTest < Test::Unit::TestCase
9
- context "when using capistrano support module" do
10
- setup do
11
- @capistrano = CapistranoSupportTestSubject.new
12
- configuration = mock
13
- configuration.stubs(:load).yields(@capistrano)
14
- Whenever::CapistranoSupport.load_into(configuration)
15
- end
8
+ class CapistranoTestCase < Whenever::TestCase
9
+ setup do
10
+ @capistrano = CapistranoSupportTestSubject.new
11
+ configuration = mock()
12
+ configuration.stubs(:load).yields(@capistrano)
13
+ Whenever::CapistranoSupport.load_into(configuration)
14
+ end
15
+ end
16
16
 
17
- context "#whenever_options" do
18
- should "return fetch(:whenever_options)" do
19
- @capistrano.expects(:fetch).with(:whenever_options)
20
- @capistrano.whenever_options
21
- end
22
- end
17
+ class CapistranoSupportTest < CapistranoTestCase
18
+ should "return fetch(:whenever_options) from #whenever_options" do
19
+ @capistrano.expects(:fetch).with(:whenever_options)
20
+ @capistrano.whenever_options
21
+ end
23
22
 
24
- context "#whenever_roles with one role" do
25
- setup do
26
- @capistrano.stubs(:whenever_options).returns({:roles => :role1})
27
- end
23
+ should "return whenever_options[:roles] as an array from #whenever_roles with one role" do
24
+ @capistrano.stubs(:whenever_options).returns({:roles => :role1})
25
+ assert_equal [:role1], @capistrano.whenever_roles
26
+ end
28
27
 
29
- should "return whenever_options[:roles] as an array" do
30
- assert_equal [:role1], @capistrano.whenever_roles
31
- end
32
- end
28
+ should "return an empty array from #whenever_roles with no defined roles" do
29
+ @capistrano.stubs(:whenever_options).returns({})
30
+ assert_equal [], @capistrano.whenever_roles
31
+ end
33
32
 
34
- context "#whenever_roles with no defined roles" do
35
- setup do
36
- @capistrano.stubs(:whenever_options).returns({})
37
- end
33
+ should "return the list of servers returned by find_servers from #whenever_servers" do
34
+ @capistrano.stubs(:whenever_options).returns({})
35
+ @capistrano.stubs(:find_servers).returns([:server1, :server2])
38
36
 
39
- should "return an empty array" do
40
- assert_equal [], @capistrano.whenever_roles
41
- end
42
- end
37
+ assert_equal [:server1, :server2], @capistrano.whenever_servers
38
+ end
43
39
 
44
- context "#whenever_servers" do
45
- should "return the list of servers returned by find_servers" do
46
- @capistrano.stubs(:whenever_options).returns({})
47
- @capistrano.stubs(:find_servers).returns([:server1, :server2])
40
+ should "#whenever_prepare_for_rollback: set path to previous_release if there is a previous release" do
41
+ args = {}
42
+ @capistrano.stubs(:fetch).with(:previous_release).returns("/some/path/20121221010000")
43
+ assert_equal({:path => "/some/path/20121221010000"}, @capistrano.whenever_prepare_for_rollback(args))
44
+ end
48
45
 
49
- assert_equal [:server1, :server2], @capistrano.whenever_servers
50
- end
46
+ should "#whenever_prepare_for_rollback: set path to release_path and flags to whenever_clear_flags if there is no previous release" do
47
+ args = {}
48
+ @capistrano.stubs(:fetch).with(:previous_release).returns(nil)
49
+ @capistrano.stubs(:fetch).with(:release_path).returns("/some/path/20121221010000")
50
+ @capistrano.stubs(:fetch).with(:whenever_clear_flags).returns("--clear-crontab whenever_identifier")
51
+ assert_equal({:path => "/some/path/20121221010000", :flags => "--clear-crontab whenever_identifier"}, @capistrano.whenever_prepare_for_rollback(args))
52
+ end
53
+
54
+ should "#whenever_run_commands: require :command arg" do
55
+ assert_raises ArgumentError do
56
+ @capistrano.whenever_run_commands(:options => {}, :path => {}, :flags => {})
51
57
  end
58
+ end
52
59
 
53
- context "#whenever_server_roles" do
54
- setup do
55
- @mock_servers = ["foo", "bar"]
56
- @capistrano.stubs(:whenever_servers).returns(@mock_servers)
57
- end
58
-
59
- should "return a map of servers to their role(s)" do
60
- @capistrano.stubs(:whenever_roles).returns([:role1, :role2])
61
- @capistrano.stubs(:role_names_for_host).with("foo").returns([:role1])
62
- @capistrano.stubs(:role_names_for_host).with("bar").returns([:role2])
63
- assert_equal({"foo" => [:role1], "bar" => [:role2]}, @capistrano.whenever_server_roles)
64
- end
65
-
66
- should "exclude non-requested roles" do
67
- @capistrano.stubs(:whenever_roles).returns([:role1, :role2])
68
- @capistrano.stubs(:role_names_for_host).with("foo").returns([:role1, :role3])
69
- @capistrano.stubs(:role_names_for_host).with("bar").returns([:role2])
70
- assert_equal({"foo" => [:role1], "bar" => [:role2]}, @capistrano.whenever_server_roles)
71
- end
72
-
73
- should "include all roles for servers w/ >1 when they're requested" do
74
- @capistrano.stubs(:whenever_roles).returns([:role1, :role2, :role3])
75
- @capistrano.stubs(:role_names_for_host).with("foo").returns([:role1, :role3])
76
- @capistrano.stubs(:role_names_for_host).with("bar").returns([:role2])
77
- assert_equal({"foo" => [:role1, :role3], "bar" => [:role2]}, @capistrano.whenever_server_roles)
78
- end
60
+ should "#whenever_run_commands: require :path arg" do
61
+ assert_raises ArgumentError do
62
+ @capistrano.whenever_run_commands(:options => {}, :command => {}, :flags => {})
79
63
  end
64
+ end
80
65
 
81
- context "#whenever_prepare_for_rollback" do
82
- should "set path to previous_release if there is a previous release" do
83
- args = {}
84
- @capistrano.stubs(:fetch).with(:previous_release).returns("/some/path/20121221010000")
85
- assert_equal({:path => "/some/path/20121221010000"}, @capistrano.whenever_prepare_for_rollback(args))
86
- end
87
-
88
- should "set path to release_path and flags to whenever_clear_flags if there is no previous release" do
89
- args = {}
90
- @capistrano.stubs(:fetch).with(:previous_release).returns(nil)
91
- @capistrano.stubs(:fetch).with(:release_path).returns("/some/path/20121221010000")
92
- @capistrano.stubs(:fetch).with(:whenever_clear_flags).returns("--clear-crontab whenever_identifier")
93
- assert_equal({:path => "/some/path/20121221010000", :flags => "--clear-crontab whenever_identifier"}, @capistrano.whenever_prepare_for_rollback(args))
94
- end
66
+ should "#whenever_run_commands: require :flags arg" do
67
+ assert_raises ArgumentError do
68
+ @capistrano.whenever_run_commands(:options => {}, :path => {}, :command => {})
95
69
  end
70
+ end
71
+ end
72
+
73
+ class ServerRolesTest < CapistranoTestCase
74
+ setup do
75
+ @mock_servers = ["foo", "bar"]
76
+ @capistrano.stubs(:whenever_servers).returns(@mock_servers)
96
77
 
97
- context "#whenever_run_commands" do
98
- should "require :command arg" do
99
- assert_raise ArgumentError do
100
- @capistrano.whenever_run_commands(:options => {}, :path => {}, :flags => {})
101
- end
102
- end
103
-
104
- should "require :path arg" do
105
- assert_raise ArgumentError do
106
- @capistrano.whenever_run_commands(:options => {}, :command => {}, :flags => {})
107
- end
108
- end
109
-
110
- should "require :flags arg" do
111
- assert_raise ArgumentError do
112
- @capistrano.whenever_run_commands(:options => {}, :path => {}, :command => {})
113
- end
114
- end
115
-
116
- context "with some servers defined" do
117
- setup do
118
- @mock_server1, @mock_server2, @mock_server3 = mock("Server1"), mock("Server2"), mock("Server3")
119
- @mock_server1.stubs(:host).returns("server1.foo.com")
120
- @mock_server2.stubs(:host).returns("server2.foo.com")
121
- @mock_server3.stubs(:host => "server3.foo.com", :port => 1022, :user => 'test')
122
- @mock_servers = [@mock_server1, @mock_server2]
123
- end
124
-
125
- should "call run for each host w/ appropriate role args" do
126
- @capistrano.stubs(:role_names_for_host).with(@mock_server1).returns([:role1])
127
- @capistrano.stubs(:role_names_for_host).with(@mock_server2).returns([:role2])
128
- @capistrano.stubs(:whenever_servers).returns(@mock_servers)
129
- roles = [:role1, :role2]
130
- @capistrano.stubs(:whenever_options).returns({:roles => roles})
131
-
132
- @capistrano.expects(:run).once.with('cd /foo/bar && whenever --flag1 --flag2 --roles role1', {:roles => roles, :hosts => @mock_server1})
133
- @capistrano.expects(:run).once.with('cd /foo/bar && whenever --flag1 --flag2 --roles role2', {:roles => roles, :hosts => @mock_server2})
134
-
135
- @capistrano.whenever_run_commands(:command => "whenever",
136
- :path => "/foo/bar",
137
- :flags => "--flag1 --flag2")
138
- end
139
-
140
- should "call run w/ all role args for servers w/ >1 role" do
141
- @capistrano.stubs(:role_names_for_host).with(@mock_server1).returns([:role1, :role3])
142
- @capistrano.stubs(:whenever_servers).returns([@mock_server1])
143
- roles = [:role1, :role2, :role3]
144
- @capistrano.stubs(:whenever_options).returns({:roles => roles})
145
-
146
- @capistrano.expects(:run).once.with('cd /foo/bar && whenever --flag1 --flag2 --roles role1,role3', {:roles => roles, :hosts => @mock_server1})
147
-
148
- @capistrano.whenever_run_commands(:command => "whenever",
149
- :path => "/foo/bar",
150
- :flags => "--flag1 --flag2")
151
- end
152
-
153
- should "call run w/ proper server options (port, user)" do
154
- @capistrano.stubs(:role_names_for_host).with(@mock_server3).returns([:role3])
155
- @capistrano.stubs(:whenever_servers).returns([@mock_server3])
156
- @capistrano.stubs(:whenever_options).returns({:roles => [:role3]})
157
-
158
- @capistrano.expects(:run).once.with do |command, options|
159
- options[:hosts].user == "test" && options[:hosts].port == 1022
160
- end
161
-
162
- @capistrano.whenever_run_commands(:command => "whenever",
163
- :path => "/foo/bar",
164
- :flags => "--flag1 --flag2")
165
- end
166
- end
78
+ @mock_server1, @mock_server2, @mock_server3 = mock("Server1"), mock("Server2"), mock("Server3")
79
+ @mock_server1.stubs(:host).returns("server1.foo.com")
80
+ @mock_server2.stubs(:host).returns("server2.foo.com")
81
+ @mock_server3.stubs(:host => "server3.foo.com", :port => 1022, :user => 'test')
82
+ @mock_servers = [@mock_server1, @mock_server2]
83
+ end
84
+
85
+ should "return a map of servers to their role(s)" do
86
+ @capistrano.stubs(:whenever_roles).returns([:role1, :role2])
87
+ @capistrano.stubs(:role_names_for_host).with("foo").returns([:role1])
88
+ @capistrano.stubs(:role_names_for_host).with("bar").returns([:role2])
89
+ assert_equal({"foo" => [:role1], "bar" => [:role2]}, @capistrano.whenever_server_roles)
90
+ end
91
+
92
+ should "exclude non-requested roles" do
93
+ @capistrano.stubs(:whenever_roles).returns([:role1, :role2])
94
+ @capistrano.stubs(:role_names_for_host).with("foo").returns([:role1, :role3])
95
+ @capistrano.stubs(:role_names_for_host).with("bar").returns([:role2])
96
+ assert_equal({"foo" => [:role1], "bar" => [:role2]}, @capistrano.whenever_server_roles)
97
+ end
98
+
99
+ should "include all roles for servers w/ >1 when they're requested" do
100
+ @capistrano.stubs(:whenever_roles).returns([:role1, :role2, :role3])
101
+ @capistrano.stubs(:role_names_for_host).with("foo").returns([:role1, :role3])
102
+ @capistrano.stubs(:role_names_for_host).with("bar").returns([:role2])
103
+ assert_equal({"foo" => [:role1, :role3], "bar" => [:role2]}, @capistrano.whenever_server_roles)
104
+ end
105
+
106
+ should "call run for each host w/ appropriate role args" do
107
+ @capistrano.stubs(:role_names_for_host).with(@mock_server1).returns([:role1])
108
+ @capistrano.stubs(:role_names_for_host).with(@mock_server2).returns([:role2])
109
+ @capistrano.stubs(:whenever_servers).returns(@mock_servers)
110
+ roles = [:role1, :role2]
111
+ @capistrano.stubs(:whenever_options).returns({:roles => roles})
112
+
113
+ @capistrano.expects(:run).once.with('cd /foo/bar && whenever --flag1 --flag2 --roles role1', {:roles => roles, :hosts => @mock_server1})
114
+ @capistrano.expects(:run).once.with('cd /foo/bar && whenever --flag1 --flag2 --roles role2', {:roles => roles, :hosts => @mock_server2})
115
+
116
+ @capistrano.whenever_run_commands(:command => "whenever",
117
+ :path => "/foo/bar",
118
+ :flags => "--flag1 --flag2")
119
+ end
120
+
121
+ should "call run w/ all role args for servers w/ >1 role" do
122
+ @capistrano.stubs(:role_names_for_host).with(@mock_server1).returns([:role1, :role3])
123
+ @capistrano.stubs(:whenever_servers).returns([@mock_server1])
124
+ roles = [:role1, :role2, :role3]
125
+ @capistrano.stubs(:whenever_options).returns({:roles => roles})
126
+
127
+ @capistrano.expects(:run).once.with('cd /foo/bar && whenever --flag1 --flag2 --roles role1,role3', {:roles => roles, :hosts => @mock_server1})
128
+
129
+ @capistrano.whenever_run_commands(:command => "whenever",
130
+ :path => "/foo/bar",
131
+ :flags => "--flag1 --flag2")
132
+ end
133
+
134
+ should "call run w/ proper server options (port, user)" do
135
+ @capistrano.stubs(:role_names_for_host).with(@mock_server3).returns([:role3])
136
+ @capistrano.stubs(:whenever_servers).returns([@mock_server3])
137
+ @capistrano.stubs(:whenever_options).returns({:roles => [:role3]})
138
+
139
+ @capistrano.expects(:run).once.with do |command, options|
140
+ options[:hosts].user == "test" && options[:hosts].port == 1022
167
141
  end
142
+
143
+ @capistrano.whenever_run_commands(:command => "whenever",
144
+ :path => "/foo/bar",
145
+ :flags => "--flag1 --flag2")
168
146
  end
169
147
  end