jenkins_api_client 0.14.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.travis.yml +5 -23
  4. data/CHANGELOG.md +104 -35
  5. data/CONTRIBUTORS.md +1 -11
  6. data/Gemfile +4 -2
  7. data/README.md +107 -7
  8. data/Rakefile +1 -0
  9. data/Vagrantfile +6 -8
  10. data/jenkins_api_client.gemspec +30 -12
  11. data/lib/jenkins_api_client/cli/helper.rb +1 -0
  12. data/lib/jenkins_api_client/client.rb +162 -69
  13. data/lib/jenkins_api_client/exceptions.rb +26 -17
  14. data/lib/jenkins_api_client/job.rb +321 -75
  15. data/lib/jenkins_api_client/node.rb +22 -10
  16. data/lib/jenkins_api_client/plugin_manager.rb +460 -0
  17. data/lib/jenkins_api_client/urihelper.rb +17 -0
  18. data/lib/jenkins_api_client/user.rb +4 -2
  19. data/lib/jenkins_api_client/version.rb +3 -3
  20. data/lib/jenkins_api_client/view.rb +10 -7
  21. data/lib/jenkins_api_client.rb +1 -0
  22. data/scripts/login_with_pry.rb +54 -0
  23. data/spec/func_tests/client_spec.rb +3 -3
  24. data/spec/func_tests/job_spec.rb +90 -7
  25. data/spec/func_tests/{node_spec.rb → node_spec.rb.pending} +9 -9
  26. data/spec/func_tests/plugin_spec.rb +148 -0
  27. data/spec/unit_tests/client_spec.rb +108 -27
  28. data/spec/unit_tests/fake_http_response.rb +9 -0
  29. data/spec/unit_tests/fixtures/files/available_plugins.json +1 -0
  30. data/spec/unit_tests/fixtures/files/installed_plugins.json +1 -0
  31. data/spec/unit_tests/fixtures/files/updatable_plugins.json +1 -0
  32. data/spec/unit_tests/job_spec.rb +109 -6
  33. data/spec/unit_tests/node_spec.rb +18 -6
  34. data/spec/unit_tests/plugin_spec.rb +165 -0
  35. data/spec/unit_tests/spec_helper.rb +11 -1
  36. data/spec/unit_tests/system_spec.rb +2 -1
  37. data/spec/unit_tests/user_spec.rb +1 -1
  38. data/travis/hudson.model.UpdateCenter.xml +7 -0
  39. data/travis/setup.sh +2 -1
  40. metadata +76 -64
@@ -49,6 +49,26 @@ describe JenkinsApi::Client do
49
49
  ).not_to raise_error
50
50
  end
51
51
 
52
+ it "initializes the username and password from server_url" do
53
+ client = JenkinsApi::Client.new(
54
+ :server_url => 'http://someuser:asdf@localhost'
55
+ )
56
+
57
+ client.instance_variable_get('@username').should == 'someuser'
58
+ client.instance_variable_get('@password').should == 'asdf'
59
+ end
60
+
61
+ it "uses explicit username, password over one in the server_url" do
62
+ client = JenkinsApi::Client.new(
63
+ :server_url => 'http://someuser:asdf@localhost',
64
+ :username => 'otheruser',
65
+ :password => '1234'
66
+ )
67
+
68
+ client.instance_variable_get('@username').should == 'otheruser'
69
+ client.instance_variable_get('@password').should == '1234'
70
+ end
71
+
52
72
  it "initializes with proxy args without exception" do
53
73
  expect(
54
74
  lambda do
@@ -142,75 +162,136 @@ describe JenkinsApi::Client do
142
162
  end
143
163
 
144
164
  describe "InstanceMethods" do
145
- describe "#getroot" do
165
+ describe "#get_root" do
146
166
  it "is defined with no parameters" do
147
- expect(
148
- lambda { @client.get_root }
149
- ).not_to raise_error(NoMethodError)
167
+ @client.respond_to?(:get_root).should be_true
168
+ @client.method(:get_root).parameters.size.should == 0
150
169
  end
151
170
  end
152
171
 
153
172
  describe "#api_get_request" do
154
173
  it "defined and should accept url_prefix, tree, and url_suffix" do
155
- expect(
156
- lambda { @client.api_get_request("/some/prefix", "tree", "/json") }
157
- ).not_to raise_error(NoMethodError)
174
+ @client.respond_to?(:api_get_request).should be_true
175
+ @client.method(:api_get_request).parameters.size.should == 4
158
176
  end
159
177
  end
160
178
 
161
179
  describe "#api_post_request" do
162
180
  it "is defined and should accept url_prefix" do
163
- expect(
164
- lambda { @client.api_post_request("/some/prefix") }
165
- ).not_to raise_error(NoMethodError)
181
+ @client.respond_to?(:api_post_request).should be_true
182
+ @client.method(:api_post_request).parameters.size.should == 3
166
183
  end
167
184
  end
168
185
 
169
186
  describe "#get_config" do
170
187
  it "is defined and should accept url_prefix" do
171
- expect(
172
- lambda { @client.get_config("/some/prefix") }
173
- ).not_to raise_error(NoMethodError)
188
+ @client.respond_to?(:get_config).should be_true
189
+ @client.method(:get_config).parameters.size.should == 1
174
190
  end
175
191
  end
176
192
 
177
193
  describe "#post_config" do
178
194
  it "is defined and should accept url_prefix and xml" do
179
- expect(
180
- lambda { @client.post_config("/some/prefix", "<tag></tag>") }
181
- ).not_to raise_error(NoMethodError)
195
+ @client.respond_to?(:post_config).should be_true
196
+ @client.method(:post_config).parameters.size.should == 2
182
197
  end
183
198
  end
184
199
 
185
200
  describe "#get_jenkins_version" do
186
201
  it "is defined and accepts no parameters" do
187
- expect(
188
- lambda { @client.get_jenkins_version }
189
- ).not_to raise_error(NoMethodError)
202
+ @client.respond_to?(:get_jenkins_version).should be_true
203
+ @client.method(:get_jenkins_version).parameters.size.should == 0
190
204
  end
191
205
  end
192
206
 
193
207
  describe "#get_hudson_version" do
194
208
  it "is defined and accepts no parameters" do
195
- expect(
196
- lambda { @client.get_hudson_version }
197
- ).not_to raise_error(NoMethodError)
209
+ @client.respond_to?(:get_hudson_version).should be_true
210
+ @client.method(:get_hudson_version).parameters.size.should == 0
198
211
  end
199
212
  end
200
213
 
201
214
  describe "#get_server_date" do
202
215
  it "is defined and accepts no parameters" do
203
- expect(
204
- lambda { @client.get_server_date }
205
- ).not_to raise_error(NoMethodError)
216
+ @client.respond_to?(:get_server_date).should be_true
217
+ @client.method(:get_server_date).parameters.size.should == 0
218
+ end
219
+ end
220
+
221
+ describe "#exec_script" do
222
+ it "is defined and should accept script to execute" do
223
+ @client.respond_to?(:exec_script).should be_true
224
+ @client.method(:exec_script).parameters.size.should == 1
206
225
  end
207
226
  end
208
227
 
209
228
  describe "#exec_cli" do
210
229
  it "is defined and should execute the CLI" do
230
+ @client.respond_to?(:exec_cli).should be_true
231
+ @client.method(:exec_cli).parameters.size.should == 2
232
+ end
233
+ end
234
+
235
+ describe "#deconstruct_version_string" do
236
+ it "is defined and accepts a single param" do
237
+ @client.respond_to?(:deconstruct_version_string).should be_true
238
+ @client.method(:deconstruct_version_string).parameters.size.should == 1
239
+ end
240
+
241
+ it "takes a version string in the form 'a.b' and returns an array [a,b,c]" do
242
+ TEST_2_PART_VERSION_STRING = "1.002"
243
+ version = @client.deconstruct_version_string(TEST_2_PART_VERSION_STRING)
244
+ version.should_not be_nil
245
+ version.should_not be_empty
246
+ version.size.should eql 3
247
+ version[0].should eql 1
248
+ version[1].should eql 2
249
+ version[2].should eql 0
250
+ end
251
+
252
+ it "takes a version string in the form 'a.b.c' and returns an array [a,b]" do
253
+ TEST_3_PART_VERSION_STRING = "1.002.3"
254
+ version = @client.deconstruct_version_string(TEST_3_PART_VERSION_STRING)
255
+ version.should_not be_nil
256
+ version.should_not be_empty
257
+ version.size.should eql 3
258
+ version[0].should eql 1
259
+ version[1].should eql 2
260
+ version[2].should eql 3
261
+ end
262
+
263
+ it "should fail if parameter is not a string" do
211
264
  expect(
212
- lambda { @client.exec_cli("version") }
213
- ).not_to raise_error(NoMethodError)
265
+ lambda { @client.deconstruct_version_string(1) }
266
+ ).to raise_error(NoMethodError) # match for fixnum
267
+ end
268
+
269
+ it "should return nil if parameter is not a string in the form '\d+.\d+(.\d+)'" do
270
+ @client.deconstruct_version_string("A.B").should be_nil
271
+ @client.deconstruct_version_string("1").should be_nil
272
+ @client.deconstruct_version_string("1.").should be_nil
273
+ @client.deconstruct_version_string("1.2.3.4").should be_nil
274
+ end
275
+ end
276
+
277
+ describe "#compare_versions" do
278
+ it "is defined and accepts two params" do
279
+ @client.respond_to?(:compare_versions).should be_true
280
+ @client.method(:compare_versions).parameters.size.should == 2
281
+ end
282
+
283
+ it "should correctly compare version numbers" do
284
+ @client.compare_versions("1.0", "1.0").should eql(0)
285
+ @client.compare_versions("1.0", "1.1").should eql(-1)
286
+ @client.compare_versions("1.1", "1.0").should eql(1)
287
+ @client.compare_versions("2.0", "1.99").should eql(1)
288
+ @client.compare_versions("1.10", "1.2").should eql(1)
289
+
290
+ @client.compare_versions("1.0.0", "1.0.0").should eql(0)
291
+ @client.compare_versions("1.0", "1.0.1").should eql(-1)
292
+ @client.compare_versions("1.1", "1.0.1").should eql(1)
293
+ @client.compare_versions("2.0.0", "1.999.99").should eql(1)
294
+ @client.compare_versions("1.0.10", "1.0.2").should eql(1)
214
295
  end
