subordinate 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,118 @@
1
+ require "spec_helper"
2
+
3
+ auth = authentications = YAML::load(File.open(File.expand_path("../../../fixtures/authentications.yml", __FILE__)))
4
+
5
+ # Client Spec
6
+ describe Subordinate::Client do
7
+ before do
8
+ Subordinate.reset!
9
+ Subordinate.configure do |c|
10
+ c.subdomain = auth["subdomain"]
11
+ c.domain = auth["domain"]
12
+ c.port = auth["port"]
13
+ c.ssl = false
14
+ end
15
+ end
16
+ let(:subordinate) { Subordinate::Client.new(:username => auth["username"], :api_token => auth["token"]) }
17
+
18
+ describe "#build", :vcr do
19
+ let(:current_response) { subordinate.build(auth["job"], 1) }
20
+
21
+ it "returns the job response" do
22
+ current_response.should_not be_nil
23
+ end
24
+
25
+ context "methods" do
26
+ it "responds to .actions" do
27
+ current_response.should respond_to(:actions)
28
+ end
29
+
30
+ it "responds to .artifacts" do
31
+ current_response.should respond_to(:artifacts)
32
+ end
33
+
34
+ it "responds to .building" do
35
+ current_response.should respond_to(:building)
36
+ end
37
+
38
+ it "responds to .description" do
39
+ current_response.should respond_to(:description)
40
+ end
41
+
42
+ it "responds to .duration" do
43
+ current_response.should respond_to(:duration)
44
+ end
45
+
46
+ it "responds to .estimatedDuration" do
47
+ current_response.should respond_to(:estimatedDuration)
48
+ end
49
+
50
+ it "responds to .executor" do
51
+ current_response.should respond_to(:executor)
52
+ end
53
+
54
+ it "responds to .fullDisplayName" do
55
+ current_response.should respond_to(:fullDisplayName)
56
+ end
57
+
58
+ it "responds to .id" do
59
+ current_response.should respond_to(:id)
60
+ end
61
+
62
+ it "responds to .keepLog" do
63
+ current_response.should respond_to(:keepLog)
64
+ end
65
+
66
+ it "responds to .number" do
67
+ current_response.should respond_to(:number)
68
+ end
69
+
70
+ it "responds to .result" do
71
+ current_response.should respond_to(:result)
72
+ end
73
+
74
+ it "responds to .timestamp" do
75
+ current_response.should respond_to(:timestamp)
76
+ end
77
+
78
+ it "responds to .url" do
79
+ current_response.should respond_to(:url)
80
+ end
81
+
82
+ it "responds to .builtOn" do
83
+ current_response.should respond_to(:builtOn)
84
+ end
85
+
86
+ it "responds to .changeSet" do
87
+ current_response.should respond_to(:changeSet)
88
+ end
89
+
90
+ it "responds to .culprits" do
91
+ current_response.should respond_to(:culprits)
92
+ end
93
+ end
94
+ end
95
+
96
+ describe "#build_timestamp" do
97
+ it "returns the timestamp of the specified build" do
98
+ stub_request(:get, "#{subordinate.api_endpoint}/job/#{auth['job']}/1/buildTimestamp").
99
+ to_return(:status => 302, :body => "3/25/13 3:30 AM", :headers => {})
100
+
101
+
102
+ subordinate.build_timestamp(auth["job"], 1).should == "3/25/13 3:30 AM"
103
+ end
104
+
105
+ it "returns the timestamp in the specified format" do
106
+ stub_request(:get, "#{subordinate.api_endpoint}/job/#{auth['job']}/1/buildTimestamp?format=yyyy/MM/dd").
107
+ to_return(:status => 302, :body => "2013/03/25", :headers => {})
108
+
109
+ subordinate.build_timestamp(auth["job"], 1, "yyyy/MM/dd").should == "2013/03/25"
110
+ end
111
+ end
112
+
113
+ describe "#console_output_for_build", :vcr do
114
+ it "returns the console output for a complete build" do
115
+ subordinate.console_output_for_build(auth["job"], 1).should_not be_nil
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,171 @@
1
+ require "spec_helper"
2
+
3
+ auth = authentications = YAML::load(File.open(File.expand_path("../../../fixtures/authentications.yml", __FILE__)))
4
+
5
+ # Client Spec
6
+ describe Subordinate::Client do
7
+ before do
8
+ Subordinate.reset!
9
+ Subordinate.configure do |c|
10
+ c.subdomain = auth["subdomain"]
11
+ c.domain = auth["domain"]
12
+ c.port = auth["port"]
13
+ c.ssl = false
14
+ end
15
+ end
16
+ let(:subordinate) { Subordinate::Client.new(:username => auth["username"], :api_token => auth["token"]) }
17
+
18
+ describe "#job", :vcr do
19
+ let(:current_response) { subordinate.job(auth["job"]) }
20
+
21
+ it "should return the job response" do
22
+ current_response.should_not be_nil
23
+ end
24
+
25
+ context "methods" do
26
+ it "responds to .actions" do
27
+ current_response.should respond_to(:actions)
28
+ end
29
+
30
+ it "responds to .description" do
31
+ current_response.should respond_to(:description)
32
+ end
33
+
34
+ it "responds to .displayName" do
35
+ current_response.should respond_to(:displayName)
36
+ end
37
+
38
+ it "responds to .displayNameOrNull" do
39
+ current_response.should respond_to(:displayNameOrNull)
40
+ end
41
+
42
+ it "responds to .name" do
43
+ current_response.should respond_to(:name)
44
+ end
45
+
46
+ it "responds to .url" do
47
+ current_response.should respond_to(:url)
48
+ end
49
+
50
+ it "responds to .buildable" do
51
+ current_response.should respond_to(:buildable)
52
+ end
53
+
54
+ it "responds to .builds" do
55
+ current_response.should respond_to(:builds)
56
+ end
57
+
58
+ it "responds to .color" do
59
+ current_response.should respond_to(:color)
60
+ end
61
+
62
+ it "responds to .firstBuild" do
63
+ current_response.should respond_to(:firstBuild)
64
+ end
65
+
66
+ it "responds to .healthReport" do
67
+ current_response.should respond_to(:healthReport)
68
+ end
69
+
70
+ it "responds to .inQueue" do
71
+ current_response.should respond_to(:inQueue)
72
+ end
73
+
74
+ it "responds to .keepDependencies" do
75
+ current_response.should respond_to(:keepDependencies)
76
+ end
77
+
78
+ it "responds to .lastBuild" do
79
+ current_response.should respond_to(:lastBuild)
80
+ end
81
+
82
+ it "responds to .lastCompletedBuild" do
83
+ current_response.should respond_to(:lastCompletedBuild)
84
+ end
85
+
86
+ it "responds to .lastFailedBuild" do
87
+ current_response.should respond_to(:lastFailedBuild)
88
+ end
89
+
90
+ it "responds to .lastStableBuild" do
91
+ current_response.should respond_to(:lastStableBuild)
92
+ end
93
+
94
+ it "responds to .lastSuccessfulBuild" do
95
+ current_response.should respond_to(:lastSuccessfulBuild)
96
+ end
97
+
98
+ it "responds to .lastUnstableBuild" do
99
+ current_response.should respond_to(:lastUnstableBuild)
100
+ end
101
+
102
+ it "responds to .lastUnsuccessfulBuild" do
103
+ current_response.should respond_to(:lastUnsuccessfulBuild)
104
+ end
105
+
106
+ it "responds to .nextBuildNumber" do
107
+ current_response.should respond_to(:nextBuildNumber)
108
+ end
109
+
110
+ it "responds to .property" do
111
+ current_response.should respond_to(:property)
112
+ end
113
+
114
+ it "responds to .queueItem" do
115
+ current_response.should respond_to(:queueItem)
116
+ end
117
+
118
+ it "responds to .concurrentBuild" do
119
+ current_response.should respond_to(:concurrentBuild)
120
+ end
121
+
122
+ it "responds to .downstreamProjects" do
123
+ current_response.should respond_to(:downstreamProjects)
124
+ end
125
+
126
+ it "responds to .scm" do
127
+ current_response.should respond_to(:scm)
128
+ end
129
+
130
+ it "responds to .upstreamProjects" do
131
+ current_response.should respond_to(:upstreamProjects)
132
+ end
133
+ end
134
+ end
135
+
136
+ describe "#build_job" do
137
+ it "builds the job specified" do
138
+ stub_request(:post, "#{subordinate.api_endpoint}/job/#{auth['job']}/build").
139
+ to_return(:status => 302, :body => "", :headers => {})
140
+
141
+ subordinate.build_job(auth["job"]).should == 302
142
+ end
143
+ end
144
+
145
+ describe "#disable_job" do
146
+ it "disables the specified job" do
147
+ stub_request(:post, "#{subordinate.api_endpoint}/job/#{auth['job']}/disable").
148
+ to_return(:status => 302, :body => "", :headers => {})
149
+
150
+ subordinate.disable_job(auth["job"]).should == 302
151
+ end
152
+ end
153
+
154
+ describe "#enable_job" do
155
+ it "enables the specified job" do
156
+ stub_request(:post, "#{subordinate.api_endpoint}/job/#{auth['job']}/enable").
157
+ to_return(:status => 302, :body => "", :headers => {})
158
+
159
+ subordinate.enable_job(auth["job"]).should == 302
160
+ end
161
+ end
162
+
163
+ describe "#delete_job" do
164
+ it "deletes the specified job" do
165
+ stub_request(:post, "#{subordinate.api_endpoint}/job/#{auth['job']}/delete").
166
+ to_return(:status => 302, :body => "", :headers => {})
167
+
168
+ subordinate.delete_job(auth["job"]).should == 302
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,125 @@
1
+ require "spec_helper"
2
+
3
+ auth = authentications = YAML::load(File.open(File.expand_path("../../../fixtures/authentications.yml", __FILE__)))
4
+
5
+ # Client Spec
6
+ describe Subordinate::Client do
7
+ before do
8
+ Subordinate.reset!
9
+ Subordinate.configure do |c|
10
+ c.subdomain = auth["subdomain"]
11
+ c.domain = auth["domain"]
12
+ c.port = auth["port"]
13
+ c.ssl = false
14
+ end
15
+ end
16
+ let(:subordinate) { Subordinate::Client.new(:username => auth["username"], :api_token => auth["token"]) }
17
+
18
+ describe "#root", :vcr do
19
+ let(:current_response) { subordinate.root }
20
+
21
+ it "returns the root response", :vcr do
22
+ current_response.should_not be_nil
23
+ end
24
+
25
+ describe "methods" do
26
+ it "contains the assignedLabels" do
27
+ current_response.should respond_to(:assignedLabels)
28
+ end
29
+
30
+ it "contains the mode" do
31
+ current_response.should respond_to(:mode)
32
+ end
33
+
34
+ it "contains the nodeDescription" do
35
+ current_response.should respond_to(:nodeDescription)
36
+ end
37
+
38
+ it "contains the nodeName" do
39
+ current_response.should respond_to(:nodeName)
40
+ end
41
+
42
+ it "contains the numExecutors" do
43
+ current_response.should respond_to(:numExecutors)
44
+ end
45
+
46
+ it "contains the description" do
47
+ current_response.should respond_to(:description)
48
+ end
49
+
50
+ it "contains the jobs" do
51
+ current_response.should respond_to(:jobs)
52
+ end
53
+
54
+ it "contains the overallLoad" do
55
+ current_response.should respond_to(:overallLoad)
56
+ end
57
+
58
+ it "contains the primaryView" do
59
+ current_response.should respond_to(:primaryView)
60
+ end
61
+
62
+ it "contains the quietingDown" do
63
+ current_response.should respond_to(:quietingDown)
64
+ end
65
+
66
+ it "contains the slaveAgentPort" do
67
+ current_response.should respond_to(:slaveAgentPort)
68
+ end
69
+
70
+ it "contains the unlabeledLoad" do
71
+ current_response.should respond_to(:unlabeledLoad)
72
+ end
73
+
74
+ it "contains the useCrumbs" do
75
+ current_response.should respond_to(:useCrumbs)
76
+ end
77
+
78
+ it "contains the useSecurity" do
79
+ current_response.should respond_to(:useSecurity)
80
+ end
81
+
82
+ it "contains the views" do
83
+ current_response.should respond_to(:views)
84
+ end
85
+ end
86
+ end
87
+
88
+ describe "#quiet_down" do
89
+ it "will shut down the server" do
90
+ stub_request(:post, "#{subordinate.api_endpoint}/quietDown").
91
+ to_return(:status => 302, :body => "", :headers => {})
92
+
93
+ subordinate.quiet_down.should == 302
94
+ end
95
+ end
96
+
97
+ describe "#cancel_quiet_down" do
98
+ it "will cancel a shut down request to the server" do
99
+ stub_request(:post, "#{subordinate.api_endpoint}/cancelQuietDown").
100
+ to_return(:status => 302, :body => "", :headers => {})
101
+
102
+ subordinate.cancel_quiet_down.should == 302
103
+ end
104
+ end
105
+
106
+ # Because vcr makes real requests the first time when redoing cassettes the restart specs must be
107
+ # commented out since random order is used.
108
+ describe "#restart" do
109
+ it "will force restart the jenkins server" do
110
+ stub_request(:post, "#{subordinate.api_endpoint}/restart").
111
+ to_return(:status => 302, :body => "", :headers => {})
112
+
113
+ subordinate.restart.should == 302
114
+ end
115
+ end
116
+
117
+ describe "#safe_restart" do
118
+ it "will restart the jenkins server" do
119
+ stub_request(:post, "#{subordinate.api_endpoint}/safeRestart").
120
+ to_return(:status => 302, :body => "", :headers => {})
121
+
122
+ subordinate.safe_restart.should == 302
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ auth = authentications = YAML::load(File.open(File.expand_path("../../fixtures/authentications.yml", __FILE__)))
4
+
5
+ # Client Spec
6
+ describe Subordinate::Client do
7
+ before do
8
+ Subordinate.reset!
9
+ Subordinate.configure do |c|
10
+ c.subdomain = auth["subdomain"]
11
+ c.domain = auth["domain"]
12
+ c.port = auth["port"]
13
+ c.ssl = false
14
+ end
15
+ end
16
+
17
+ describe "#initialize" do
18
+ it "can be initialized" do
19
+ Subordinate::Client.new.class.should == Subordinate::Client
20
+ end
21
+
22
+ it "works with basic username and api token", :vcr do
23
+ Subordinate::Client.new(:username => auth["username"], :api_token => auth["token"]).root
24
+ .should_not
25
+ raise_exception
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'subordinate/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "subordinate"
8
+ gem.version = Subordinate::VERSION
9
+ gem.authors = ["Jason Truluck"]
10
+ gem.email = ["jason.truluck@gmail.com"]
11
+ gem.description = %q{Jenkins API wrapper}
12
+ gem.summary = gem.description
13
+ gem.homepage = "https://github.com/jasontruluck/subordinate"
14
+
15
+ # gem.add_dependency "faraday"
16
+ gem.add_dependency "faraday"
17
+ gem.add_dependency "faraday_middleware"
18
+ gem.add_dependency "hashie"
19
+ gem.add_development_dependency "rspec"
20
+ gem.add_development_dependency "rake"
21
+ gem.add_development_dependency "vcr"
22
+ gem.add_development_dependency "mocha"
23
+ gem.add_development_dependency "webmock"
24
+ gem.add_development_dependency "simplecov"
25
+ gem.add_development_dependency "capybara"
26
+ gem.add_development_dependency "yard"
27
+ gem.add_development_dependency "redcarpet"
28
+
29
+ gem.files = `git ls-files`.split($/)
30
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
31
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
32
+ gem.require_paths = ["lib"]
33
+ end