forked from github/github-services
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bamboo_test.rb
212 lines (175 loc) · 5.59 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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
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 "/api/rest/login.action" do |env|
assert_params env[:body], :username => 'admin', :password => 'pwd'
[200, {}, '<response><auth>TOKEN123</auth></response>']
end
@stubs.post "/api/rest/executeBuild.action" do |env|
assert_params env[:body], :auth => "TOKEN123", :buildKey => "ABC"
[200, {}, '<response></response>']
end
@stubs.post "/api/rest/logout.action" do |env|
assert_equal "auth=TOKEN123", env[:body]
[200, {}, '']
end
svc = service :push, data, payload
svc.receive
@stubs.verify_stubbed_calls
end
def test_triggers_compound_build
@stubs.post "/api/rest/login.action" do |env|
assert_params env[:body], :username => 'admin', :password => 'pwd'
[200, {}, '<response><auth>TOKEN123</auth></response>']
end
@stubs.post "/api/rest/executeBuild.action" do |env|
assert_params env[:body], :auth => "TOKEN123", :buildKey => "ABC"
[200, {}, '<response></response>']
end
@stubs.post "/api/rest/executeBuild.action" do |env|
assert_params env[:body], :auth => "TOKEN123", :buildKey => "A"
[200, {}, '<response></response>']
end
@stubs.post "/api/rest/logout.action" do |env|
assert_equal "auth=TOKEN123", env[:body]
[200, {}, '']
end
svc = service :push, compound_data1, payload
svc.receive
@stubs.verify_stubbed_calls
end
def test_triggers_build_with_context_path
@stubs.post "/context/api/rest/login.action" do |env|
assert_params env[:body], :username => 'admin', :password => 'pwd'
[200, {}, '<response><auth>TOKEN123</auth></response>']
end
@stubs.post "/context/api/rest/executeBuild.action" do |env|
assert_params env[:body], :auth => "TOKEN123", :buildKey => "ABC"
[200, {}, '<response></response>']
end
@stubs.post "/context/api/rest/logout.action" do |env|
assert_equal "auth=TOKEN123", env[:body]
[200, {}, '']
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 "/api/rest/login.action" do |env|
assert_params env[:body], :username => 'admin', :password => 'pwd'
[200, {}, '<response><auth>TOKEN123</auth></response>']
end
@stubs.post "/api/rest/executeBuild.action" do |env|
assert_params env[:body], :auth => "TOKEN123", :buildKey => "ABC"
[200, {}, '<response><error>oh hai</error></response>']
end
@stubs.post "/api/rest/logout.action" do |env|
assert_equal "auth=TOKEN123", env[:body]
[200, {}, '']
end
svc = service :push, data, payload
assert_raise Service::ConfigurationError do
svc.receive
end
@stubs.verify_stubbed_calls
end
def test_requires_valid_login
@stubs.post "/api/rest/login.action" do
[401, {}, '']
end
svc = service :push, data, payload
assert_raise Service::ConfigurationError do
svc.receive
end
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 "/api/rest/login.action" 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
end