subordinate 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,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