215
296
  end
216
297
  end
@@ -0,0 +1,9 @@
1
+ class FakeResponse
2
+ attr_accessor :code, :body, :header
3
+
4
+ def initialize(code=200, body='eww, a body', header={})
5
+ @body = body
6
+ @code = code
7
+ @header = header
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ {"availables":[{"name":"accurev","version":"0.6.18"},{"name":"active-directory","version":"1.33"},{"name":"AdaptivePlugin","version":"0.1"},{"name":"additional-identities-plugin","version":"1.0"},{"name":"all-changes","version":"1.3"},{"name":"analysis-collector","version":"1.35"},{"name":"analysis-core","version":"1.49"},{"name":"AnchorChain","version":"1.0"},{"name":"android-emulator","version":"2.10"},{"name":"android-lint","version":"2.1"},{"name":"ansicolor","version":"0.3.1"},{"name":"AntepediaReporter-CI-plugin","version":"1.6.3"},{"name":"antexec","version":"1.8"},{"name":"any-buildstep","version":"0.1"},{"name":"anything-goes-formatter","version":"1.0"},{"name":"appaloosa-plugin","version":"1.4.0"},{"name":"appdynamics-dashboard","version":"1.0.1"},{"name":"application-director-plugin","version":"1.3"},{"name":"artifact-diff-plugin","version":"1.2"},{"name":"artifactdeployer","version":"0.27"},{"name":"artifactory","version":"2.1.6"},{"name":"asakusa-satellite-plugin","version":"0.1.1"},{"name":"assembla","version":"1.4"},{"name":"assembla-auth","version":"1.03"},{"name":"associated-files","version":"0.2.1"},{"name":"async-http-client","version":"1.7.8"},{"name":"async-job","version":"1.3"},{"name":"audit-trail","version":"1.8"},{"name":"audit2db","version":"0.5"},{"name":"avatar","version":"1.2"},{"name":"backlog","version":"1.9"},{"name":"backup","version":"1.6.1"},{"name":"backup-interrupt-plugin","version":"1.0"},{"name":"bamboo-notifier","version":"1.1"},{"name":"batch-task","version":"1.17"},{"name":"bazaar","version":"1.22"},{"name":"beer","version":"1.2"},{"name":"bitbucket-oauth","version":"0.1"},{"name":"bitkeeper","version":"1.7"},{"name":"blame-upstream-commiters","version":"1.2"},{"name":"BlameSubversion","version":"1.200"},{"name":"BlazeMeterJenkinsPlugin","version":"1.04-beta-1"},{"name":"blink1","version":"1.1"},{"name":"blitz_io-jenkins","version":"1.04"},{"name":"brakeman","version":"0.7"},{"name":"browser-axis-plugin","version":"1.0"},{"name":"bruceschneier","version":"0.1"},{"name":"buckminster","version":"1.1.1"},{"name":"buddycloud","version":"0.2.3"},{"name":"bugzilla","version":"1.5"},{"name":"build-alias-setter","version":"0.1"},{"name":"build-blocker-plugin","version":"1.4.1"},{"name":"build-cause-run-condition","version":"0.1"},{"name":"build-failure-analyzer","version":"1.5.0"},{"name":"build-flow-plugin","version":"0.9"},{"name":"build-keeper-plugin","version":"1.3"},{"name":"build-metrics","version":"1.0"},{"name":"build-name-setter","version":"1.3"},{"name":"build-node-column","version":"0.1"},{"name":"build-pipeline-plugin","version":"1.3.4.1"},{"name":"build-publisher","version":"1.17"},{"name":"build-timeout","version":"1.11"},{"name":"build-token-root","version":"1.0"},{"name":"build-user-vars-plugin","version":"1.1"},{"name":"build-view-column","version":"0.1"},{"name":"build-with-parameters","version":"1.1"},{"name":"buildcoin-plugin","version":"1.4"},{"name":"buildcontext-capture","version":"0.6"},{"name":"buildheroes","version":"0.2"},{"name":"buildresult-trigger","version":"0.12"},{"name":"buildtriggerbadge","version":"1.0"},{"name":"built-on-column","version":"1.1"},{"name":"bulk-builder","version":"1.5"},{"name":"caliper-ci","version":"2.3"},{"name":"call-remote-job-plugin","version":"1.0.16"},{"name":"campfire","version":"2.6"},{"name":"caroline","version":"1.0"},{"name":"cas-plugin","version":"1.1.1"},{"name":"cas1","version":"1.0.1"},{"name":"categorized-view","version":"1.0"},{"name":"cccc","version":"0.6"},{"name":"ccm","version":"3.0"},{"name":"changelog-history","version":"1.3"},{"name":"changes-since-last-success","version":"0.5"},{"name":"checkstyle","version":"3.35"},{"name":"chosen","version":"1.0"},{"name":"chrome-frame-plugin","version":"1.1"},{"name":"chromedriver","version":"1.0"},{"name":"chucknorris","version":"0.5"},{"name":"ci-game","version":"1.19"},{"name":"claim","version":"2.2"},{"name":"clamav","version":"0.2.1"},{"name":"clang-scanbuild-plugin","version":"1.4"},{"name":"clearcase","version":"1.3.14"},{"name":"clearcase-release","version":"0.3"},{"name":"clearcase-ucm-baseline","version":"1.7.4"},{"name":"clearcase-ucm-plugin","version":"1.3.8"},{"name":"clone-workspace-scm","version":"0.5"},{"name":"cloudbees-deployer-plugin","version":"1.7"},{"name":"cloudbees-enterprise-plugins","version":"13.5.0"},{"name":"cloudbees-plugin-gateway","version":"4.0"},{"name":"cloudtest","version":"2.4"},{"name":"clover","version":"4.0.6"},{"name":"cloverphp","version":"0.3.3"},{"name":"cluster-stats","version":"0.4.4"},{"name":"cmakebuilder","version":"1.9"},{"name":"cmvc","version":"0.4"},{"name":"cobertura","version":"1.9.1"},{"name":"cocoapods-integration","version":"0.2.0"},{"name":"codecover","version":"1.1"},{"name":"codescanner","version":"0.11"},{"name":"collabnet","version":"1.1.8"},{"name":"collabnet-uc4-deploy","version":"1.0"},{"name":"collapsing-console-sections","version":"1.3"},{"name":"ColumnPack-plugin","version":"1.0.3"},{"name":"ColumnsPlugin","version":"1.0"},{"name":"compact-columns","version":"1.9"},{"name":"computer-queue-plugin","version":"1.3"},{"name":"concordionpresenter","version":"0.7"},{"name":"conditional-buildstep","version":"1.2.2"},{"name":"config-autorefresh-plugin","version":"1.0"},{"name":"config-file-provider","version":"2.5.1"},{"name":"config-rotator","version":"1.1.1"},{"name":"configurationslicing","version":"1.37"},{"name":"configure-job-column-plugin","version":"1.0"},{"name":"confluence-publisher","version":"1.8"},{"name":"console-column-plugin","version":"1.5"},{"name":"copy-data-to-workspace-plugin","version":"1.0"},{"name":"copy-project-link","version":"1.1"},{"name":"copy-to-slave","version":"1.4"},{"name":"copyartifact","version":"1.27"},{"name":"countjobs-viewstabbar","version":"1.0.0"},{"name":"covcomplplot","version":"1.1.1"},{"name":"coverity","version":"1.2.5"},{"name":"cppcheck","version":"1.13"},{"name":"cppncss","version":"1.1"},{"name":"cpptest","version":"0.9"},{"name":"crap4j","version":"0.8"},{"name":"create-fingerprint","version":"1.2"},{"name":"create-fingerprint-plugin","version":"1.0"},{"name":"createjobadvanced","version":"1.7"},{"name":"crittercism-dsym","version":"1.1"},{"name":"cron_column","version":"1.003"},{"name":"crowd","version":"1.2"},{"name":"crowd2","version":"1.5"},{"name":"cucumber","version":"0.0.2"},{"name":"cucumber-reports","version":"0.0.21"},{"name":"custom-job-icon","version":"0.2"},{"name":"custom-tools-plugin","version":"0.2"},{"name":"CustomHistory","version":"1.5"},{"name":"cvs-tag","version":"1.7"},{"name":"cygpath","version":"1.5"},{"name":"darcs","version":"0.3.11"},{"name":"dashboard-view","version":"2.7"},{"name":"database","version":"1.1"},{"name":"database-drizzle","version":"1.0"},{"name":"database-h2","version":"1.0"},{"name":"database-mysql","version":"1.0"},{"name":"database-postgresql","version":"1.0"},{"name":"datical-db-plugin","version":"1.0.4"},{"name":"dbCharts","version":"0.4"},{"name":"debian-package-builder","version":"1.4.2"},{"name":"delete-log-plugin","version":"1.0"},{"name":"delta-cloud","version":"1.0.1"},{"name":"dependency-queue-plugin","version":"1.1"},{"name":"dependencyanalyzer","version":"0.6"},{"name":"depgraph-view","version":"0.11"},{"name":"deploy","version":"1.9"},{"name":"deploy-websphere","version":"1.0"},{"name":"deployed-on-column","version":"1.7"},{"name":"deploygate-plugin","version":"1.2"},{"name":"description-column-plugin","version":"1.3"},{"name":"description-setter","version":"1.8"},{"name":"devstack","version":"0.0.6"},{"name":"dimensionsscm","version":"0.8.1"},{"name":"discard-old-build","version":"1.05"},{"name":"disk-usage","version":"0.20"},{"name":"display-upstream-changes","version":"0.1"},{"name":"distfork","version":"1.3"},{"name":"distTest","version":"1.0"},{"name":"doclinks","version":"0.5"},{"name":"dos-trigger","version":"1.23"},{"name":"downstream-buildview","version":"1.8"},{"name":"downstream-ext","version":"1.8"},{"name":"doxygen","version":"0.13"},{"name":"drmemory-plugin","version":"0.1.1"},{"name":"dropdown-viewstabbar-plugin","version":"1.6"},{"name":"dry","version":"2.34"},{"name":"dry-run","version":"0.9"},{"name":"dtkit","version":"1.12"},{"name":"dumpinfo-buildwrapper-plugin","version":"1.1"},{"name":"dynamic-axis","version":"1.0.1"},{"name":"dynamicparameter","version":"0.2.0"},{"name":"easyant","version":"1.1"},{"name":"ec2","version":"1.18"},{"name":"eclipse-update-site","version":"1.2"},{"name":"eggplant-plugin","version":"1.4"},{"name":"elastic-axis","version":"1.1"},{"name":"elOyente","version":"1.2"},{"name":"email-ext","version":"2.30.2"},{"name":"email-ext-recipients-column","version":"1.0"},{"name":"embeddable-build-status","version":"1.4"},{"name":"emma","version":"1.29"},{"name":"emmacoveragecolumn","version":"0.0.4"},{"name":"emotional-hudson","version":"1.3"},{"name":"emotional-jenkins-plugin","version":"1.1"},{"name":"enhanced-old-build-discarder","version":"1.0"},{"name":"envfile","version":"1.2"},{"name":"envinject","version":"1.87"},{"name":"environment-script","version":"1.1.2"},{"name":"escaped-markup-plugin","version":"0.1"},{"name":"excludeMatrixParent","version":"1.1"},{"name":"Exclusion","version":"0.8"},{"name":"exclusive-execution","version":"0.7"},{"name":"exclusive-label-plugin","version":"1.0"},{"name":"extended-choice-parameter","version":"0.28"},{"name":"extended-read-permission","version":"1.0"},{"name":"extensible-choice-parameter","version":"1.2.1"},{"name":"extension-filter","version":"1.0"},{"name":"external-scheduler","version":"1.0"},{"name":"externalresource-dispatcher","version":"1.1.0"},{"name":"extra-columns","version":"1.9"},{"name":"extreme-feedback","version":"1.2"},{"name":"ezwall","version":"0.2"},{"name":"fail-the-build-plugin","version":"1.0"},{"name":"favorite","version":"1.14"},{"name":"favorite-view","version":"1.0"},{"name":"feature-branch-notifier","version":"1.1"},{"name":"file-leak-detector","version":"1.2"},{"name":"files-found-trigger","version":"1.3"},{"name":"filesystem_scm","version":"1.20"},{"name":"findbugs","version":"4.48"},{"name":"fitnesse","version":"1.8"},{"name":"flashlog-plugin","version":"1.0"},{"name":"flexible-publish","version":"0.10"},{"name":"flexteam","version":"1.1"},{"name":"flow","version":"1.1"},{"name":"fogbugz","version":"1.0"},{"name":"form-element-path","version":"1.4"},{"name":"fortify360","version":"3.81"},{"name":"fstrigger","version":"0.36"},{"name":"ftppublisher","version":"1.2"},{"name":"fxcop-runner","version":"1.1"},{"name":"gallio","version":"1.6"},{"name":"gant","version":"1.2"},{"name":"gatling","version":"1.0.3"},{"name":"gcal","version":"0.4"},{"name":"gcm-notification","version":"1.0"},{"name":"gearman-plugin","version":"0.0.1"},{"name":"gerrit","version":"0.7"},{"name":"gerrit-trigger","version":"2.10.1"},{"name":"ghprb","version":"1.8"},{"name":"girls","version":"1.0.0"},{"name":"git","version":"1.4.0"},{"name":"git-chooser-alternative","version":"1.0"},{"name":"git-client","version":"1.0.7"},{"name":"git-notes","version":"0.0.4"},{"name":"git-parameter","version":"0.2"},{"name":"git-server","version":"1.1"},{"name":"git-userContent","version":"1.3"},{"name":"github","version":"1.6"},{"name":"github-api","version":"1.42"},{"name":"github-oauth","version":"0.13.1"},{"name":"github-sqs-plugin","version":"1.5"},{"name":"gitlab-hook","version":"0.2.6"},{"name":"gitlab-merge-request-jenkins","version":"1.1.1"},{"name":"gitorious","version":"1.0"},{"name":"global-build-stats","version":"1.3"},{"name":"global-variable-string-parameter","version":"1.1"},{"name":"gnat","version":"0.14"},{"name":"googleanalytics","version":"1.3"},{"name":"googlecode","version":"1.7"},{"name":"gradle","version":"1.22"},{"name":"grails","version":"1.6.3"},{"name":"gravatar","version":"1.1"},{"name":"greenballs","version":"1.12"},{"name":"grinder","version":"1.4"},{"name":"groovy","version":"1.13"},{"name":"groovy-label-assignment","version":"1.0.0"},{"name":"groovy-postbuild","version":"1.8"},{"name":"groovy-remote","version":"0.2"},{"name":"groovyaxis","version":"0.3"},{"name":"growl","version":"1.1"},{"name":"hadoop","version":"1.4"},{"name":"harvest","version":"0.5"},{"name":"heavy-job","version":"1.0"},{"name":"heroku-jenkins-plugin","version":"0.7.1-BETA"},{"name":"hgca","version":"1.3"},{"name":"hipchat","version":"0.1.4"},{"name":"hipchat-plugin","version":"0.1.0"},{"name":"hockeyapp","version":"1.0.4"},{"name":"hp-application-automation-tools-plugin","version":"2.0.0"},{"name":"hp-operations-orchestration-automation-execution-plugin","version":"1.0.11"},{"name":"hsts-filter-plugin","version":"1.0"},{"name":"html-audio-notifier","version":"0.4"},{"name":"html5-notifier-plugin","version":"1.2"},{"name":"htmlpublisher","version":"1.2"},{"name":"http_request","version":"1.8"},{"name":"hudson-logaction-plugin","version":"1.1"},{"name":"hudson-pview-plugin","version":"1.8"},{"name":"hudson-wsclean-plugin","version":"1.0.4"},{"name":"hudsontrayapp","version":"0.7.3"},{"name":"humbug","version":"0.1.1"},{"name":"icescrum","version":"1.0.2"},{"name":"ikachan","version":"0.0.1"},{"name":"image-gallery","version":"1.0"},{"name":"instant-messaging","version":"1.25"},{"name":"integrity-plugin","version":"1.17"},{"name":"ion-deployer-plugin","version":"0.9"},{"name":"ios-device-connector","version":"1.2"},{"name":"iphoneview","version":"0.2"},{"name":"ipmessenger-plugin","version":"1.2"},{"name":"ircbot","version":"2.23"},{"name":"ivy","version":"1.22"},{"name":"ivy-report","version":"1.2"},{"name":"ivytrigger","version":"0.28"},{"name":"jabber","version":"1.25"},{"name":"jacoco","version":"1.0.12"},{"name":"japex","version":"1.7"},{"name":"javancss","version":"1.1"},{"name":"javanet","version":"1.3"},{"name":"javanet-uploader","version":"1.7"},{"name":"javatest-report","version":"1.4"},{"name":"jboss","version":"1.0.5"},{"name":"jbpm-embedded-plugin","version":"0.2"},{"name":"jbpm-workflow-plugin","version":"0.3"},{"name":"jcaptcha-plugin","version":"1.1"},{"name":"jclouds-jenkins","version":"2.3.1"},{"name":"jdepend","version":"1.2.3"},{"name":"jenkins-cloudformation-plugin","version":"0.11"},{"name":"jenkins-flowdock-plugin","version":"1.1.2"},{"name":"jenkins-jira-issue-updater","version":"1.3"},{"name":"jenkins-leiningen","version":"0.5.1"},{"name":"jenkins-multijob-plugin","version":"1.9"},{"name":"jenkins-tag-cloud-plugin","version":"1.6"},{"name":"jenkins-testswarm-plugin","version":"1.2"},{"name":"jenkins-tracker","version":"0.1.0"},{"name":"jenkinswalldisplay","version":"0.6.17"},{"name":"jenkinswalldisplay-pom","version":"0.6.2"},{"name":"jenkow-activiti-designer","version":"0.3.1"},{"name":"jenkow-activiti-explorer","version":"0.3.1"},{"name":"jenkow-plugin","version":"0.3.1"},{"name":"jigomerge","version":"0.7"},{"name":"jira","version":"1.37"},{"name":"JiraTestResultReporter","version":"1.0.4"},{"name":"job-direct-mail","version":"1.5"},{"name":"job-dsl","version":"1.15"},{"name":"job-exporter","version":"0.4"},{"name":"job-import-plugin","version":"1.0"},{"name":"job-log-logger-plugin","version":"1.0"},{"name":"job-node-stalker","version":"1.0.1"},{"name":"job-parameter-summary","version":"0.1"},{"name":"job-poll-action-plugin","version":"1.0"},{"name":"job-strongauth-simple","version":"0.5"},{"name":"jobConfigHistory","version":"2.4"},{"name":"jobcopy-builder","version":"1.1.0"},{"name":"jobgenerator","version":"1.14"},{"name":"jobrequeue","version":"1.0"},{"name":"jobrevision","version":"0.6"},{"name":"jobtype-column","version":"1.3"},{"name":"join","version":"1.15"},{"name":"jprt","version":"1.1"},{"name":"jqs-monitoring","version":"1.2"},{"name":"jquery","version":"1.7.2-1"},{"name":"jquery-ui","version":"1.0.2"},{"name":"jsgames","version":"0.2"},{"name":"jshint-checkstyle","version":"3.36"},{"name":"jslint","version":"0.8.0"},{"name":"jslint-checkstyle","version":"3.35"},{"name":"jsoup","version":"1.6.3"},{"name":"jsunit","version":"1.5"},{"name":"jswidgets","version":"1.10"},{"name":"junit-attachments","version":"1.3"},{"name":"jython","version":"1.9"},{"name":"kagemai","version":"1.3"},{"name":"karotz","version":"0.2"},{"name":"keepSlaveOffline","version":"1.0"},{"name":"keyboard-shortcuts-plugin","version":"1.2"},{"name":"klaros-testmanagement","version":"1.4"},{"name":"klocwork","version":"1.15"},{"name":"kundo","version":"0.2"},{"name":"label-verifier","version":"1.0"},{"name":"labeled-test-groups-publisher","version":"1.2.6"},{"name":"labmanager","version":"0.2.8"},{"name":"lastfailureversioncolumn","version":"1.1"},{"name":"lastsuccessdescriptioncolumn","version":"1.0"},{"name":"lastsuccessversioncolumn","version":"1.1"},{"name":"LavaLampNotifier","version":"1.4"},{"name":"ldapemail","version":"0.7"},{"name":"leastload","version":"1.0.3"},{"name":"lechat","version":"0.1.3"},{"name":"leiningen-plugin","version":"0.5.5"},{"name":"libvirt-slave","version":"1.8.1"},{"name":"lingr-plugin","version":"0.1"},{"name":"list-command","version":"0.2"},{"name":"liverebel-deploy","version":"2.5.5"},{"name":"livescreenshot","version":"1.4.4"},{"name":"loaderio-jenkins-plugin","version":"1.0.1"},{"name":"locale","version":"1.2"},{"name":"locked-files-report","version":"1.6"},{"name":"locks-and-latches","version":"0.6"},{"name":"log-command","version":"1.0.1"},{"name":"log-parser","version":"1.0.8"},{"name":"logaction-plugin","version":"1.2"},{"name":"logfilesizechecker","version":"1.0"},{"name":"logging","version":"0.2.8"},{"name":"logstash","version":"0.8.0"},{"name":"lotus-connections-plugin","version":"1.23"},{"name":"m2-extra-steps","version":"1.1.7"},{"name":"m2-repo-reaper","version":"1.0"},{"name":"m2release","version":"0.10.0"},{"name":"mail-watcher-plugin","version":"1.4"},{"name":"mailcommander","version":"1.0.0"},{"name":"managed-scripts","version":"1.1"},{"name":"mantis","version":"0.25"},{"name":"mask-passwords","version":"2.7.2"},{"name":"matrix-reloaded","version":"1.1.1"},{"name":"Matrix-sorter-plugin","version":"1.1"},{"name":"matrixtieparent","version":"1.2"},{"name":"maven-dependency-update-trigger","version":"1.4"},{"name":"maven-deployment-linker","version":"1.5.1"},{"name":"maven-info","version":"0.0.4"},{"name":"maven-invoker-plugin","version":"1.2"},{"name":"maven-metadata-plugin","version":"1.0.0"},{"name":"maven-release-cascade","version":"1.3.2"},{"name":"maven-repo-cleaner","version":"1.2"},{"name":"measurement-plots","version":"0.1"},{"name":"memegen","version":"0.4.3"},{"name":"memory-map","version":"1.0.1"},{"name":"mercurial","version":"1.46"},{"name":"metadata","version":"1.0b"},{"name":"mock-security-realm","version":"1.0"},{"name":"mock-slave","version":"1.1"},{"name":"mogotest","version":"0.1.0"},{"name":"mongodb","version":"1.3"},{"name":"mongodb-document-upload","version":"1.0"},{"name":"monitoring","version":"1.45.0"},{"name":"monkit-plugin","version":"0.2.6"},{"name":"mozmill","version":"1.3"},{"name":"msbuild","version":"1.18"},{"name":"mstest","version":"0.7"},{"name":"mstestrunner","version":"1.0.1"},{"name":"mttr","version":"1.1"},{"name":"multi-module-tests-publisher","version":"1.32"},{"name":"multi-slave-config-plugin","version":"1.0.0"},{"name":"multiline-tabbar-plugin","version":"1.1"},{"name":"multiple-scms","version":"0.2"},{"name":"mysql-auth","version":"1.0"},{"name":"nabaztag","version":"1.9"},{"name":"naginator","version":"1.8"},{"name":"nant","version":"1.4.3"},{"name":"ncover","version":"0.3"},{"name":"nerrvana-plugin","version":"1.02.01"},{"name":"nested-view","version":"1.10"},{"name":"netio-plugin","version":"1.4"},{"name":"network-monitor","version":"1.1"},{"name":"next-build-number","version":"1.0"},{"name":"next-executions","version":"1.0.5"},{"name":"nexus-task-runner","version":"0.9.2"},{"name":"nis-notification-lamp","version":"1.131"},{"name":"nodejs","version":"0.1"},{"name":"nodelabelparameter","version":"1.4"},{"name":"nodenamecolumn","version":"1.1"},{"name":"nodeofflinenotification","version":"1.0.3"},{"name":"nopmdcheck","version":"0.9"},{"name":"nopmdverifytrac","version":"0.9"},{"name":"notification","version":"1.5"},{"name":"notifo","version":"1.0.1"},{"name":"nsiqcollector","version":"1.3.3"},{"name":"nuget","version":"0.3"},{"name":"nunit","version":"0.14"},{"name":"offlineonfailure-plugin","version":"1.0"},{"name":"openid","version":"1.6"},{"name":"openJDK-native-plugin","version":"1.0"},{"name":"openscada-jenkins-exporter","version":"0.0.2"},{"name":"origo-issue-notifier","version":"1.1"},{"name":"oslc-cm","version":"1.31"},{"name":"otabuilder","version":"0.2.3"},{"name":"parallel-test-executor","version":"1.0"},{"name":"parameterized-trigger","version":"2.18"},{"name":"patch-parameter","version":"1.0"},{"name":"pathignore","version":"0.6"},{"name":"pegdown-formatter","version":"1.3"},{"name":"pending-changes","version":"0.3.0"},{"name":"people-redirector","version":"1.3"},{"name":"perforce","version":"1.3.24"},{"name":"performance","version":"1.8"},{"name":"perfpublisher","version":"7.97"},{"name":"periodic-reincarnation","version":"1.2"},{"name":"periodicbackup","version":"1.3"},{"name":"perl","version":"0.0.4"},{"name":"persona","version":"2.3"},{"name":"phing","version":"0.13.1"},{"name":"php","version":"1.0"},{"name":"piwikanalytics","version":"1.1.0"},{"name":"plasticscm-plugin","version":"2.0"},{"name":"platformlabeler","version":"1.1"},{"name":"play-autotest-plugin","version":"0.0.12"},{"name":"plot","version":"1.5"},{"name":"pmd","version":"3.34"},{"name":"polarion","version":"1.3"},{"name":"pollscm","version":"1.2"},{"name":"port-allocator","version":"1.5"},{"name":"postbuild-task","version":"1.8"},{"name":"postbuildscript","version":"0.12"},{"name":"powershell","version":"1.2"},{"name":"pragprog","version":"1.0.4"},{"name":"prereq-buildstep","version":"1.1"},{"name":"preSCMbuildstep","version":"0.2"},{"name":"pretest-commit","version":"0.4"},{"name":"pretested-integration","version":"0.0.4"},{"name":"PrioritySorter","version":"1.3"},{"name":"progress-bar-column-plugin","version":"1.0"},{"name":"project-description-setter","version":"1.1"},{"name":"project-health-report","version":"1.2"},{"name":"project-stats-plugin","version":"0.4"},{"name":"promoted-builds","version":"2.11"},{"name":"promoted-builds-simple","version":"1.9"},{"name":"prqa-plugin","version":"1.2.0"},{"name":"pry","version":"1.1"},{"name":"publish-over-cifs","version":"0.2"},{"name":"publish-over-ftp","version":"1.9"},{"name":"publish-over-ssh","version":"1.10"},{"name":"purge-build-queue-plugin","version":"1.0"},{"name":"pvcs_scm","version":"1.1"},{"name":"pwauth","version":"0.4"},{"name":"pxe","version":"1.5"},{"name":"pyenv","version":"0.0.4"},{"name":"python","version":"1.2"},{"name":"qc","version":"1.2.1"},{"name":"r","version":"0.2"},{"name":"rabbitmq-build-trigger","version":"1.5"},{"name":"rabbitmq-consumer","version":"1.5"},{"name":"rad-builder","version":"1.1.4"},{"name":"radiatorviewplugin","version":"1.13"},{"name":"rake","version":"1.7.7"},{"name":"rally-update-plugin-1","version":"1.2"},{"name":"random-string-parameter","version":"1.0"},{"name":"rbenv","version":"0.0.14"},{"name":"read-only-configurations","version":"1.7"},{"name":"rebuild","version":"1.19"},{"name":"recipe","version":"1.0"},{"name":"redmine","version":"0.13"},{"name":"refit","version":"0.3.1"},{"name":"regexemail","version":"0.3"},{"name":"regression-report-plugin","version":"1.1"},{"name":"release","version":"2.3"},{"name":"remote-terminal-access","version":"1.4"},{"name":"repo","version":"1.5"},{"name":"repository","version":"1.0"},{"name":"repository-connector","version":"0.8.2"},{"name":"reverse-proxy-auth-plugin","version":"1.0.1"},{"name":"reviewboard","version":"1.0.1"},{"name":"rhnpush-plugin","version":"0.1"},{"name":"rich-text-publisher-plugin","version":"1.1"},{"name":"robot","version":"1.2.3"},{"name":"role-strategy","version":"1.1.2"},{"name":"rpmsign-plugin","version":"0.1"},{"name":"rqm-plugin","version":"1.0"},{"name":"rrod","version":"1.1.0"},{"name":"rtc","version":"0.3"},{"name":"ruby","version":"1.2"},{"name":"ruby-runtime","version":"0.11"},{"name":"rubyMetrics","version":"1.5.0"},{"name":"rubymotion","version":"0.13"},{"name":"run-condition","version":"0.10"},{"name":"rundeck","version":"2.11"},{"name":"rusalad-plugin","version":"1.0.8"},{"name":"rvm","version":"0.4"},{"name":"s3","version":"0.3.2"},{"name":"saferestart","version":"0.3"},{"name":"sametime","version":"0.4"},{"name":"sauce-ondemand","version":"1.57"},{"name":"sbt","version":"1.4"},{"name":"scala-junit-name-decoder","version":"1.0"},{"name":"schedule-failed-builds","version":"1.1"},{"name":"Schmant","version":"1.1.4"},{"name":"scm-sync-configuration","version":"0.0.7.1"},{"name":"scm2job","version":"2.3"},{"name":"scons","version":"0.4"},{"name":"scp","version":"1.8"},{"name":"screenshot","version":"1.1"},{"name":"script-realm","version":"1.5"},{"name":"script-scm","version":"1.12"},{"name":"scripted-cloud-plugin","version":"0.12"},{"name":"scriptler","version":"2.6.1"},{"name":"scripttrigger","version":"0.29"},{"name":"SCTMExecutor","version":"1.5.1"},{"name":"search-all-results-plugin","version":"1.0"},{"name":"secret","version":"1.7"},{"name":"sectioned-view","version":"1.18"},{"name":"selection-tasks-plugin","version":"1.0"},{"name":"selenium","version":"2.2"},{"name":"selenium-aes","version":"0.5"},{"name":"selenium-builder","version":"1.6"},{"name":"seleniumhq","version":"0.4"},{"name":"seleniumhtmlreport","version":"0.94"},{"name":"seleniumrc-plugin","version":"1.0"},{"name":"serenity","version":"0.4"},{"name":"sfee","version":"1.0.4"},{"name":"shared-objects","version":"0.44"},{"name":"shelve-project-plugin","version":"1.3"},{"name":"shiningpanda","version":"0.19"},{"name":"show-build-parameters","version":"1.0"},{"name":"sicci_for_xcode","version":"0.0.8"},{"name":"sidebar-link","version":"1.6"},{"name":"signal-killer","version":"1.0"},{"name":"simple-parameterized-builds-report","version":"1.0"},{"name":"simple-theme-plugin","version":"0.3"},{"name":"simpleclearcase","version":"1.2.2"},{"name":"simpleupdatesite","version":"1.1.2"},{"name":"sitemonitor","version":"0.4"},{"name":"skip-certificate-check","version":"1.0"},{"name":"skype-notifier","version":"1.1.0"},{"name":"sladiator-notifier","version":"1.0.4"},{"name":"slave-prerequisites","version":"1.0"},{"name":"slave-proxy","version":"1.1"},{"name":"slave-setup","version":"1.6"},{"name":"slave-squatter","version":"1.2"},{"name":"slave-status","version":"1.6"},{"name":"slave-utilization-plugin","version":"1.5"},{"name":"sloccount","version":"1.10"},{"name":"smart-jenkins","version":"1.0"},{"name":"sms-notification","version":"1.0"},{"name":"snsnotify","version":"1.6"},{"name":"sonar","version":"2.1"},{"name":"sonargraph-plugin","version":"1.2"},{"name":"sonatype-ci","version":"1.3"},{"name":"sounds","version":"0.4"},{"name":"sourcemonitor","version":"0.2"},{"name":"speaks","version":"0.1.1"},{"name":"sra-deploy","version":"1.4.2.2"},{"name":"ssh","version":"2.3"},{"name":"ssh-agent","version":"1.0"},{"name":"SSSCM","version":"1.0"},{"name":"stackhammer","version":"1.0.6"},{"name":"staf","version":"0.1"},{"name":"starteam","version":"0.6.11"},{"name":"started-by-envvar","version":"1.0"},{"name":"startup-trigger-plugin","version":"2.4"},{"name":"stashNotifier","version":"1.3"},{"name":"status-view","version":"1.0"},{"name":"statusmonitor","version":"1.3"},{"name":"stepcounter","version":"1.3.2"},{"name":"storable-configs-plugin","version":"1.0"},{"name":"strawboss","version":"1.1"},{"name":"suite-test-groups-publisher","version":"1.13"},{"name":"summary_report","version":"1.9"},{"name":"suppress-stack-trace","version":"1.1"},{"name":"Surround-SCM-plugin","version":"1.1"},{"name":"svn-release-mgr","version":"1.2"},{"name":"svn-revert-plugin","version":"1.3"},{"name":"svn-tag","version":"1.16"},{"name":"svn-workspace-cleaner","version":"1.0"},{"name":"svncompat13","version":"1.2"},{"name":"svncompat14","version":"1.1"},{"name":"svnmerge","version":"1.2"},{"name":"svnpublisher","version":"0.1"},{"name":"swarm","version":"1.9"},{"name":"synergy","version":"1.6"},{"name":"systemloadaverage-monitor","version":"1.2"},{"name":"tag-profiler","version":"0.2"},{"name":"tap","version":"1.10"},{"name":"tasks","version":"4.36"},{"name":"tattletale-plugin","version":"0.3"},{"name":"tcl","version":"0.4"},{"name":"team-views","version":"0.9.0"},{"name":"teamconcert","version":"1.0.5"},{"name":"template-project","version":"1.4"},{"name":"template-workflows","version":"1.2"},{"name":"tepco","version":"0.1"},{"name":"tepco-epuw","version":"1.0"},{"name":"terminal","version":"1.4"},{"name":"terminate-ssh-processes-plugin","version":"1.0"},{"name":"test-stability","version":"1.0"},{"name":"testabilityexplorer","version":"0.4"},{"name":"testflight","version":"1.3.8"},{"name":"testingbot","version":"1.5"},{"name":"testInProgress","version":"1.0"},{"name":"testlink","version":"3.5"},{"name":"testng-plugin","version":"1.1"},{"name":"testopia","version":"1.3"},{"name":"text-finder","version":"1.9"},{"name":"text-finder-run-condition","version":"0.1"},{"name":"tfs","version":"1.20"},{"name":"thinBackup","version":"1.7.2"},{"name":"thread-dump-action-plugin","version":"1.0"},{"name":"throttle-concurrents","version":"1.7.2"},{"name":"thucydides","version":"0.1"},{"name":"timestamper","version":"1.5.4"},{"name":"tmpcleaner","version":"1.1"},{"name":"token-macro","version":"1.7"},{"name":"toolenv","version":"1.1"},{"name":"trac","version":"1.13"},{"name":"trac-publisher-plugin","version":"1.3"},{"name":"tracking-svn","version":"1.1"},{"name":"tuxdroid","version":"1.7"},{"name":"TwilioNotifier","version":"0.2.1"},{"name":"twitter","version":"0.7"},{"name":"ui-samples-plugin","version":"1.520"},{"name":"unicorn","version":"0.1.1"},{"name":"unity-asset-server","version":"1.1.1"},{"name":"unity3d-plugin","version":"0.3"},{"name":"unreliable-slave-plugin","version":"1.1"},{"name":"update-sites-manager","version":"1.0.0"},{"name":"uptime","version":"1.0"},{"name":"url-auth","version":"1.0.1"},{"name":"URLSCM","version":"1.6"},{"name":"urltrigger","version":"0.31"},{"name":"utplsql","version":"0.4"},{"name":"vagrant","version":"0.1.4"},{"name":"valgrind","version":"0.19"},{"name":"validating-string-parameter","version":"2.2"},{"name":"vault-scm-plugin","version":"1.1.1"},{"name":"vboxwrapper","version":"1.3"},{"name":"veracode-scanner","version":"1.1"},{"name":"versioncolumn","version":"0.2"},{"name":"versionnumber","version":"1.4.1"},{"name":"vertx","version":"1.0.1"},{"name":"view-job-filters","version":"1.22"},{"name":"viewVC","version":"1.6"},{"name":"violation-columns","version":"1.5"},{"name":"violations","version":"0.7.11"},{"name":"virtualbox","version":"0.6"},{"name":"visualworks-store","version":"1.0"},{"name":"vmware","version":"0.8"},{"name":"vs-code-metrics","version":"1.6"},{"name":"vsphere-cloud","version":"0.10"},{"name":"vss","version":"1.9"},{"name":"vstestrunner","version":"1.0.1"},{"name":"warnings","version":"4.26"},{"name":"was-builder","version":"1.6.1"},{"name":"weblogic-deployer-plugin","version":"2.3"},{"name":"websocket","version":"1.0.5"},{"name":"WebSVN2","version":"0.9"},{"name":"webtestpresenter","version":"0.23"},{"name":"whitesource","version":"1.1"},{"name":"windmill","version":"1.5"},{"name":"windows-azure-storage","version":"0.1.1"},{"name":"windows-exe-runner","version":"1.1"},{"name":"wix","version":"1.2"},{"name":"writable-filesystem-monitor","version":"0.1"},{"name":"ws-cleanup","version":"0.15"},{"name":"xcode-plugin","version":"1.3.3"},{"name":"xfpanel","version":"1.2.2"},{"name":"xframe-filter-plugin","version":"1.0"},{"name":"xpath-config-viewer","version":"1.1.1"},{"name":"xpdev","version":"1.0"},{"name":"xshell","version":"0.8"},{"name":"xtrigger","version":"0.54"},{"name":"xunit","version":"1.60"},{"name":"xvfb","version":"1.0.7"},{"name":"xvnc","version":"1.14"},{"name":"yammer","version":"1.0.0"},{"name":"youtrack-plugin","version":"0.3"},{"name":"zentimestamp","version":"3.3"},{"name":"zubhium","version":"0.1.6"}]}
@@ -0,0 +1 @@
1
+ {"plugins":[{"active":true,"backupVersion":null,"bundled":true,"deleted":false,"dependencies":[],"downgradable":false,"enabled":true,"hasUpdate":false,"longName":"Jenkins Mailer Plugin","pinned":false,"shortName":"mailer","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/Mailer","version":"1.5"},{"active":false,"backupVersion":null,"bundled":true,"deleted":false,"dependencies":[],"downgradable":false,"enabled":false,"hasUpdate":false,"longName":"External Monitor Job Type Plugin","pinned":false,"shortName":"external-monitor-job","supportsDynamicLoad":"MAYBE","url":"https://wiki.jenkins-ci.org/display/JENKINS/Monitoring+external+jobs","version":"1.1"},{"active":true,"backupVersion":"1.2","bundled":true,"deleted":false,"dependencies":[{}],"downgradable":true,"enabled":false,"hasUpdate":false,"longName":"LDAP Plugin","pinned":true,"shortName":"ldap","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/LDAP+Plugin","version":"1.5"},{"active":true,"backupVersion":"1.1","bundled":true,"deleted":false,"dependencies":[{}],"downgradable":true,"enabled":true,"hasUpdate":false,"longName":"PAM Authentication plugin","pinned":true,"shortName":"pam-auth","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/PAM+Authentication+Plugin","version":"1.1"},{"active":false,"backupVersion":null,"bundled":true,"deleted":false,"dependencies":[],"downgradable":false,"enabled":false,"hasUpdate":false,"longName":"Ant Plugin","pinned":false,"shortName":"ant","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/Ant+Plugin","version":"1.2"},{"active":true,"backupVersion":null,"bundled":true,"deleted":false,"dependencies":[{},{},{},{}],"downgradable":false,"enabled":true,"hasUpdate":false,"longName":"Javadoc Plugin","pinned":false,"shortName":"javadoc","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/Javadoc+Plugin","version":"1.1"},{"active":true,"backupVersion":null,"bundled":true,"deleted":false,"dependencies":[{},{},{},{},{},{}],"downgradable":false,"enabled":true,"hasUpdate":false,"longName":"Jenkins Translation Assistance plugin","pinned":false,"shortName":"translation","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/Translation+Assistance+Plugin","version":"1.10"},{"active":true,"backupVersion":null,"bundled":false,"deleted":false,"dependencies":[{}],"downgradable":false,"enabled":false,"hasUpdate":false,"longName":"SMS Notification","pinned":false,"shortName":"sms","supportsDynamicLoad":"MAYBE","url":"https://wiki.jenkins-ci.org/display/JENKINS/SMS+Notification","version":"1.1"},{"active":true,"backupVersion":null,"bundled":true,"deleted":false,"dependencies":[{},{}],"downgradable":false,"enabled":true,"hasUpdate":false,"longName":"Maven Integration plugin","pinned":false,"shortName":"maven-plugin","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/Maven+2+Project+Plugin","version":"1.520"},{"active":false,"backupVersion":null,"bundled":true,"deleted":false,"dependencies":[],"downgradable":false,"enabled":false,"hasUpdate":false,"longName":"Credentials Plugin","pinned":false,"shortName":"credentials","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/Credentials+Plugin","version":"1.4"},{"active":true,"backupVersion":null,"bundled":true,"deleted":false,"dependencies":[{},{},{},{},{},{},{}],"downgradable":false,"enabled":true,"hasUpdate":false,"longName":"SSH Credentials Plugin","pinned":false,"shortName":"ssh-credentials","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/SSH+Credentials+Plugin","version":"0.3"},{"active":true,"backupVersion":"0.25","bundled":true,"deleted":false,"dependencies":[{},{},{},{},{}],"downgradable":true,"enabled":true,"hasUpdate":false,"longName":"Jenkins SSH Slaves plugin","pinned":true,"shortName":"ssh-slaves","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/SSH+Slaves+plugin","version":"0.27"},{"active":true,"backupVersion":"2.8","bundled":true,"deleted":false,"dependencies":[{},{},{},{}],"downgradable":true,"enabled":true,"hasUpdate":false,"longName":"Jenkins CVS Plug-in","pinned":true,"shortName":"cvs","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/CVS+Plugin","version":"2.9"},{"active":true,"backupVersion":"1.45","bundled":true,"deleted":false,"dependencies":[{},{},{},{}],"downgradable":true,"enabled":true,"hasUpdate":false,"longName":"Jenkins Subversion Plug-in","pinned":true,"shortName":"subversion","supportsDynamicLoad":"MAYBE","url":"http://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin","version":"1.50"}]}
@@ -0,0 +1 @@
1
+ {"updates":[]}
@@ -1,13 +1,14 @@
1
1
  require File.expand_path('../spec_helper', __FILE__)
