jenkins_api_client 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/.gitignore +3 -0
  2. data/.jenkins.yml +9 -0
  3. data/.travis.yml +11 -15
  4. data/CHANGELOG.md +15 -0
  5. data/Gemfile +2 -2
  6. data/README.md +7 -9
  7. data/Rakefile +27 -14
  8. data/lib/jenkins_api_client.rb +36 -6
  9. data/lib/jenkins_api_client/build_queue.rb +213 -0
  10. data/lib/jenkins_api_client/cli/base.rb +10 -6
  11. data/lib/jenkins_api_client/cli/helper.rb +13 -4
  12. data/lib/jenkins_api_client/cli/job.rb +6 -9
  13. data/lib/jenkins_api_client/cli/node.rb +6 -4
  14. data/lib/jenkins_api_client/cli/system.rb +2 -1
  15. data/lib/jenkins_api_client/client.rb +31 -25
  16. data/lib/jenkins_api_client/job.rb +248 -95
  17. data/lib/jenkins_api_client/node.rb +128 -10
  18. data/lib/jenkins_api_client/system.rb +4 -2
  19. data/lib/jenkins_api_client/version.rb +2 -2
  20. data/lib/jenkins_api_client/view.rb +17 -4
  21. data/scripts/login_with_irb.rb +4 -3
  22. data/spec/func_tests/client_spec.rb +90 -0
  23. data/spec/func_tests/job_spec.rb +348 -0
  24. data/spec/func_tests/node_spec.rb +174 -0
  25. data/spec/{spec_helper.rb → func_tests/spec_helper.rb} +2 -2
  26. data/spec/func_tests/system_spec.rb +55 -0
  27. data/spec/func_tests/view_spec.rb +53 -0
  28. data/spec/unit_tests/client_spec.rb +211 -0
  29. data/spec/unit_tests/fixtures/files/computer_sample.xml +17 -0
  30. data/spec/unit_tests/fixtures/files/job_sample.xml +16 -0
  31. data/spec/unit_tests/job_spec.rb +355 -0
  32. data/spec/unit_tests/node_spec.rb +192 -0
  33. data/spec/unit_tests/spec_helper.rb +8 -0
  34. data/spec/unit_tests/system_spec.rb +54 -0
  35. data/spec/unit_tests/view_spec.rb +127 -0
  36. metadata +34 -23
  37. data/spec/client_spec.rb +0 -52
  38. data/spec/job_spec.rb +0 -158
  39. data/spec/node_spec.rb +0 -48
  40. data/spec/system_spec.rb +0 -46
