auser-poolparty 0.2.2 → 0.2.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.
Files changed (120) hide show
  1. data/Manifest.txt +201 -0
  2. data/PostInstall.txt +17 -0
  3. data/Rakefile +22 -1
  4. data/bin/cloud-add-keypair +0 -0
  5. data/bin/cloud-osxcopy +22 -0
  6. data/bin/cloud-provision +1 -0
  7. data/bin/cloud-start +17 -15
  8. data/bin/cloud-terminate +23 -0
  9. data/bin/pool-start +14 -14
  10. data/bin/pool-start-monitor +1 -0
  11. data/config/hoe.rb +114 -0
  12. data/config/requirements.rb +15 -0
  13. data/lib/poolparty.rb +1 -0
  14. data/lib/poolparty/base_packages/haproxy.rb +32 -31
  15. data/lib/poolparty/base_packages/heartbeat.rb +2 -2
  16. data/lib/poolparty/base_packages/poolparty.rb +9 -3
  17. data/lib/poolparty/base_packages/ruby.rb +10 -0
  18. data/lib/poolparty/core/proc.rb +5 -0
  19. data/lib/poolparty/core/string.rb +1 -1
  20. data/lib/poolparty/helpers/binary.rb +6 -5
  21. data/lib/poolparty/helpers/display.rb +11 -2
  22. data/lib/poolparty/helpers/optioner.rb +6 -3
  23. data/lib/poolparty/helpers/provisioner_base.rb +9 -7
  24. data/lib/poolparty/helpers/provisioners/master.rb +38 -4
  25. data/lib/poolparty/helpers/provisioners/slave.rb +2 -2
  26. data/lib/poolparty/modules/cloud_resourcer.rb +20 -3
  27. data/lib/poolparty/modules/definable_resource.rb +1 -1
  28. data/lib/poolparty/modules/method_missing_sugar.rb +12 -4
  29. data/lib/poolparty/modules/pretty_printer.rb +2 -1
  30. data/lib/poolparty/net/remote.rb +1 -1
  31. data/lib/poolparty/net/remote_bases/ec2.rb +13 -10
  32. data/lib/poolparty/net/remote_instance.rb +3 -2
  33. data/lib/poolparty/net/remoter.rb +33 -18
  34. data/lib/poolparty/net/remoter_base.rb +3 -3
  35. data/lib/poolparty/plugins/gem_package.rb +6 -29
  36. data/lib/poolparty/plugins/git.rb +22 -0
  37. data/lib/poolparty/pool/base.rb +7 -6
  38. data/lib/poolparty/pool/cloud.rb +34 -5
  39. data/lib/poolparty/pool/custom_resource.rb +4 -4
  40. data/lib/poolparty/pool/plugin.rb +13 -14
  41. data/lib/poolparty/pool/resource.rb +19 -10
  42. data/lib/poolparty/pool/resources/class_package.rb +10 -6
  43. data/lib/poolparty/pool/resources/conditional.rb +41 -0
  44. data/lib/poolparty/pool/resources/gem.rb +2 -2
  45. data/lib/poolparty/pool/script.rb +25 -2
  46. data/lib/poolparty/templates/haproxy.conf +1 -1
  47. data/lib/poolparty/templates/puppet.conf +4 -2
  48. data/lib/poolparty/version.rb +1 -1
  49. data/poolparty.gemspec +60 -0
  50. data/setup.rb +1585 -0
  51. data/spec/poolparty/base_packages/haproxy_spec.rb +13 -0
  52. data/spec/poolparty/base_packages/heartbeat_spec.rb +30 -0
  53. data/spec/poolparty/bin/console_spec.rb +80 -0
  54. data/spec/poolparty/core/array_spec.rb +26 -0
  55. data/spec/poolparty/core/float.rb +13 -0
  56. data/spec/poolparty/core/hash_spec.rb +63 -0
  57. data/spec/poolparty/core/kernel_spec.rb +24 -0
  58. data/spec/poolparty/core/module_spec.rb +15 -0
  59. data/spec/poolparty/core/object_spec.rb +40 -0
  60. data/spec/poolparty/core/string_spec.rb +152 -0
  61. data/spec/poolparty/core/time_spec.rb +52 -0
  62. data/spec/poolparty/helpers/binary_spec.rb +26 -0
  63. data/spec/poolparty/helpers/display_spec.rb +13 -0
  64. data/spec/poolparty/helpers/optioner_spec.rb +39 -0
  65. data/spec/poolparty/helpers/provisioner_base_spec.rb +121 -0
  66. data/spec/poolparty/helpers/provisioners/master_spec.rb +54 -0
  67. data/spec/poolparty/helpers/provisioners/slave_spec.rb +28 -0
  68. data/spec/poolparty/modules/cloud_resourcer_spec.rb +135 -0
  69. data/spec/poolparty/modules/configurable_spec.rb +26 -0
  70. data/spec/poolparty/modules/definable_resource.rb +9 -0
  71. data/spec/poolparty/modules/file_writer_spec.rb +49 -0
  72. data/spec/poolparty/modules/s3_string_spec.rb +15 -0
  73. data/spec/poolparty/net/remote_bases/ec2_spec.rb +92 -0
  74. data/spec/poolparty/net/remote_instance_spec.rb +70 -0
  75. data/spec/poolparty/net/remote_spec.rb +286 -0
  76. data/spec/poolparty/net/remoter_base_spec.rb +80 -0
  77. data/spec/poolparty/net/remoter_spec.rb +191 -0
  78. data/spec/poolparty/plugins/git_spec.rb +19 -0
  79. data/spec/poolparty/plugins/line_spec.rb +16 -0
  80. data/spec/poolparty/plugins/svn_spec.rb +16 -0
  81. data/spec/poolparty/pool/base_spec.rb +108 -0
  82. data/spec/poolparty/pool/cloud_spec.rb +299 -0
  83. data/spec/poolparty/pool/configurers/files/ruby_basic.rb +17 -0
  84. data/spec/poolparty/pool/configurers/files/ruby_plugins.rb +16 -0
  85. data/spec/poolparty/pool/configurers/ruby_spec.rb +58 -0
  86. data/spec/poolparty/pool/custom_resource_spec.rb +115 -0
  87. data/spec/poolparty/pool/example_spec.rb +112 -0
  88. data/spec/poolparty/pool/plugin_model_spec.rb +63 -0
  89. data/spec/poolparty/pool/plugin_spec.rb +85 -0
  90. data/spec/poolparty/pool/pool_spec.rb +83 -0
  91. data/spec/poolparty/pool/resource_spec.rb +224 -0
  92. data/spec/poolparty/pool/resources/class_package_spec.rb +84 -0
  93. data/spec/poolparty/pool/resources/conditional_spec.rb +38 -0
  94. data/spec/poolparty/pool/resources/cron_spec.rb +49 -0
  95. data/spec/poolparty/pool/resources/directory_spec.rb +40 -0
  96. data/spec/poolparty/pool/resources/exec_spec.rb +37 -0
  97. data/spec/poolparty/pool/resources/file_spec.rb +40 -0
  98. data/spec/poolparty/pool/resources/gem_spec.rb +16 -0
  99. data/spec/poolparty/pool/resources/host_spec.rb +28 -0
  100. data/spec/poolparty/pool/resources/package_spec.rb +44 -0
  101. data/spec/poolparty/pool/resources/remote_file_spec.rb +40 -0
  102. data/spec/poolparty/pool/resources/service_spec.rb +45 -0
  103. data/spec/poolparty/pool/resources/sshkey_spec.rb +48 -0
  104. data/spec/poolparty/pool/resources/variable_spec.rb +20 -0
  105. data/spec/poolparty/pool/script_spec.rb +51 -0
  106. data/spec/poolparty/pool/test_plugins/sshkey_test +2 -0
  107. data/spec/poolparty/pool/test_plugins/virtual_host_template.erb +0 -0
  108. data/spec/poolparty/pool/test_plugins/webserver.rb +46 -0
  109. data/spec/poolparty/poolparty_spec.rb +33 -0
  110. data/spec/poolparty/spec_helper.rb +120 -0
  111. data/test/test_generator_helper.rb +29 -0
  112. data/test/test_helper.rb +2 -0
  113. data/test/test_pool_spec_generator.rb +47 -0
  114. data/test/test_poolparty.rb +11 -0
  115. data/website/index.html +81 -0
  116. data/website/index.txt +72 -0
  117. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  118. data/website/stylesheets/screen.css +138 -0
  119. data/website/template.html.erb +48 -0
  120. metadata +178 -60