2
2
  require 'net/http'
3
+ require File.expand_path('../fake_http_response', __FILE__)
3
4
 
4
5
  describe JenkinsApi::Client::Job do
5
6
  context "With properly initialized Client and all methods defined" do
6
7
 
7
8
  before do
8
9
  mock_logger = Logger.new "/dev/null"
9
- @client = double
10
- @client.should_receive(:logger).and_return(mock_logger)
10
+ @client = JenkinsApi::Client.new({:server_ip => '127.0.0.1'})
11
+ @client.should_receive(:logger).at_least(1).and_return(mock_logger)
11
12
  @job = JenkinsApi::Client::Job.new(@client)
12
13
  @sample_json_response = {
13
14
  "jobs" => [
@@ -248,7 +249,7 @@ describe JenkinsApi::Client::Job do
248
249
  msg = "/job/test_job/1/logText/progressiveText?start=0"
249
250
  @client.should_receive(:api_get_request).
250
251
  with(msg, nil, nil, true).
251
- and_return(Net::HTTP.get_response(URI('http://example.com/index.html')))
252
+ and_return(FakeResponse.new)
252
253
  @job.get_console_output('test_job', 1, 0, 'text')
253
254
  end
254
255
 
@@ -380,19 +381,102 @@ describe JenkinsApi::Client::Job do
380
381
  end
381
382
 
382
383
  describe "#build" do
384
+ # First tests confirm the build method works the same as it used to
383
385
  it "accepts the job name and builds the job" do
386
+ @client.should_receive(:api_get_request).with(
387
+ "/job/test_job").and_return({})
384
388
  @client.should_receive(:api_post_request).with(
385
- "/job/test_job/build", {}, false).and_return(302)
389
+ "/job/test_job/build", {}, true).and_return(FakeResponse.new(302))
386
390
  @job.build("test_job").should == 302
387
391
  end
388
392
  it "accepts the job name with params and builds the job" do
393
+ @client.should_receive(:api_get_request).with(
394
+ "/job/test_job").and_return({})
389
395
  @client.should_receive(:api_post_request).with(
390
396
  "/job/test_job/buildWithParameters",
391
397
  {:branch => 'feature/new-stuff'},
392
- false
393
- ).and_return(302)
398
+ true
399
+ ).and_return(FakeResponse.new(302))
394
400
  @job.build("test_job", {:branch => 'feature/new-stuff'}).should == 302
