forked from thoughtworks/cruisecontrol.rb
/
build_status_test.rb
137 lines (110 loc) · 5.29 KB
/
build_status_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
require File.dirname(__FILE__) + '/../test_helper'
require 'build_status'
class BuildStatusTest < Test::Unit::TestCase
include FileSandbox
def setup
@status = BuildStatus.new('')
end
def test_should_parse_elapsed_time
assert_equal 10, @status.match_elapsed_time('build-1-success.in10s')
assert_equal 760, @status.match_elapsed_time('build-2-failed.in760s')
end
def test_should_raise_exception_when_elapsed_time_not_parsable
assert_exception_when_parsing_elapsed_time('build_status.failed')
assert_exception_when_parsing_elapsed_time('build_status.success')
assert_exception_when_parsing_elapsed_time('build_status.failed?s')
end
def test_never_built_is_true_when_file_is_missing
assert_equal true, BuildStatus.new("artifacts_directory").never_built?
end
def test_never_built_is_false_when_file_exists
File.expects(:"exist?").with("artifacts_directory").returns(true)
assert_equal false, BuildStatus.new("artifacts_directory").never_built?
end
def test_succeeded_is_true_when_file_is___success__
File.expects(:"exist?").with("build-1-success").returns(true)
assert_equal true, BuildStatus.new("build-1-success").succeeded?
end
def test_succeeded_is_false_when_file_is_not___success__
assert_equal false, BuildStatus.new("artifacts_directory").succeeded?
end
def test_succeed_creates_file___success
Dir.stubs(:'[]').returns(['artifacts_directory/build_status.foo'])
FileUtils.expects(:mv).with("artifacts_directory", "artifacts_directory-success.in3.5s")
BuildStatus.new("artifacts_directory").succeed!(3.5)
end
def test_failed_is_true_when_file_is___failed__
File.expects(:"exist?").with('build-1-failed').returns(true)
assert_equal true, BuildStatus.new("build-1-failed").failed?
end
def test_failed_is_false_when_file_is_not___failed__
assert_equal false, BuildStatus.new("artifacts_directory").failed?
end
def test_fail_creates_file___failed__
in_sandbox do |sandbox|
sandbox.new :directory => 'artifacts_directory'
Dir.stubs(:'[]').returns(['artifacts_directory/build_status.foo'])
FileUtils.expects(:mv).with("artifacts_directory", "artifacts_directory-failed.in3.5s")
BuildStatus.new("artifacts_directory").fail!(3.5, "stuff")
end
end
def test_created_at_returns_creation_time_for_status_file
now = Time.now
File.expects(:mtime).with('artifacts_directory').returns(now)
assert_equal now, BuildStatus.new("artifacts_directory").created_at
end
def test_timestamp_returns_later_mtime_of_build_log_or_build_dir
build_log_mtime = Time.now
File.expects(:mtime).with("artifacts_directory/build.log").returns(build_log_mtime)
build_dir_mtime = 2.days.since
File.expects(:mtime).with("artifacts_directory").returns(build_dir_mtime)
assert_equal build_dir_mtime, BuildStatus.new("artifacts_directory").timestamp
end
def test_timestamp_returns_build_dir_mtime_if_build_log_not_exist
build_dir_mtime = Time.now
File.expects(:mtime).with("artifacts_directory").returns(build_dir_mtime)
File.expects(:mtime).with("artifacts_directory/build.log").raises
assert_equal build_dir_mtime, BuildStatus.new("artifacts_directory").timestamp
end
def test_created_at_returns_nil_when_file_not_exist
assert_equal nil, BuildStatus.new("artifacts_directory").created_at
end
def test_to_s_returns_status_file_name_without_underscores
assert_equal 'never_built', BuildStatus.new("artifacts_directory").to_s
end
def test_elapsed_time_should_return_elapsed_seconds_if_build_succeeded
assert_equal 3, BuildStatus.new("build-1-success.in3s").elapsed_time
end
def test_elapsed_time_should_raise_an_error_if_elapsed_time_not_availabe
assert_raise_with_message(RuntimeError, "Could not parse elapsed time") do
BuildStatus.new("artifacts_directory").elapsed_time
end
end
def test_elapsed_time_in_progress
File.expects(:"exist?").with('build-1-incomplete').returns(true)
File.expects(:mtime).with('build-1-incomplete').returns(Time.local(2000,"jan",1,20,15, 1))
Time.expects(:now).returns(Time.local(2000,"jan",1,20,15,10))
assert_equal 9, BuildStatus.new("build-1-incomplete").elapsed_time_in_progress
end
def test_elapsed_time_in_progress_should_return_nil_when_not_incomplete
assert_nil BuildStatus.new("build-1-success.in123s").elapsed_time_in_progress
end
def test_elapsed_time_in_progress_ceils_fractionals
File.expects(:"exist?").with('build-1-incomplete').returns(true)
File.expects(:mtime).with('build-1-incomplete').returns(Time.local(2000,"jan",1,20,15, 1))
time_with_fractional_seconds = Time.local(2000,"jan",1,20,15,10) + 0.2 #difference is 9.2 seconds
Time.expects(:now).returns(time_with_fractional_seconds)
assert_equal 10, BuildStatus.new("build-1-incomplete").elapsed_time_in_progress
end
def test_status_should_be_incomplete_when_full_path_contains_dashes
path_with_dashes = '/projects/cc-trunk/build-1-incomplete'
File.stubs(:exist?).with(path_with_dashes).returns(true)
assert BuildStatus.new(path_with_dashes).incomplete?
end
private
def assert_exception_when_parsing_elapsed_time(file_name)
assert_raise_with_message(RuntimeError, "Could not parse elapsed time") do
@status.match_elapsed_time(file_name)
end
end
end