@@ -0,0 +1,83 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe "Pool" do
4
+ before(:each) do
5
+ @obj = Object.new
6
+ end
7
+ it "should respond to the pool method" do
8
+ @obj.respond_to?(:pool).should == true
9
+ end
10
+ it "should store the pool in the global array" do
11
+ @p = pool :app do
12
+ end
13
+ @obj.pools[:app].should == @p
14
+ end
15
+
16
+ describe "block" do
17
+ before(:each) do
18
+ @pool = Pool.new(:test) do
19
+ # Inside pool block
20
+ Proc.new {puts "hello world"}
21
+ end
22
+ end
23
+
24
+ it "should be able to define a cloud within the pool block" do
25
+ @pool.respond_to?(:cloud).should == true
26
+ end
27
+ it "should evaluate the block when creating a new pool" do
28
+ Proc.should_receive(:new).once
29
+ Pool.new(:test) do
30
+ Proc.new {puts "hi"}
31
+ end
32
+ end
33
+ describe "plugins" do
34
+ after(:each) do
35
+ @pool.instance_eval do
36
+ plugin_directory "yaway"
37
+ end
38
+ end
39
+ it "should call Dir when the plugin directory is set" do
40
+ Dir.should_receive(:[]).with("yaway/*.rb").once.and_return []
41
+ end
42
+ end
43
+ describe "configuration" do
44
+ before(:each) do
45
+ reset!
46
+ @pool = Pool.new :test do
47
+ nick_nack "nails"
48
+ rocky_shores "ranger"
49
+ end
50
+ end
51
+ it "should set the plugin_directory to nails" do
52
+ @pool.nick_nack.should == "nails"
53
+ end
54
+ it "should set the rocky_shores to ranger" do
55
+ @pool.rocky_shores.should == "ranger"
56
+ end
57
+ describe "range for min/max instances" do
58
+ it "should be able to respond to instances" do
59
+ @pool.respond_to?(:instances).should == true
60
+ end
61
+ it "should be able to pass instances a range" do
62
+ lambda {
63
+ @pool.instance_eval do
64
+ instances 2..5
65
+ end
66
+ }.should_not raise_error
67
+ end
68
+ it "should set the minimum as the minimum_instances from the range" do
69
+ @pool.instance_eval do
70
+ instances 2..5
71
+ end
72
+ @pool.minimum_instances.should == 2
73
+ end
74
+ it "should set the maximum as the maximum_instances from the range" do
75
+ @pool.instance_eval do
76
+ instances 2..5
77
+ end
78
+ @pool.maximum_instances.should == 5
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,224 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+ require File.dirname(__FILE__) + '/test_plugins/webserver'
3
+
4
+ class MyResource < PoolParty::Resources::Resource
5
+ # Just to give some options for the test class
6
+ def options(h={})
7
+ @options ||= {:a => 1,:b => 2,:c => 3}
8
+ end
9
+ end
10
+ describe "Resource" do
11
+ before(:each) do
12
+ @resource = MyResource.new({:a => 10}) do
13
+ b "90"
14
+ end
15
+ end
16
+ it "should set a from the hash" do
17
+ @resource.a.should == 10
18
+ end
19
+ it "should set b from within the block" do
20
+ @resource.b.should == "90"
21
+ end
22
+ it "should not wipe out the rest of the default options" do
23
+ @resource.c.should == 3
24
+ end
25
+ describe "to_s" do
26
+ it "should be able to coalesce the instances" do
27
+ @resource.to_string.should =~ /resource \{\n/
28
+ end
29
+ describe "with resources" do
30
+ before(:each) do
31
+ self.stub!(:options).and_return(:name => "cook")
32
+
33
+ @obj = PoolParty::Resources::Resource.new
34
+ @obj.stub!(:name).and_return "cook"
35
+
36
+ @resource2 = MyResource.new do
37
+ file(:name => "shulie")
38
+ end
39
+ end
40
+ it "should call classpackage_with_self when it has resources" do
41
+ @resource2.should_receive(:classpackage_with_self).and_return @obj
42
+ @resource2.to_string
43
+ end
44
+ it "should call to_string on the class package" do
45
+ @obj.should_receive(:to_string).and_return "wee"
46
+ @resource2.should_receive(:classpackage_with_self).and_return @obj
47
+ @resource2.to_string
48
+ end
49
+ end
50
+ end
51
+ describe "class methods" do
52
+ it "should have an array of available resources" do
53
+ PoolParty::Resources::Resource.available_resources.class.should == Array
54
+ end
55
+ it "should not be empty" do
56
+ PoolParty::Resources::Resource.available_resources.should_not be_empty
57
+ end
58
+ end
59
+ describe "instance methods" do
60
+ before(:each) do
61
+ @resource = MyResource.new
62
+ end
63
+ %w(requires ensures is_present is_absent ifnot).each do |method|
64
+ eval <<-EOE
65
+ it "should have the method #{method} available" do; @resource.respond_to?(:#{method}).should == true; end
66
+ EOE
67
+ end
68
+ it "should be able to take requires method" do
69
+ @resource.respond_to?(:requires).should == true
70
+ end
71
+ it "should push require onto the options" do
72
+ @resource.options.has_key?(:require).should == false
73
+ @resource.requires("nibbles")
74
+ @resource.options.has_key?(:require).should == true
75
+ end
76
+ it "should be able to call ensures method on the resource" do
77
+ @resource.respond_to?(:ensures).should == true
78
+ end
79
+ it "should push the option ensure onto the options" do
80
+ @resource.options.has_key?(:ensure).should == false
81
+ @resource.ensures("nibbles")
82
+ @resource.options.has_key?(:ensure).should == true
83
+ end
84
+ it "should write the option ensures as present with is_present" do
85
+ @resource.options.has_key?(:ensure).should == false
86
+ @resource.is_present
87
+ @resource.options[:ensure].should == "present"
88
+ end
89
+ it "should write the option ensures as absent with is_absent" do
90
+ @resource.options.has_key?(:ensure).should == false
91
+ @resource.is_absent
92
+ @resource.options[:ensure].should == "absent"
93
+ end
94
+ it "should write the option unless for ifnot" do
95
+ @resource.options.has_key?(:unless).should == false
96
+ @resource.ifnot "str"
97
+ @resource.options[:unless].should == "str"
98
+ end
99
+ describe "templating" do
100
+ before(:each) do
101
+ FileUtils.stub!(:cp).and_return true
102
+ end
103
+ it "should have the method template" do
104
+ @resource.respond_to?(:template).should == true
105
+ end
106
+ it "should raise an exception if no file is given" do
107
+ lambda {
108
+ @resource.template
109
+ }.should raise_error
110
+ end
111
+ it "should raise an excepton if the file cannot be found" do
112
+ lambda {
113
+ @resource.template("radar")
114
+ }.should raise_error
115
+ end
116
+ it "should not raise an exception if there is a file passed and the file is found" do
117
+ File.should_receive(:file?).with("radar").and_return true
118
+ lambda {
119
+ @resource.template("radar")
120
+ }.should_not raise_error
121
+ end
122
+ # it "should push the template option on to the options" do
123
+ # File.stub!(:file?).with("radar").and_return true
124
+ # @resource.options.has_key?(:template).should == false
125
+ # @resource.template("radar")
126
+ # @resource.options.has_key?(:template).should == true
127
+ # end
128
+ end
129
+ end
130
+ describe "command" do
131
+ include PoolParty::Resources
132
+ before(:each) do
133
+ reset_resources!
134
+ end
135
+ it "should create the new 'resource' as a resource" do
136
+ resource(:file).class.should == Array
137
+ end
138
+ it "should receive << when adding a new one" do
139
+ resource(:file).should_receive(:<<).once
140
+ file({:name => "pop"})
141
+ end
142
+ it "should contain 3 instances after calling resource 3 times" do
143
+ file({:name => "red"})
144
+ file({:name => "hot"})
145
+ file({:name => "summer"})
146
+ resource(:file).size.should == 3
147
+ end
148
+ describe "adding" do
149
+ before(:each) do
150
+ @a = file({:name => "red"})
151
+ @b = file({:name => "hot"})
152
+ @c = file({:name => "summer"})
153
+ end
154
+ it "should contain file named with 'red'" do
155
+ resource(:file).include?(@a).should == true
156
+ end
157
+ end
158
+ describe "method_missing" do
159
+ before(:each) do
160
+ file({:name => "red"})
161
+ file({:name => "hot"})
162
+ file({:name => "summer"})
163
+ end
164
+ it "should be able to pick out methods with the phrase has_" do
165
+ lambda {
166
+ has_file
167
+ }.should_not raise_error
168
+ end
169
+ it "should not have a method prepended with crabs_" do
170
+ lambda {
171
+ crabs_file
172
+ }.should raise_error
173
+ end
174
+ it "should pick out methods with the phrase does_not_" do
175
+ lambda {
176
+ does_not_have_file({:name => "red"})
177
+ }.should_not raise_error
178
+ end
179
+ it "should set the has_file to present ensure" do
180
+ has_file({:name => "redface"})
181
+ resource(:file).get_named("redface").first.options[:ensure].should == "present"
182
+ end
183
+ it "should set the does_not_have_file to absent ensure" do
184
+ does_not_have_file({:name => "net"})
185
+ resource(:file).get_named("net").first.options[:ensure].should == "absent"
186
+ end
187
+ it "should be able to have_service as well" do
188
+ has_service({:name => "apache"})
189
+ resource(:service).get_named("apache").first.options[:ensure].should == "running"
190
+ end
191
+ end
192
+ describe "get_resource" do
193
+ before(:each) do
194
+ @red = file(:name => "red")
195
+ @hot = file(:name => "hot")
196
+ @tamales = file(:name => "tamales")
197
+ end
198
+ it "should return a type of resource when looking for a resource that exists" do
199
+ get_resource(:file, "hot").class.should == PoolParty::Resources::File
200
+ end
201
+ it "should return the resource of the name requested" do
202
+ get_resource(:file, "hot").should == @hot
203
+ end
204
+ it "should return nil if the resource requested is not there" do
205
+ get_resource(:file, "smarties").should be_nil
206
+ end
207
+ end
208
+ describe "parent" do
209
+ before(:each) do
210
+ @cloud = cloud :app do
211
+ tangerine "orange"
212
+ file(:name => "file.txt")
213
+ end
214
+ @file = @cloud.resources[:file].first
215
+ end
216
+ it "should take the options of the parent" do
217
+ @file.parent.tangerine.should_not == nil
218
+ end
219
+ it "should set the option as the same from the parent" do
220
+ @file.parent.tangerine.should == "orange"
221
+ end
222
+ end
223
+ end
224
+ end
@@ -0,0 +1,84 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ include PoolParty::Resources
4
+
5
+ describe "File" do
6
+ before(:each) do
7
+ reset!
8
+ @class = PoolParty::Resources::Classpackage.new({:name => "rockstar"})
9
+ end
10
+ it "should have a method resources" do
11
+ @class.respond_to?(:resources).should == true
12
+ end
13
+ it "should store the resources in an array" do
14
+ @class.resources.class.should == Hash
15
+ end
16
+ describe "with resources" do
17
+ before(:each) do
18
+ cloud :application_cloud do
19
+ classpackage do
20
+ file({:name => "red"})
21
+ end
22
+ end
23
+ @class = cloud(:application_cloud).resource(:classpackage).first
24
+ end
25
+ it "should store a resource in the resources array" do
26
+ @class.resources.size.should == 1
27
+ end
28
+ it "should have a file resource in the cloud" do
29
+ @class.resource(:file).should_not == nil
30
+ end
31
+ describe "to_s" do
32
+ before(:each) do
33
+ @class.instance_eval do
34
+ name "rockstar"
35
+ file({:name => "red"}) do; end
36
+ end
37
+ end
38
+ it "should output the class with the name as class [name]" do
39
+ @class.to_string.should =~ /class rockstar/
40
+ end
41
+ after do
42
+ @class.to_string
43
+ end
44
+ end
45
+ end
46
+ end
47
+ describe "setting with a block" do
48
+ before(:each) do
49
+ @class1 = classpackage do
50
+ name "my_class"
51
+ file({:name => "frank"})
52
+ end
53
+ end
54
+ it "should set the name when set" do
55
+ @class1.name.should == "my_class"
56
+ end
57
+ it "should have the file resource in the resources class" do
58
+ @class1.resources.size.should_not be_zero
59
+ end
60
+ it "should have the file resource in the resources array" do
61
+ @class1.resource(:file).class.should == Array
62
+ end
63
+ it "should store the file in the resources array" do
64
+ @class1.resource(:file).get_named("frank").first.name.should == "frank"
65
+ end
66
+ end
67
+ describe "from a collection of resources to another" do
68
+ before(:each) do
69
+ self.stub!(:options).and_return({:name => "cook"})
70
+ file(:name => "franksfile")
71
+ exec(:name => "get file", :command => "kill frank for file")
72
+ end
73
+ it "should have the method classpackage_with_self" do
74
+ self.respond_to?(:classpackage_with_self).should == true
75
+ end
76
+ it "should transfer the resources to the class" do
77
+ @class2 = classpackage_with_self(self)
78
+ @class2.resources.should_not be_empty
79
+ end
80
+ it "should leave zero resources on the parent" do
81
+ @class2 = classpackage_with_self(self)
82
+ resources.should be_empty
83
+ end
84
+ end
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ include PoolParty::Resources
4
+
5
+ describe "Conditional" do
6
+ before(:each) do
7
+ @cloud = cloud :app do; end
8
+ @cloud.instance_eval do
9
+ execute_if("$hostname", "'master'", self) do
10
+ file({:name => "/etc/apache2/puppetmaster.conf"})
11
+ end
12
+ end
13
+ @cond = @cloud.resource(:conditional).first
14
+ end
15
+ it "should add the block of resources on the parent" do
16
+ @cloud.resources.size.should == 1
17
+ end
18
+ it "should have a conditional in the resources" do
19
+ @cloud.resource(:conditional).first.name.should == "$hostname == 'master'"
20
+ end
21
+ it "should push the resources onto the conditional resource" do
22
+ @cond.resources.size.should == 1
23
+ end
24
+ it "should have a file resource on the conditional" do
25
+ @cond.resource(:file).first.name.should == "/etc/apache2/puppetmaster.conf"
26
+ end
27
+ it "should have the parent as the cloud" do
28
+ @cond.parent.should == @cloud
29
+ end
30
+ describe "to_string" do
31
+ before(:each) do
32
+ @string = @cond.to_string
33
+ end
34
+ it "should have a case statement for the hostname" do
35
+ @string.should =~ /case \$hostname/
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,49 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ include PoolParty::Resources
4
+
5
+ describe "Cron" do
6
+ describe "instances" do
7
+ before(:each) do
8
+ @cloud = cloud :cron_resources do
9
+ cron({:command => "/bin/logrotate"})
10
+ end
11
+ @cron = @cloud.resource(:cron).first
12
+ end
13
+ it "should turn the one hash instance into a string" do
14
+ @cron.to_string.should =~ /'\/bin\/logrotate'/
15
+ end
16
+ it "should turn the two hash instance into a string" do
17
+ @cron = cron({:name => "mail", :command => "/bin/mail -s \"letters\""})
18
+ @cron.to_string.should =~ /"mail":/
19
+ end
20
+ describe "as included" do
21
+ before(:each) do
22
+ @cron = cron({:rent => "low"}) do
23
+ name "/www/conf/httpd.conf"
24
+ hour 23
25
+ minute 5
26
+ weekday 1
27
+ end
28
+ end
29
+ it "should use default values" do
30
+ @cron.name.should == "/www/conf/httpd.conf"
31
+ end
32
+ it "should keep the default values for the file" do
33
+ @cron.user.should == "root"
34
+ end
35
+ it "should also set options through a hash" do
36
+ @cron.rent.should == "low"
37
+ end
38
+ it "should set the hour to 23" do
39
+ @cron.hour.should == 23
40
+ end
41
+ it "should set the minute to 5" do
42
+ @cron.minute.should == 5
43
+ end
44
+ it "should set the weekday to 1" do
45
+ @cron.weekday.should == 1
46
+ end
47
+ end
48
+ end
49
+ end