395
401
  end
402
+
403
+ ### OLD NON-QUEUE RESPONSE JENKINS ###
404
+ # Next tests confirm it deals with different jenkins versions and waits
405
+ # for build to start (or not)
406
+ it "accepts the job name and builds the job (w/timeout)" do
407
+ @client.should_receive(:api_get_request).with(
408
+ "/job/test_job").and_return({})
409
+ @client.should_receive(:api_post_request).with(
410
+ "/job/test_job/build", {}, true).and_return(FakeResponse.new(302))
411
+ @client.should_receive(:api_get_request).with(
412
+ "/job/test_job/1/").and_return({})
413
+ @client.should_receive(:get_jenkins_version).and_return("1.1")
414
+ @job.build("test_job", {}, {'build_start_timeout' => 10}).should == 1
415
+ end
416
+
417
+ # wait for build to start (or not) (initial response will fail)
418
+ it "accepts the job name and builds the job after short delay (w/timeout)" do
419
+ @client.should_receive(:api_get_request).with(
420
+ "/job/test_job").and_return({})
421
+ @client.should_receive(:api_post_request).with(
422
+ "/job/test_job/build", {}, true).and_return(FakeResponse.new(302))
423
+ @client.should_receive(:api_get_request).with(
424
+ "/job/test_job/1/").ordered.and_raise(JenkinsApi::Exceptions::NotFound.new(@client.logger))
425
+ @client.should_receive(:api_get_request).with(
426
+ "/job/test_job/1/").ordered.and_return({})
427
+ @client.should_receive(:get_jenkins_version).and_return("1.1")
428
+ @job.build("test_job", {}, {'build_start_timeout' => 3}).should == 1
429
+ end
430
+
431
+ # wait for build to start - will fail
432
+ it "accepts the job name and builds the job, but the job doesn't start" do
433
+ @client.should_receive(:api_get_request).with(
434
+ "/job/test_job").and_return({})
435
+ @client.should_receive(:api_post_request).with(
436
+ "/job/test_job/build", {}, true).and_return(FakeResponse.new(302))
437
+ @client.should_receive(:api_get_request).with(
438
+ "/job/test_job/1/").twice.ordered.and_raise(JenkinsApi::Exceptions::NotFound.new(@client.logger))
439
+ @client.should_receive(:get_jenkins_version).and_return("1.1")
440
+ expect( lambda { @job.build("test_job", {}, {'build_start_timeout' => 3}) }).to raise_error(Timeout::Error)
441
+ end
442
+
443
+ ### JENKINS POST 1.519 (QUEUE RESPONSE) ###
444
+ # Next tests confirm it deals with different jenkins versions and waits
445
+ # for build to start (or not)
446
+ it "accepts the job name and builds the job (w/timeout)" do
447
+ @client.should_receive(:api_get_request).with(
448
+ "/job/test_job").and_return({})
449
+ @client.should_receive(:api_post_request).with(
450
+ "/job/test_job/build", {}, true).and_return({"location" => "/item/42/"})
451
+ @client.should_receive(:api_get_request).with(
452
+ "/queue/item/42").and_return({'executable' => {'number' => 1}})
453
+ @client.should_receive(:get_jenkins_version).and_return("1.519")
454
+ @job.build("test_job", {}, {'build_start_timeout' => 10}).should == 1
455
+ end
456
+
457
+ # wait for build to start (or not) (initial response will fail)
458
+ it "accepts the job name and builds the job after short delay (w/timeout)" do
459
+ @client.should_receive(:api_get_request).with(
460
+ "/job/test_job").and_return({})
461
+ @client.should_receive(:api_post_request).with(
462
+ "/job/test_job/build", {}, true).and_return({"location" => "/item/42/"})
463
+ @client.should_receive(:api_get_request).with(
464
+ "/queue/item/42").and_return({}, {'executable' => {'number' => 1}})
465
+ @client.should_receive(:get_jenkins_version).and_return("1.519")
466
+ @job.build("test_job", {}, {'build_start_timeout' => 3}).should == 1
467
+ end
468
+
469
+ # wait for build to start - will fail
470
+ it "accepts the job name and builds the job, but the job doesn't start" do
471
+ @client.should_receive(:api_get_request).with(
472
+ "/job/test_job").and_return({})
473
+ @client.should_receive(:api_post_request).with(
474
+ "/job/test_job/build", {}, true).and_return({"location" => "/item/42/"})
475
+ @client.should_receive(:api_get_request).with(
476
+ "/queue/item/42").and_return({}, {})
477
+ @client.should_receive(:get_jenkins_version).and_return("1.519")
478
+ expect( lambda { @job.build("test_job", {}, {'build_start_timeout' => 3}) }).to raise_error(Timeout::Error)
479
+ end
396
480
  end
