forked from thoughtworks/cruisecontrol.rb
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding a ScheduledBuildTrigger that allows more fine-grained control …
…over build scheduling.
- Loading branch information
Showing
3 changed files
with
90 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
class ScheduledBuildTrigger | ||
attr_accessor :build_interval | ||
|
||
def initialize(triggered_project, opts={}) | ||
@triggered_project = triggered_project | ||
@build_interval = opts[:build_interval] || 24.hours | ||
@next_build_time = opts[:start_time] || calculate_next_build_time | ||
end | ||
|
||
def build_necessary?(reasons) | ||
if @triggered_project.build_requested? || time_for_new_build? | ||
@next_build_time = calculate_next_build_time | ||
true | ||
end | ||
end | ||
|
||
def calculate_next_build_time | ||
Time.now + @build_interval | ||
end | ||
|
||
def time_for_new_build? | ||
Time.now >= @next_build_time | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
require File.expand_path(File.dirname(__FILE__) + '/../test_helper') | ||
|
||
class ScheduledBuildTriggerTest < Test::Unit::TestCase | ||
include FileSandbox | ||
include BuildFactory | ||
|
||
def setup | ||
setup_sandbox | ||
end | ||
|
||
def teardown | ||
teardown_sandbox | ||
end | ||
|
||
def test_build_should_be_necessary_if_build_triggered | ||
project = mock(:build_requested? => true) | ||
assert ScheduledBuildTrigger.new(project).build_necessary?([]) | ||
end | ||
|
||
def test_build_should_be_necessary_if_time_exceeds_next_build_time | ||
default_project = stub("Project", :build_requested? => false) | ||
|
||
assert !(ScheduledBuildTrigger.new(default_project, :start_time => 1.minute.from_now).build_necessary?([])) | ||
assert ScheduledBuildTrigger.new(default_project, :start_time => 1.minute.ago).build_necessary?([]) | ||
|
||
trigger = ScheduledBuildTrigger.new(default_project, :start_time => 1.minute.from_now) | ||
future = 2.minutes.from_now | ||
Time.stubs(:now).returns(future) | ||
assert trigger.build_necessary?([]) | ||
end | ||
|
||
def test_build_should_be_necessary_if_time_exceeds_build_interval | ||
default_project = stub("Project", :build_requested? => false) | ||
|
||
trigger = ScheduledBuildTrigger.new(default_project, :build_interval => 1.minute) | ||
future = 2.minutes.from_now | ||
Time.stubs(:now).returns(future) | ||
assert trigger.build_necessary?([]) | ||
end | ||
|
||
def test_build_necessary_should_handle_the_passage_of_time | ||
default_project = stub("Project", :build_requested? => false) | ||
|
||
should_build = 2.minutes.from_now | ||
should_not_build = 3.minutes.from_now | ||
should_build_again = 5.minutes.from_now | ||
|
||
trigger = ScheduledBuildTrigger.new(default_project, :start_time => 1.minute.from_now, :build_interval => 3.minutes) | ||
|
||
assert !trigger.build_necessary?([]) | ||
|
||
Time.stubs(:now).returns should_build | ||
assert trigger.build_necessary?([]) | ||
|
||
Time.stubs(:now).returns should_not_build | ||
assert !trigger.build_necessary?([]) | ||
|
||
Time.stubs(:now).returns should_build_again | ||
assert trigger.build_necessary?([]) | ||
end | ||
end |