summaryrefslogtreecommitdiff
path: root/spec/unit/resource/cron_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/resource/cron_spec.rb')
-rw-r--r--spec/unit/resource/cron_spec.rb181
1 files changed, 181 insertions, 0 deletions
diff --git a/spec/unit/resource/cron_spec.rb b/spec/unit/resource/cron_spec.rb
new file mode 100644
index 0000000000..403ffb009b
--- /dev/null
+++ b/spec/unit/resource/cron_spec.rb
@@ -0,0 +1,181 @@
+#
+# Author:: Bryan McLellan (btm@loftninjas.org)
+# Author:: Tyler Cloke (<tyler@opscode.com>)
+# Copyright:: Copyright (c) 2009 Bryan McLellan
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require 'spec_helper'
+
+describe Chef::Resource::Cron do
+
+ before(:each) do
+ @resource = Chef::Resource::Cron.new("cronify")
+ end
+
+ it "should create a new Chef::Resource::Cron" do
+ @resource.should be_a_kind_of(Chef::Resource)
+ @resource.should be_a_kind_of(Chef::Resource::Cron)
+ end
+
+ it "should have a name" do
+ @resource.name.should eql("cronify")
+ end
+
+ it "should have a default action of 'create'" do
+ @resource.action.should eql(:create)
+ end
+
+ it "should accept create or delete for action" do
+ lambda { @resource.action :create }.should_not raise_error(ArgumentError)
+ lambda { @resource.action :delete }.should_not raise_error(ArgumentError)
+ lambda { @resource.action :lolcat }.should raise_error(ArgumentError)
+ end
+
+ it "should allow you to set a command" do
+ @resource.command "/bin/true"
+ @resource.command.should eql("/bin/true")
+ end
+
+ it "should allow you to set a user" do
+ @resource.user "daemon"
+ @resource.user.should eql("daemon")
+ end
+
+ it "should allow you to specify the minute" do
+ @resource.minute "30"
+ @resource.minute.should eql("30")
+ end
+
+ it "should allow you to specify the hour" do
+ @resource.hour "6"
+ @resource.hour.should eql("6")
+ end
+
+ it "should allow you to specify the day" do
+ @resource.day "10"
+ @resource.day.should eql("10")
+ end
+
+ it "should allow you to specify the month" do
+ @resource.month "10"
+ @resource.month.should eql("10")
+ end
+
+ it "should allow you to specify the weekday" do
+ @resource.weekday "2"
+ @resource.weekday.should eql("2")
+ end
+
+ it "should allow you to specify the mailto variable" do
+ @resource.mailto "test@example.com"
+ @resource.mailto.should eql("test@example.com")
+ end
+
+ it "should allow you to specify the path" do
+ @resource.path "/usr/bin:/usr/sbin"
+ @resource.path.should eql("/usr/bin:/usr/sbin")
+ end
+
+ it "should allow you to specify the home directory" do
+ @resource.home "/root"
+ @resource.home.should eql("/root")
+ end
+
+ it "should allow you to specify the shell to run the command with" do
+ @resource.shell "/bin/zsh"
+ @resource.shell.should eql("/bin/zsh")
+ end
+
+ it "should allow you to specify environment variables hash" do
+ env = {"TEST" => "LOL"}
+ @resource.environment env
+ @resource.environment.should eql(env)
+ end
+
+ it "should allow * for all time and date values" do
+ [ "minute", "hour", "day", "month", "weekday" ].each do |x|
+ @resource.send(x, "*").should eql("*")
+ end
+ end
+
+ it "should allow ranges for all time and date values" do
+ [ "minute", "hour", "day", "month", "weekday" ].each do |x|
+ @resource.send(x, "1-2,5").should eql("1-2,5")
+ end
+ end
+
+ it "should have a default value of * for all time and date values" do
+ [ "minute", "hour", "day", "month", "weekday" ].each do |x|
+ @resource.send(x).should eql("*")
+ end
+ end
+
+ it "should have a default value of root for the user" do
+ @resource.user.should eql("root")
+ end
+
+ it "should reject any minute over 59" do
+ lambda { @resource.minute "60" }.should raise_error(RangeError)
+ end
+
+ it "should reject any hour over 23" do
+ lambda { @resource.hour "24" }.should raise_error(RangeError)
+ end
+
+ it "should reject any day over 31" do
+ lambda { @resource.day "32" }.should raise_error(RangeError)
+ end
+
+ it "should reject any month over 12" do
+ lambda { @resource.month "13" }.should raise_error(RangeError)
+ end
+
+ it "should reject any weekday over 7" do
+ lambda { @resource.weekday "8" }.should raise_error(RangeError)
+ end
+
+ it "should convert integer schedule values to a string" do
+ [ "minute", "hour", "day", "month", "weekday" ].each do |x|
+ @resource.send(x, 5).should eql("5")
+ end
+ end
+
+ describe "when it has a time (minute, hour, day, month, weeekend) and user" do
+ before do
+ @resource.command("tackle")
+ @resource.minute("1")
+ @resource.hour("2")
+ @resource.day("3")
+ @resource.month("4")
+ @resource.weekday("5")
+ @resource.user("root")
+ end
+
+ it "describes the state" do
+ state = @resource.state
+ state[:minute].should == "1"
+ state[:hour].should == "2"
+ state[:day].should == "3"
+ state[:month].should == "4"
+ state[:weekday].should == "5"
+ state[:user].should == "root"
+ end
+
+ it "returns the command as its identity" do
+ @resource.identity.should == "tackle"
+ end
+ end
+end