397
481
 
398
482
  describe "#poll" do
@@ -515,6 +599,25 @@ describe JenkinsApi::Client::Job do
515
599
  end
516
600
  end
517
601
 
602
+ describe "#get_promotions" do
603
+ it "accepts the jon name and returns the promotions" do
604
+ mock_job_promotions_response = {
605
+ "processes" => [ { "name" => "dev",
606
+ "url" => "not_required",
607
+ "color" => "blue",
608
+ },
609
+ { "name" => "stage",
610
+ "url" => "not_required",
611
+ "color" => "notbuilt",
612
+ },
613
+ ], }
614
+
615
+ @client.should_receive(:api_get_request).with('/job/test_job/promotion').and_return(
616
+ mock_job_promotions_response)
617
+ @client.should_receive(:api_get_request).and_return({'target' => {'number' => 42}})
618
+ @job.get_promotions("test_job").should == {'dev' => 42, 'stage' => nil}
619
+ end
620
+ end
518
621
  end
519
622
  end
520
623
  end
@@ -30,10 +30,10 @@ describe JenkinsApi::Client::Node do
30
30
  end
31
31
  end
32
32
 
33
- describe "#create_dump_slave" do
34
- it "creates a dump slave by accepting required params" do
33
+ describe "#create_dumb_slave" do
34
+ it "creates a dumb slave by accepting required params" do
35
35
  @client.should_receive(:api_post_request).and_return("302")
