lita-rundeck 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3 @@
1
+ <result success='true' apiversion='10'>
2
+ <executions count='0' />
3
+ </result>
@@ -0,0 +1,383 @@
1
+ require "spec_helper"
2
+
3
+ describe Lita::Handlers::Rundeck, lita_handler: true do
4
+
5
+ let(:rundeck_info) do
6
+ File.read("spec/files/info.xml")
7
+ end
8
+
9
+ let(:rundeck_projects) do
10
+ File.read("spec/files/projects.xml")
11
+ end
12
+
13
+ let(:rundeck_projects_empty) do
14
+ File.read("spec/files/projects_empty.xml")
15
+ end
16
+
17
+ let(:rundeck_jobs) do
18
+ File.read("spec/files/jobs.xml")
19
+ end
20
+
21
+ let(:rundeck_jobs_empty) do
22
+ File.read("spec/files/jobs_empty.xml")
23
+ end
24
+
25
+ let(:rundeck_executions) do
26
+ File.read("spec/files/executions.xml")
27
+ end
28
+
29
+ let(:rundeck_executions_empty) do
30
+ File.read("spec/files/executions_empty.xml")
31
+ end
32
+
33
+ let(:rundeck_running) do
34
+ File.read("spec/files/running.xml")
35
+ end
36
+
37
+ let(:rundeck_runnning_empty) do
38
+ File.read("spec/files/running_empty.xml")
39
+ end
40
+
41
+ let(:rundeck_run) do
42
+ File.read("spec/files/run.xml")
43
+ end
44
+
45
+ let(:rundeck_run_conflict) do
46
+ File.read("spec/files/run_conflict.xml")
47
+ end
48
+
49
+ let(:rundeck_run_options_invalid) do
50
+ File.read("spec/files/run_options_invalid.xml")
51
+ end
52
+
53
+ let(:rundeck_run_unauthorized) do
54
+ File.read("spec/files/run_unauthorized.xml")
55
+ end
56
+
57
+ let(:rundeck_options) do
58
+ File.read("spec/files/definition.xml")
59
+ end
60
+
61
+ it { routes_command("rundeck info").to(:info) }
62
+ it { routes_command("rundeck projects").to(:projects) }
63
+ it { routes_command("rundeck jobs").to(:jobs) }
64
+ it { routes_command("rundeck executions").to(:executions) }
65
+ it { routes_command("rundeck running").to(:running) }
66
+ it { routes_command("rundeck aliases").to(:aliases) }
67
+ it { routes_command("rundeck alias register aliasfoo --project Litatest --job dateoutput").to(:alias_register) }
68
+ it { routes_command("rundeck alias forget aliasfoo").to(:alias_forget) }
69
+ it { routes_command("rundeck run aliasfoo").to(:run) }
70
+ it { routes_command("rundeck run aliasfoo --options SECONDS=60").to(:run) }
71
+ it { routes_command("rundeck run --project Litatest --job dateoutput").to(:run) }
72
+ it { routes_command("rundeck run --project Litatest --job dateoutput --options SECONDS=60").to(:run) }
73
+ it { routes_command("rundeck options aliasfoo").to(:options) }
74
+ it { routes_command("rundeck options --project Litatest --job dateoutput").to(:options) }
75
+
76
+ def grab_request(method, status, body)
77
+ response = double('Faraday::Response', status: status, body: body)
78
+ expect_any_instance_of(Faraday::Connection).to \
79
+ receive(method.to_sym).and_return(response)
80
+ end
81
+
82
+ before do
83
+ Lita.config.handlers.rundeck.url = "https://rundeck.mycompany.org"
84
+ Lita.config.handlers.rundeck.token = "abcdefghijzlmnopqrstuvwxyz"
85
+ Lita.config.handlers.rundeck.api_debug = true
86
+ end
87
+
88
+ describe "#info" do
89
+ it "replies with the rundeck server information with no users" do
90
+ grab_request("get", 200, rundeck_info)
91
+ send_command("rundeck info")
92
+ expect(replies.last).to eq <<-EOF.chomp
93
+ System Stats for Rundeck 2.0.4 on node rundeck.mycompany.org
94
+ No users are currently allowed to execute jobs. Ask an admin to 'lita add CHAT_ID rundeck_users'
95
+ EOF
96
+ end
97
+
98
+ context "with users" do
99
+ before do
100
+ allow(Lita::Authorization).to receive(:groups_with_users).and_return(
101
+ :rundeck_users => [ Lita::User.new(1, {"name"=>"Shell User"} ) ]
102
+ )
103
+ end
104
+
105
+ it "replies with the rundeck server information with users" do
106
+ grab_request("get", 200, rundeck_info)
107
+ send_command("rundeck info")
108
+ expect(replies.last).to eq <<-EOF.chomp
109
+ System Stats for Rundeck 2.0.4 on node rundeck.mycompany.org
110
+ Users allowed to execute jobs: Shell User
111
+ EOF
112
+ end
113
+ end
114
+ end
115
+
116
+ describe "#projects" do
117
+ it "replies with the project list" do
118
+ grab_request("get", 200, rundeck_projects)
119
+ send_command("rundeck projects")
120
+ expect(replies.last).to eq <<-EOF.chomp
121
+ [Litatest] - https://rundeck.mycompany.org/api/10/project/Litatest
122
+ EOF
123
+ end
124
+
125
+ it "replies emtpy project list" do
126
+ grab_request("get", 200, rundeck_projects_empty)
127
+ send_command("rundeck projects")
128
+ expect(replies.last).to eq <<-EOF.chomp
129
+ No projects found
130
+ EOF
131
+ end
132
+ end
133
+
134
+ describe "#jobs" do
135
+ it "replies with the jobs list" do
136
+ grab_request("get", 200, rundeck_projects)
137
+ grab_request("get", 200, rundeck_jobs)
138
+ send_command("rundeck alias register aliasfoo --project Litatest --job dateoutput")
139
+ send_command("rundeck jobs")
140
+ expect(replies.last).to eq <<-EOF.chomp
141
+ [Litatest] - Foo:Bar;baz
142
+ aliasfoo = [Litatest] - dateoutput
143
+ [Litatest] - test2
144
+ EOF
145
+ end
146
+
147
+ it "replies with an empty jobs list" do
148
+ grab_request("get", 200, rundeck_projects)
149
+ grab_request("get", 200, rundeck_jobs_empty)
150
+ send_command("rundeck jobs")
151
+ expect(replies.last).to eq <<-EOF.chomp
152
+ No jobs found
153
+ EOF
154
+ end
155
+ end
156
+
157
+ describe "#executions" do
158
+ it "replies with the executions list" do
159
+ grab_request("get", 200, rundeck_projects)
160
+ grab_request("get", 200, rundeck_executions)
161
+ send_command("rundeck executions")
162
+ expect(replies.last).to eq <<-EOF.chomp
163
+ 254 succeeded Shell User [Litatest] dateoutput SECONDS:60 start:2014-08-10T06:19:22Z end:2014-08-10T06:20:23Z
164
+ 255 succeeded Shell User [Litatest] dateoutput SECONDS:600 start:2014-08-10T06:20:33Z end:2014-08-10T06:30:36Z
165
+ 256 succeeded Shell User [Litatest] dateoutput start:2014-08-10T18:21:41Z end:2014-08-10T18:21:41Z
166
+ 257 succeeded Shell User [Litatest] dateoutput SECONDS:60 start:2014-08-10T21:31:29Z end:2014-08-10T21:32:30Z
167
+ 258 succeeded Shell User [Litatest] dateoutput SECOND:600 start:2014-08-10T21:33:06Z end:2014-08-10T21:33:06Z
168
+ 259 succeeded Shell User [Litatest] dateoutput SECONDS:600 start:2014-08-10T21:34:16Z end:2014-08-10T21:44:21Z
169
+ 260 succeeded Shell User [Litatest] dateoutput start:2014-08-10T22:03:37Z end:2014-08-10T22:03:40Z
170
+ 282 succeeded Shell User [Litatest] dateoutput SECONDS:60 start:2014-08-14T01:07:09Z end:2014-08-14T01:08:09Z
171
+ 283 succeeded Shell User [Litatest] dateoutput SECONDS:5 start:2014-08-14T02:27:41Z end:2014-08-14T02:27:46Z
172
+ 285 succeeded Shell User [Litatest] dateoutput SECONDS:600 start:2014-08-14T15:06:28Z end:2014-08-14T15:16:32Z
173
+ EOF
174
+ end
175
+
176
+ it "replies with the executions list limited to 2" do
177
+ grab_request("get", 200, rundeck_projects)
178
+ grab_request("get", 200, rundeck_executions)
179
+ send_command("rundeck executions 2")
180
+ expect(replies.last).to eq <<-EOF.chomp
181
+ 283 succeeded Shell User [Litatest] dateoutput SECONDS:5 start:2014-08-14T02:27:41Z end:2014-08-14T02:27:46Z
182
+ 285 succeeded Shell User [Litatest] dateoutput SECONDS:600 start:2014-08-14T15:06:28Z end:2014-08-14T15:16:32Z
183
+ EOF
184
+ end
185
+
186
+ it "replies with an empty executions list" do
187
+ grab_request("get", 200, rundeck_projects)
188
+ grab_request("get", 200, rundeck_executions_empty)
189
+ send_command("rundeck executions")
190
+ expect(replies.last).to eq <<-EOF.chomp
191
+ No executions found
192
+ EOF
193
+ end
194
+ end
195
+
196
+ describe "#running" do
197
+ it "replies with the running list" do
198
+ grab_request("get", 200, rundeck_projects)
199
+ grab_request("get", 200, rundeck_running)
200
+ send_command("rundeck running")
201
+ expect(replies.last).to eq <<-EOF.chomp
202
+ 285 running Shell User [Litatest] dateoutput SECONDS:600 start:2014-08-14T15:06:28Z
203
+ EOF
204
+ end
205
+
206
+ it "replies with an empty running list" do
207
+ grab_request("get", 200, rundeck_projects)
208
+ grab_request("get", 200, rundeck_executions_empty)
209
+ send_command("rundeck running")
210
+ expect(replies.last).to eq <<-EOF.chomp
211
+ No executions found
212
+ EOF
213
+ end
214
+ end
215
+
216
+ describe "#run" do
217
+ it "submit job and be denied because of authorization" do
218
+ allow(Lita::Authorization).to receive(:user_in_group?).and_return(false)
219
+ send_command("rundeck run --project Litatest --job dateoutput --options SECONDS=60")
220
+ expect(replies.last).to eq <<-EOF.chomp
221
+ You aren't authorized to run jobs
222
+ EOF
223
+ end
224
+
225
+ it "submit aliased job and have it succeed" do
226
+ allow(Lita::Authorization).to receive(:user_in_group?).and_return(true)
227
+ grab_request("get", 200, rundeck_projects)
228
+ grab_request("get", 200, rundeck_jobs)
229
+ grab_request("get", 200, rundeck_run)
230
+ send_command("rundeck alias register aliasfoo --project Litatest --job dateoutput")
231
+ send_command("rundeck run aliasfoo --options SECONDS=60")
232
+ expect(replies.last).to eq <<-EOF.chomp
233
+ Execution 285 is running
234
+ EOF
235
+ end
236
+
237
+ it "submit fully qualified job and have it succeed" do
238
+ allow(Lita::Authorization).to receive(:user_in_group?).and_return(true)
239
+ grab_request("get", 200, rundeck_projects)
240
+ grab_request("get", 200, rundeck_jobs)
241
+ grab_request("get", 200, rundeck_run)
242
+ send_command("rundeck run --project Litatest --job dateoutput --options SECONDS=60")
243
+ expect(replies.last).to eq <<-EOF.chomp
244
+ Execution 285 is running
245
+ EOF
246
+ end
247
+
248
+ it "submit a non-existent job" do
249
+ allow(Lita::Authorization).to receive(:user_in_group?).and_return(true)
250
+ send_command("rundeck run not-a-real-alias")
251
+ expect(replies.last).to eq <<-EOF.chomp
252
+ Can't find an alias or project and job
253
+ EOF
254
+ end
255
+
256
+ it "submit a conflicting job" do
257
+ allow(Lita::Authorization).to receive(:user_in_group?).and_return(true)
258
+ grab_request("get", 200, rundeck_projects)
259
+ grab_request("get", 200, rundeck_jobs)
260
+ grab_request("get", 200, rundeck_run)
261
+ grab_request("get", 200, rundeck_run_conflict)
262
+ send_command("rundeck run --project Litatest --job dateoutput --options SECONDS=60")
263
+ send_command("rundeck run --project Litatest --job dateoutput --options SECONDS=60")
264
+ expect(replies.last).to eq <<-EOF.chomp
265
+ Job is already running and only allows one execution at a time
266
+ EOF
267
+ end
268
+
269
+ it "submit a job with bad options" do
270
+ allow(Lita::Authorization).to receive(:user_in_group?).and_return(true)
271
+ grab_request("get", 200, rundeck_projects)
272
+ grab_request("get", 200, rundeck_jobs)
273
+ grab_request("get", 200, rundeck_run_options_invalid)
274
+ send_command("rundeck run --project Litatest --job dateoutput --options SECONDS=XXX")
275
+ expect(replies.last).to eq <<-EOF.chomp
276
+ Job options were not valid: Option 'SECONDS' doesn't match regular expression \\d+, value: XXX
277
+ EOF
278
+ end
279
+
280
+ it "submit a job against a server missing the runAs permission" do
281
+ allow(Lita::Authorization).to receive(:user_in_group?).and_return(true)
282
+ grab_request("get", 200, rundeck_projects)
283
+ grab_request("get", 200, rundeck_jobs)
284
+ grab_request("get", 200, rundeck_run_unauthorized)
285
+ send_command("rundeck run --project Litatest --job dateoutput --options SECONDS=XXX")
286
+ expect(replies.last).to eq <<-EOF.chomp
287
+ API token is unauthorized or lacks runAs permission; check the apitoken.aclpolicy
288
+ EOF
289
+ end
290
+ end
291
+
292
+ describe "#aliases" do
293
+ it "lists empty aliases list" do
294
+ send_command("rundeck aliases")
295
+ expect(replies.last).to eq <<-EOF.chomp
296
+ No aliases have been registered yet
297
+ EOF
298
+ end
299
+
300
+ it "lists aliases" do
301
+ send_command("rundeck alias register aliasfoo --project Litatest --job dateoutput")
302
+ send_command("rundeck aliases")
303
+ expect(replies.last).to eq <<-EOF.chomp
304
+ Alias = [Project] - Job
305
+ aliasfoo = [Litatest] - dateoutput
306
+ EOF
307
+ end
308
+
309
+ end
310
+
311
+ describe "#alias_register" do
312
+ it "registers a new alias" do
313
+ send_command("rundeck alias register aliasfoo --project Litatest --job dateoutput")
314
+ expect(replies.last).to eq <<-EOF.chomp
315
+ Alias registered
316
+ EOF
317
+ end
318
+
319
+ it "fails to registers an existing alias" do
320
+ send_command("rundeck alias register aliasfoo --project Litatest --job dateoutput")
321
+ send_command("rundeck alias register aliasfoo --project Litatest --job dateoutput")
322
+ expect(replies.last).to eq <<-EOF.chomp
323
+ Alias already exists
324
+ EOF
325
+ end
326
+
327
+ it "fails on a bad format" do
328
+ send_command("rundeck alias register aliasfoo")
329
+ expect(replies.last).to eq <<-EOF.chomp
330
+ Format is bad, see help for more info
331
+ EOF
332
+ end
333
+ end
334
+
335
+ describe "#alias_forget" do
336
+ it "removes an alias" do
337
+ send_command("rundeck alias register aliasfoo --project Litatest --job dateoutput")
338
+ send_command("rundeck alias forget aliasfoo")
339
+ expect(replies.last).to eq <<-EOF.chomp
340
+ Alias removed
341
+ EOF
342
+ end
343
+
344
+ it "fails to removes a non-existent alias" do
345
+ send_command("rundeck alias forget not-a-real-alias")
346
+ expect(replies.last).to eq <<-EOF.chomp
347
+ Alias not found
348
+ EOF
349
+ end
350
+ end
351
+
352
+ describe "#options" do
353
+ it "describe options of a job" do
354
+ grab_request("get", 200, rundeck_projects)
355
+ grab_request("get", 200, rundeck_jobs)
356
+ grab_request("get", 200, rundeck_options)
357
+ send_command("rundeck options --project Litatest --job dateoutput")
358
+ expect(replies.last).to eq <<-EOF.chomp
359
+ [Litatest] - dateoutput
360
+ * SECONDS (REQUIRED)
361
+ EOF
362
+ end
363
+
364
+ it "describe options of an aliased job" do
365
+ grab_request("get", 200, rundeck_projects)
366
+ grab_request("get", 200, rundeck_jobs)
367
+ grab_request("get", 200, rundeck_options)
368
+ send_command("rundeck alias register aliasfoo --project Litatest --job dateoutput")
369
+ send_command("rundeck options aliasfoo")
370
+ expect(replies.last).to eq <<-EOF.chomp
371
+ [Litatest] - dateoutput
372
+ * SECONDS (REQUIRED)
373
+ EOF
374
+ end
375
+
376
+ it "describe options of a non-existent job" do
377
+ send_command("rundeck options aliasfoo")
378
+ expect(replies.last).to eq <<-EOF.chomp
379
+ Can't find an alias or project and job
380
+ EOF
381
+ end
382
+ end
383
+ end
@@ -0,0 +1,10 @@
1
+ require "simplecov"
2
+ require "coveralls"
3
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
4
+ SimpleCov::Formatter::HTMLFormatter,
5
+ Coveralls::SimpleCov::Formatter
6
+ ]
7
+ SimpleCov.start { add_filter "/spec/" }
8
+
9
+ require "lita-rundeck"
10
+ require "lita/rspec"
metadata ADDED
@@ -0,0 +1,199 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lita-rundeck
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Harlan Barnes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-08-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: lita
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '3.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '3.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: xml-simple
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.1.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.4
41
+ - !ruby/object:Gem::Dependency
42
+ name: lita-keyword-arguments
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: 3.0.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: 3.0.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: coveralls
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Lita handler for interacting with Rundeck
126
+ email:
127
+ - hbarnes@pobox.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - .gitignore
133
+ - .travis.yml
134
+ - Gemfile
135
+ - LICENSE
136
+ - README.md
137
+ - Rakefile
138
+ - lib/lita-rundeck.rb
139
+ - lib/lita/handlers/rundeck.rb
140
+ - lita-rundeck.gemspec
141
+ - locales/en.yml
142
+ - spec/files/definition.xml
143
+ - spec/files/executions.xml
144
+ - spec/files/executions_empty.xml
145
+ - spec/files/info.xml
146
+ - spec/files/jobs.xml
147
+ - spec/files/jobs_empty.xml
148
+ - spec/files/projects.xml
149
+ - spec/files/projects_empty.xml
150
+ - spec/files/run.xml
151
+ - spec/files/run_conflict.xml
152
+ - spec/files/run_options_invalid.xml
153
+ - spec/files/run_unauthorized.xml
154
+ - spec/files/running.xml
155
+ - spec/files/running_empty.xml
156
+ - spec/lita/handlers/rundeck_spec.rb
157
+ - spec/spec_helper.rb
158
+ homepage: https://github.com/harlanbarnes/lita-rundeck
159
+ licenses:
160
+ - MIT
161
+ metadata:
162
+ lita_plugin_type: handler
163
+ post_install_message:
164
+ rdoc_options: []
165
+ require_paths:
166
+ - lib
167
+ required_ruby_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - '>='
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ required_rubygems_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - '>='
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ requirements: []
178
+ rubyforge_project:
179
+ rubygems_version: 2.0.14
180
+ signing_key:
181
+ specification_version: 4
182
+ summary: Lita handler for interacting with Rundeck
183
+ test_files:
184
+ - spec/files/definition.xml
185
+ - spec/files/executions.xml
186
+ - spec/files/executions_empty.xml
187
+ - spec/files/info.xml
188
+ - spec/files/jobs.xml
189
+ - spec/files/jobs_empty.xml
190
+ - spec/files/projects.xml
191
+ - spec/files/projects_empty.xml
192
+ - spec/files/run.xml
193
+ - spec/files/run_conflict.xml
194
+ - spec/files/run_options_invalid.xml
195
+ - spec/files/run_unauthorized.xml
196
+ - spec/files/running.xml
197
+ - spec/files/running_empty.xml
198
+ - spec/lita/handlers/rundeck_spec.rb
199
+ - spec/spec_helper.rb