@@ -0,0 +1,174 @@
1
+ #
2
+ # Specifying JenkinsApi::Client::Node class capabilities
3
+ # Author Kannan Manickam <arangamani.kannan@gmail.com>
4
+ #
5
+
6
+ require File.expand_path('../spec_helper', __FILE__)
7
+ require 'yaml'
8
+
9
+ describe JenkinsApi::Client::Node do
10
+ context "With properly initialized client" do
11
+ before(:all) do
12
+ @creds_file = '~/.jenkins_api_client/spec.yml'
13
+ @node_name = 'master'
14
+ begin
15
+ @client = JenkinsApi::Client.new(
16
+ YAML.load_file(File.expand_path(@creds_file, __FILE__))
17
+ )
18
+ rescue Exception => e
19
+ puts "WARNING: Credentials are not set properly."
20
+ puts e.message
21
+ end
22
+ end
23
+
24
+ describe "InstanceMethods" do
25
+
26
+ describe "#initialize" do
27
+ it "Initializes without any exception" do
28
+ expect(
29
+ lambda{ node = JenkinsApi::Client::Node.new(@client) }
30
+ ).not_to raise_error
31
+ end
32
+ it "Raises an error if a reference of client is not passed" do
33
+ expect(
34
+ lambda{ node JenkinsApi::Client::Node.new() }
35
+ ).to raise_error
36
+ end
37
+ end
38
+
39
+ describe "#create_dump_slave" do
40
+ it "accepts required params and creates the slave on jenkins" do
41
+ params = {
42
+ :name => "func_test_slave",
43
+ :slave_host => "10.10.10.10",
44
+ :private_key_file => "/root/.ssh/id_rsa"
45
+ }
46
+ @client.node.create_dump_slave(params).to_i.should == 302
47
+ @client.node.delete(params[:name]).to_i.should == 302
48
+ end
49
+ it "fails if name is missing" do
50
+ params = {
51
+ :slave_host => "10.10.10.10",
52
+ :private_key_file => "/root/.ssh/id_rsa"
53
+ }
54
+ expect(
55
+ lambda{ @client.node.create_dump_slave(params) }
56
+ ).to raise_error
57
+ end
58
+ it "fails if slave_host is missing" do
59
+ params = {
60
+ :name => "func_test_slave",
61
+ :private_key_file => "/root/.ssh/id_rsa"
62
+ }
63
+ expect(
64
+ lambda{ @client.node.create_dump_slave(params) }
65
+ ).to raise_error
66
+ end
67
+ it "fails if private_key_file is missing" do
68
+ params = {
69
+ :name => "func_test_slave",
70
+ :slave_host => "10.10.10.10"
71
+ }
72
+ expect(
73
+ lambda{ @client.node.create_dump_slave(params) }
74
+ ).to raise_error
75
+ end
76
+ it "fails if the slave already exists in Jenkins" do
77
+ params = {
78
+ :name => "func_test_slave",
79
+ :slave_host => "10.10.10.10",
80
+ :private_key_file => "/root/.ssh/id_rsa"
81
+ }
82
+ @client.node.create_dump_slave(params).to_i.should == 302
83
+ expect(
84
+ lambda{ @client.node.create_dump_slave(params) }
85
+ ).to raise_error
86
+ @client.node.delete(params[:name]).to_i.should == 302
87
+ end
88
+ end
89
+
90
+ describe "#delete" do
91
+ it "deletes the node given the name" do
92
+ params = {
93
+ :name => "func_test_slave",
94
+ :slave_host => "10.10.10.10",
95
+ :private_key_file => "/root/.ssh/id_rsa"
96
+ }
97
+ @client.node.create_dump_slave(params).to_i.should == 302
98
+ @client.node.delete(params[:name]).to_i.should == 302
99
+ end
100
+ it "raises an error if the slave doesn't exist in Jenkins" do
101
+ expect(
102
+ lambda{ @client.node.delete("not_there") }
103
+ ).to raise_error
104
+ end
105
+ end
106
+
107
+ describe "#list" do
108
+ it "Should be able to list all nodes" do
109
+ @client.node.list.class.should == Array
110
+ end
111
+ end
112
+
113
+ describe "GeneralAttributes" do
114
+ general_attributes = JenkinsApi::Client::Node::GENERAL_ATTRIBUTES
115
+ general_attributes.each do |attribute|
116
+ describe "#get_#{attribute}" do
117
+ it "should get the #{attribute} attribute" do
118
+ @client.node.method("get_#{attribute}").call
119
+ end
120
+ end
121
+ end
122
+ end
123
+
124
+ describe "NodeProperties" do
125
+ node_properties = JenkinsApi::Client::Node::NODE_PROPERTIES
126
+ node_properties.each do |property|
127
+ describe "#is_#{property}" do
128
+ it "should get the #{property} property" do
129
+ @client.node.method("is_#{property}?").call(@node_name)
130
+ end
131
+ end
132
+ end
133
+ end
134
+
135
+ describe "NodeAttributes" do
136
+ node_attributes = JenkinsApi::Client::Node::NODE_ATTRIBUTES
137
+ node_attributes.each do |attribute|
138
+ describe "#get_node_#{attribute}" do
139
+ it "Should be able to list all node attributes" do
140
+ @client.node.method("get_node_#{attribute}").call(@node_name)
141
+ end
142
+ end
143
+ end
144
+ end
145
+
146
+ describe "#change_mode" do
147
+ it "changes the mode of the given slave to the given mode" do
148
+ @client.node.change_mode("slave", "exclusive").to_i.should == 200
149
+ @client.node.change_mode("slave", "normal").to_i.should == 200
150
+ end
151
+ end
152
+
153
+ describe "#get_config" do
154
+ it "obtaines the node config.xml from the server" do
155
+ expect(
156
+ lambda { @client.node.get_config("slave") }
157
+ ).not_to raise_error
158
+ end
159
+ end
160
+
161
+ describe "#post_config" do
162
+ it "posts the given config.xml to the jenkins server's node" do
163
+ expect(
164
+ lambda {
165
+ xml = @client.node.get_config("slave")
166
+ @client.node.post_config("slave", xml)
167
+ }
168
+ ).not_to raise_error
169
+ end
170
+ end
171
+
172
+ end
173
+ end
174
+ end
@@ -5,7 +5,7 @@
5
5
 
