forked from github/github-services
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bamboo_test.rb
175 lines (140 loc) · 4.24 KB
/
bamboo_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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
require File.expand_path('../helper', __FILE__)
Service::App.set :environment, :test
class BambooTest < Service::TestCase
EXAMPLE_BASE_URL = "http://bamboo.example.com".freeze
def app
Service::App
end
def setup
@stubs = Faraday::Adapter::Test::Stubs.new
end
def test_triggers_build
@stubs.post "/rest/api/latest/queue/ABC" do |env|
valid_response("ABC")
end
svc = service :push, data, payload
svc.receive
@stubs.verify_stubbed_calls
end
def test_triggers_compound_build
["ABC", "A"].each do |key|
@stubs.post "/rest/api/latest/queue/#{key}" do |env|
valid_response(key)
end
end
svc = service :push, compound_data1, payload
svc.receive
@stubs.verify_stubbed_calls
end
def test_triggers_build_with_context_path
@stubs.post "/context/rest/api/latest/queue/ABC" do |env|
valid_response("ABC")
end
data = self.data.update('base_url' => "https://secure.bamboo.com/context")
svc = service :push, data, payload
svc.receive
@stubs.verify_stubbed_calls
end
def test_passes_build_error
@stubs.post "/rest/api/latest/queue/ABC" do |env|
error_response(404, "Plan ABC not found")
end
svc = service :push, data, payload
assert_raise Service::ConfigurationError do
svc.receive
end
@stubs.verify_stubbed_calls
end
def test_requires_base_url
data = self.data.update('base_url' => '')
svc = service :push, data, payload
assert_raise Service::ConfigurationError do
svc.receive
end
end
def test_requires_build_key
data = self.data.update('build_key' => '')
svc = service :push, data, payload
assert_raise Service::ConfigurationError do
svc.receive
end
end
def test_requires_username
data = self.data.update('username' => '')
svc = service :push, data, payload
assert_raise Service::ConfigurationError do
svc.receive
end
end
def test_requires_password
data = self.data.update('password' => '')
svc = service :push, data, payload
assert_raise Service::ConfigurationError do
svc.receive
end
end
def test_failed_bamboo_server
svc = service :push, data, payload
def svc.http_post(*args)
raise SocketError, "getaddrinfo: Name or service not known"
end
assert_raise Service::ConfigurationError do
svc.receive
end
end
def test_invalid_bamboo_url
@stubs.post "/rest/api/latest/queue/ABC" do
[404, {}, '']
end
svc = service :push, data, payload
assert_raise Service::ConfigurationError do
svc.receive
end
end
def data
{
"build_key" => "ABC",
"base_url" => EXAMPLE_BASE_URL,
"username" => "admin",
"password" => 'pwd'
}
end
def compound_data1
{
"build_key" => "ABC,master:A,rel-1-patches:B,rel-2-patches:C",
"base_url" => EXAMPLE_BASE_URL,
"username" => "admin",
"password" => 'pwd'
}
end
# Assert the value of the params.
#
# body - A String of form-encoded params: "a=1&b=2"
# expected - A Hash of String keys and values to match against the body.
#
# Raises Test::Unit::AssertionFailedError if the assertion doesn't match.
# Returns nothing.
def assert_params(body, expected)
params = Rack::Utils.parse_query(body)
expected.each do |key, expected_value|
assert value = params.delete(key.to_s), "#{key} not in #{params.inspect}"
assert_equal expected_value, value, "#{key} = #{value.inspect}, not #{expected_value.inspect}"
end
assert params.empty?, "params has other values: #{params.inspect}"
end
def service(*args)
super Service::Bamboo, *args
end
private
def valid_response(key)
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
"<restQueuedBuild buildResultKey=\"#{key}-7\" buildNumber=\"7\" planKey=\"#{key}\">" +
"<triggerReason>Manual build</triggerReason><link rel=\"self\" href=\"http://bamboo.example.com/rest/api/latest/result/#{key}-7\"/>" +
"</restQueuedBuild>"
[200, {}, xml]
end
def error_response(status, msg)
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><status><status-code>#{status}</status-code><message>#{msg}</message></status>"
[status, {}, xml]
end
end