36
- @node.create_dump_slave(
36
+ @node.create_dumb_slave(
37
37
  :name => "test_slave",
38
38
  :slave_host => "10.10.10.10",
39
39
  :private_key_file => "/root/.ssh/id_rsa"
@@ -42,7 +42,7 @@ describe JenkinsApi::Client::Node do
42
42
  it "fails if name is not given" do
43
43
  expect(
44
44
  lambda{
45
- @node.create_dump_slave(
45
+ @node.create_dumb_slave(
46
46
  :slave_host => "10.10.10.10",
47
47
  :private_key_file => "/root/.ssh/id_rsa"
48
48
  )
@@ -52,7 +52,7 @@ describe JenkinsApi::Client::Node do
52
52
  it "fails if slave_host is not given" do
53
53
  expect(
54
54
  lambda{
55
- @node.create_dump_slave(
55
+ @node.create_dumb_slave(
56
56
  :name => "test_slave",
57
57
  :private_key_file => "/root/.ssh/id_rsa"
58
58
  )
@@ -62,7 +62,7 @@ describe JenkinsApi::Client::Node do
62
62
  it "fails if private_key_file is not given" do
63
63
  expect(
64
64
  lambda{
65
- @node.create_dump_slave(
65
+ @node.create_dumb_slave(
66
66
  :name => "test_slave",
67
67
  :slave_host => "10.10.10.10"
68
68
  )
@@ -71,6 +71,18 @@ describe JenkinsApi::Client::Node do
71
71
  end
72
72
  end
73
73
 
74
+ describe "#create_dump_slave" do
75
+
76
+ it "just delegates to #create_dumb_slave" do
77
+ @node.should_receive(:create_dumb_slave)
78
+ @node.create_dump_slave(
79
+ :name => "test_slave",
80
+ :slave_host => "10.10.10.10",
81
+ :private_key_file => "/root/.ssh/id_rsa"
82
+ )
83
+ end
84
+
85
+ end
74
86
  describe "#delete" do
75
87
  it "gets the node name and deletes if exists" do
76
88
  slave_name = "slave"