6
6
  require 'simplecov'
7
7
  SimpleCov.start if ENV["COVERAGE"]
8
- require File.expand_path('../../lib/jenkins_api_client', __FILE__)
8
+ require File.expand_path('../../../lib/jenkins_api_client', __FILE__)
9
9
  require 'pp'
10
10
  require 'yaml'
11
11
  require 'nokogiri'
@@ -33,7 +33,7 @@ module JenkinsApiSpecHelper
33
33
  xml.concurrentBuild "false"
34
34
  xml.builders {
35
35
  xml.send("hudson.tasks.Shell") {
36
- xml.command "\necho 'going to take a nice nap'\nsleep 120\necho 'took a nice nap'"
36
+ xml.command "\necho 'going to take a nice nap'\nsleep 10\necho 'took a nice nap'"
37
37
  }
38
38
  }
39
39
  xml.publishers
@@ -0,0 +1,55 @@
1
+ #
2
+ # Specifying JenkinsApi::Client::System class capabilities
3
+ # Author: Kannan Manickam <arangamani.kannan@gmail.com>
4
+ #
5
+
6
+ require File.expand_path('../spec_helper', __FILE__)
7
+ require 'yaml'
8
+
9
+ describe JenkinsApi::Client::System do
10
+ context "With properly initialized client" do
11
+ before(:all) do
12
+ @creds_file = '~/.jenkins_api_client/spec.yml'
13
+ begin
14
+ @client = JenkinsApi::Client.new(YAML.load_file(File.expand_path(@creds_file, __FILE__)))
15
+ rescue Exception => e
16
+ puts "WARNING: Credentials are not set properly."
17
+ puts e.message
18
+ end
19
+ end
20
+
21
+ describe "InstanceMethods" do
22
+
23
+ describe "#quiet_down" do
24
+ it "Should be able to quiet down a Jenkins server" do
25
+ @client.system.quiet_down.to_i.should == 302
26
+ end
27
+ end
28
+
29
+ describe "#cancel_quiet_down" do
30
+ it "Should be able to cancel the quiet down a Jenkins server" do
31
+ @client.system.cancel_quiet_down.to_i.should == 302
32
+ end
33
+ end
34
+
35
+ describe "#restart" do
36
+ it "Should be able to restart a Jenkins server safely" do
37
+ @client.system.restart.to_i.should == 302
38
+ end
39
+
40
+ it "Should be able to wait after a safe restart" do
41
+ @client.system.wait_for_ready.should == true
42
+ end
43
+
44
+ it "Should be able to force restart a Jenkins server" do
45
+ @client.system.restart(true).to_i.should == 302
46
+ end
47
+
48
+ it "Should be able to wait after a force restart" do
49
+ @client.system.wait_for_ready.should == true
50
+ end
51
+ end
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,53 @@
1
+ #
2
+ # Specifying JenkinsApi::Client::View class capabilities
3
+ # Author Kannan Manickam <arangamani.kannan@gmail.com>
4
+ #
5
+
6
+ require File.expand_path('../spec_helper', __FILE__)
7
+ require 'yaml'
8
+
9
+ describe JenkinsApi::Client::View do
10
+ context "With properly initialized client" do
11
+ before(:all) do
12
+ @creds_file = '~/.jenkins_api_client/spec.yml'
13
+ @node_name = 'master'
14
+ begin
15
+ @client = JenkinsApi::Client.new(
16
+ YAML.load_file(File.expand_path(@creds_file, __FILE__))
17
+ )
18
+ rescue Exception => e
19
+ puts "WARNING: Credentials are not set properly."
20
+ puts e.message
21
+ end
22
+ end
23
+
24
+ describe "InstanceMethods" do
25
+
26
+ describe "#list" do
27
+ it "Should be able to list all views" do
28
+ @client.view.list.class.should == Array
29
+ end
30
+ end
31
+
32
+ describe "#get_config" do
33
+ it "obtaines the view config.xml from the server" do
34
+ #expect(
35
+ #lambda { @client.view.get_config("slave") }
36
+ #).not_to raise_error
37
+ end
38
+ end
39
+
40
+ describe "#post_config" do
41
+ it "posts the given config.xml to the jenkins server's view" do
42
+ #expect(
43
+ #lambda {
44
+ #xml = @client.view.get_config("slave")
45
+ #@client.view.post_config("slave", xml)
46
+ #}
47
+ #).not_to raise_error
48
+ end
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,211 @@
1
+ require File.expand_path('../spec_helper', __FILE__)
2
+
3
+ describe JenkinsApi::Client do
4
+ context "With valid credentials given" do
5
+ before do
6
+ @client = JenkinsApi::Client.new(
7
+ :server_ip => '127.0.0.1',
8
+ :server_port => 8080,
9
+ :username => 'username',
10
+ :password => 'password'
11
+ )
12
+ end
13
+
14
+ describe "#initialize" do
15
+ it "initializes without exception" do
16
+ expect(
17
+ lambda do
18
+ JenkinsApi::Client.new(
19
+ :server_ip => '127.0.0.1',
20
+ :server_port => 8080,
21
+ :username => 'username',
22
+ :password => 'password'
23
+ )
24
+ end
25
+ ).not_to raise_error
26
+ end
27
+ end
28
+
29
+ describe "#debug" do
30
+ it "The default for debug should be false" do
31
+ client = JenkinsApi::Client.new(
32
+ :server_ip => '127.0.0.1',
33
+ :server_port => 8080,
34
+ :username => 'username',
35
+ :password => 'password'
36
+ )
37
+ client.debug.should == false
38
+ end
39
+
40
+ it "Should be able to set the debug value" do
41
+ client = JenkinsApi::Client.new(
42
+ :server_ip => '127.0.0.1',
43
+ :server_port => 8080,
44
+ :username => 'username',
45
+ :password => 'password',
46
+ :debug => true
47
+ )
48
+ client.debug.should == true
49
+ end
50
+
51
+ it "Should be able to toggle the debug value" do
52
+ client = JenkinsApi::Client.new(
53
+ :server_ip => '127.0.0.1',
54
+ :server_port => 8080,
55
+ :username => 'username',
56
+ :password => 'password',
57
+ :debug => true
58
+ )
59
+ client.toggle_debug
60
+ client.debug.should == false
61
+ end
62
+ end
63
+
64
+ describe "#SubClassAccessorMethods" do
65
+ describe "#job" do
66
+ it "Should return a Client::Job object" do
67
+ client = JenkinsApi::Client.new(
68
+ :server_ip => '127.0.0.1',
69
+ :server_port => 8080,
70
+ :username => 'username',
71
+ :password => 'password'
72
+ )
73
+ client.job.class.should == JenkinsApi::Client::Job
74
+ end
75
+ end
76
+
77
+ describe "#node" do
78
+ it "Should return a Client::Node object" do
79
+ client = JenkinsApi::Client.new(
80
+ :server_ip => '127.0.0.1',
81
+ :server_port => 8080,
82
+ :username => 'username',
83
+ :password => 'password'
84
+ )
85
+ client.node.class.should == JenkinsApi::Client::Node
86
+ end
87
+ end
88
+
89
+ describe "#view" do
90
+ it "Should return a Client::View object" do
91
+ client = JenkinsApi::Client.new(
92
+ :server_ip => '127.0.0.1',
93
+ :server_port => 8080,
94
+ :username => 'username',
95
+ :password => 'password'
96
+ )
97
+ client.view.class.should == JenkinsApi::Client::View
98
+ end
99
+ end
100
+
101
+ describe "#system" do
102
+ it "Should return a Client::System object" do
103
+ client = JenkinsApi::Client.new(
104
+ :server_ip => '127.0.0.1',
105
+ :server_port => 8080,
106
+ :username => 'username',
107
+ :password => 'password'
108
+ )
109
+ client.system.class.should == JenkinsApi::Client::System
110
+ end
111
+ end
112
+
113
+ describe "#queue" do
114
+ it "Should return a Client::BuildQueue object" do
115
+ client = JenkinsApi::Client.new(
116
+ :server_ip => '127.0.0.1',
117
+ :server_port => 8080,
118
+ :username => 'username',
119
+ :password => 'password'
120
+ )
121
+ client.queue.class.should == JenkinsApi::Client::BuildQueue
122
+ end
123
+ end
124
+ end
125
+
126
+ describe "InstanceMethods" do
127
+ describe "#getroot" do
128
+ it "is defined with no parameters" do
129
+ expect(
130
+ lambda { @client.get_root }
131
+ ).not_to raise_error(NoMethodError)
132
+ end
133
+ end
134
+
135
+ describe "#api_get_request" do
136
+ it "defined and should accept url_prefix, tree, and url_suffix" do
137
+ expect(
138
+ lambda { @client.api_get_request("/some/prefix", "tree", "/json") }
139
+ ).not_to raise_error(NoMethodError)
140
+ end
141
+ end
142
+
143
+ describe "#api_post_request" do
144
+ it "is defined and should accept url_prefix" do
145
+ expect(
146
+ lambda { @client.api_post_request("/some/prefix") }
147
+ ).not_to raise_error(NoMethodError)
148
+ end
149
+ end
150
+
151
+ describe "#get_config" do
152
+ it "is defined and should accept url_prefix" do
153
+ expect(
154
+ lambda { @client.get_config("/some/prefix") }
155
+ ).not_to raise_error(NoMethodError)
156
+ end
157
+ end
158
+
159
+ describe "#post_config" do
160
+ it "is defined and should accept url_prefix and xml" do
161
+ expect(
162
+ lambda { @client.post_config("/some/prefix", "<tag></tag>") }
163
+ ).not_to raise_error(NoMethodError)
164
+ end
165
+ end
166
+ end
167
+ end
168
+
169
+ context "With some required parameters missing" do
170
+ context "#initialize" do
171
+ it "Should fail if server_ip is missing" do
172
+ expect(
173
+ lambda do
174
+ JenkinsApi::Client.new({
175
+ :bogus => '127.0.0.1',
176
+ :server_port => 8080,
177
+ :username => 'username',
178
+ :password => 'password'
179
+ })
180
+ end
181
+ ).to raise_error
182
+ end
183
+
184
+ it "Should fail if username is missing" do
185
+ expect(
186
+ lambda do
187
+ JenkinsApi::Client.new({
188
+ :server_ip => '127.0.0.1',
189
+ :server_port => 8080,
190
+ :bogus => 'username',
191
+ :password => 'password'
192
+ })
193
+ end
194
+ ).to raise_error
195
+ end
196
+
197
+ it "Should fail if password is missing" do
198
+ expect(
199
+ lambda do
200
+ JenkinsApi::Client.new({
201
+ :server_ip => '127.0.0.1',
202
+ :server_port => 8080,
203
+ :username => 'username',
204
+ :bogus => 'password'
205
+ })
206
+ end
207
+ ).to raise_error
208
+ end
209
+ end
210
+ end
211
+ end