jenkins_api_client 1.0.0.alpha.2 → 1.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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
@@ -1,4 +1,5 @@
1
1
  require File.expand_path('../spec_helper', __FILE__)
2
+ require File.expand_path('../fake_http_response', __FILE__)
2
3
 
3
4
  describe JenkinsApi::Client::System do
4
5
  context "With properly initialized Client" do
@@ -65,7 +66,7 @@ describe JenkinsApi::Client::System do
65
66
 
66
67
  describe "#wait_for_ready" do
67
68
  it "exits if the response body doesn't have the wait message" do
68
- @client.should_receive(:get_root).and_return(Net::HTTP.get_response(URI('http://example.com/index.html')))
69
+ @client.should_receive(:get_root).and_return(FakeResponse.new)
69
70
  @system.wait_for_ready
70
71
  end
71
72
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jenkins_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha.2
4
+ version: 1.0.0.beta.1
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-08 00:00:00.000000000 Z
12
+ date: 2013-11-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -227,13 +227,14 @@ files:
227
227
  - lib/jenkins_api_client/node.rb
228
228
  - lib/jenkins_api_client/plugin_manager.rb
229
229
  - lib/jenkins_api_client/system.rb
230
+ - lib/jenkins_api_client/urihelper.rb
230
231
  - lib/jenkins_api_client/user.rb
231
232
  - lib/jenkins_api_client/version.rb
232
233
  - lib/jenkins_api_client/view.rb
233
234
  - scripts/login_with_irb.rb
234
235
  - spec/func_tests/client_spec.rb
235
236
  - spec/func_tests/job_spec.rb
236
- - spec/func_tests/node_spec.rb
237
+ - spec/func_tests/node_spec.rb.pending
237
238
  - spec/func_tests/plugin_spec.rb
238
239
  - spec/func_tests/spec_helper.rb
239
240
  - spec/func_tests/system_spec.rb
@@ -241,6 +242,7 @@ files:
241
242
  - spec/func_tests/view_spec.rb
242
243
  - spec/unit_tests/build_queue_spec.rb
243
244
  - spec/unit_tests/client_spec.rb
245
+ - spec/unit_tests/fake_http_response.rb
244
246
  - spec/unit_tests/fixtures/files/available_plugins.json
245
247
  - spec/unit_tests/fixtures/files/computer_sample.xml
246
248
  - spec/unit_tests/fixtures/files/installed_plugins.json