diff options
Diffstat (limited to 'spec/unit')
-rw-r--r-- | spec/unit/compliance/runner_spec.rb | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/spec/unit/compliance/runner_spec.rb b/spec/unit/compliance/runner_spec.rb index 602d675d4d..e8a08abfc1 100644 --- a/spec/unit/compliance/runner_spec.rb +++ b/spec/unit/compliance/runner_spec.rb @@ -1,4 +1,5 @@ require "spec_helper" +require "tmpdir" describe Chef::Compliance::Runner do let(:logger) { double(:logger).as_null_object } @@ -283,4 +284,63 @@ describe Chef::Compliance::Runner do expect(inputs["chef_node"]["chef_environment"]).to eq("_default") end end + + describe "interval running" do + let(:tempdir) { Dir.mktmpdir("chef-compliance-tests") } + + before do + allow(runner).to receive(:report_timing_file).and_return("#{tempdir}/report_timing.json") + end + + it "is disabled by default" do + expect(runner.node["audit"]["interval"]["enabled"]).to be false + end + + it "defaults to 24 hours / 1440 minutes" do + expect(runner.node["audit"]["interval"]["time"]).to be 1440 + end + + it "runs when the timing file does not exist" do + expect(runner).to receive(:report) + runner.report_with_interval + end + + it "runs when the timing file does not exist and intervals are enabled" do + node.normal["audit"]["interval"]["enabled"] = true + expect(runner).to receive(:report) + runner.report_with_interval + end + + it "runs when the timing file exists and has a recent timestamp" do + FileUtils.touch runner.report_timing_file + expect(runner).to receive(:report) + runner.report_with_interval + end + + it "does not runs when the timing file exists and has a recent timestamp and intervals are enabled" do + node.normal["audit"]["interval"]["enabled"] = true + FileUtils.touch runner.report_timing_file + expect(runner).not_to receive(:report) + runner.report_with_interval + end + + it "does not runs when the timing file exists and has a recent timestamp and intervals are enabled" do + node.normal["audit"]["interval"]["enabled"] = true + FileUtils.touch runner.report_timing_file + ten_minutes_ago = Time.now - 600 + File.utime ten_minutes_ago, ten_minutes_ago, runner.report_timing_file + expect(runner).not_to receive(:report) + runner.report_with_interval + end + + it "runs when the timing file exists and has a recent timestamp and intervals are enabled and the time is short" do + node.normal["audit"]["interval"]["enabled"] = true + node.normal["audit"]["interval"]["time"] = 9 + FileUtils.touch runner.report_timing_file + ten_minutes_ago = Time.now - 600 + File.utime ten_minutes_ago, ten_minutes_ago, runner.report_timing_file + expect(runner).to receive(:report) + runner.report_with_interval + end + end end |