subordinate 0.6.1 → 0.6.2
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.
- checksums.yaml +8 -8
- data/.travis.yml +1 -38
- data/README.md +0 -21
- data/lib/subordinate/version.rb +1 -1
- data/spec/spec_helper.rb +7 -20
- data/spec/subordinate/client/build_spec.rb +48 -32
- data/spec/subordinate/client/executor_spec.rb +12 -7
- data/spec/subordinate/client/job_spec.rb +20 -24
- data/spec/subordinate/client/load_spec.rb +9 -6
- data/spec/subordinate/client/people_spec.rb +10 -7
- data/spec/subordinate/client/queue_spec.rb +10 -7
- data/spec/subordinate/client/system_spec.rb +10 -7
- data/spec/subordinate/client/view_spec.rb +45 -15
- data/spec/subordinate/client_spec.rb +14 -11
- data/spec/subordinate/configuration_spec.rb +8 -7
- data/spec/support/mocks/base.json +49 -0
- data/spec/support/mocks/build.json +126 -0
- data/spec/support/mocks/build_timestamp.txt +1 -0
- data/spec/support/mocks/build_timestamp_formatted.txt +1 -0
- data/spec/support/mocks/computer.json +233 -0
- data/spec/support/mocks/console_output.txt +2221 -0
- data/spec/support/mocks/console_output_offset.txt +2194 -0
- data/spec/support/mocks/console_output_pre.html +2222 -0
- data/spec/support/mocks/empty.json +0 -0
- data/spec/support/mocks/job.json +92 -0
- data/spec/support/mocks/load_statistics.json +14 -0
- data/spec/support/mocks/people.json +15 -0
- data/spec/support/mocks/queue.json +30 -0
- data/spec/support/mocks/view.json +45 -0
- data/spec/support/mocks/views.json +638 -0
- data/subordinate.gemspec +11 -14
- metadata +76 -90
- data/spec/fixtures/authentications.yml.sample +0 -8
@@ -1,19 +1,22 @@
|
|
1
|
+
# Queue Spec
|
1
2
|
require "spec_helper"
|
2
3
|
|
3
|
-
# Queue Spec
|
4
4
|
describe Subordinate::Client do
|
5
5
|
before do
|
6
6
|
Subordinate.reset!
|
7
7
|
Subordinate.configure do |c|
|
8
|
-
c.subdomain =
|
9
|
-
c.domain =
|
10
|
-
c.port =
|
8
|
+
c.subdomain = "jenkins"
|
9
|
+
c.domain = "example.com"
|
10
|
+
c.port = 8080
|
11
11
|
c.ssl = false
|
12
12
|
end
|
13
13
|
end
|
14
|
-
let(:subordinate) { Subordinate::Client.new(:username => ENV["USERNAME"], :api_token => ENV["TOKEN"]) }
|
15
14
|
|
16
|
-
|
15
|
+
let(:subordinate) { Subordinate::Client.new(:username => "someusername", :api_token => "sometoken") }
|
16
|
+
|
17
|
+
describe "#build_queue" do
|
18
|
+
before(:each) { stub_jenkins(:get, "/queue/api/json", "queue.json") }
|
19
|
+
|
17
20
|
let(:current_response) { subordinate.build_queue }
|
18
21
|
|
19
22
|
it "returns the build queue response" do
|
@@ -26,4 +29,4 @@ describe Subordinate::Client do
|
|
26
29
|
end
|
27
30
|
end
|
28
31
|
end
|
29
|
-
end
|
32
|
+
end
|
@@ -1,19 +1,22 @@
|
|
1
|
+
# System Spec
|
1
2
|
require "spec_helper"
|
2
3
|
|
3
|
-
# Client Spec
|
4
4
|
describe Subordinate::Client do
|
5
5
|
before do
|
6
6
|
Subordinate.reset!
|
7
7
|
Subordinate.configure do |c|
|
8
|
-
c.subdomain =
|
9
|
-
c.domain =
|
10
|
-
c.port =
|
8
|
+
c.subdomain = "jenkins"
|
9
|
+
c.domain = "example.com"
|
10
|
+
c.port = 8080
|
11
11
|
c.ssl = false
|
12
12
|
end
|
13
13
|
end
|
14
|
-
let(:subordinate) { Subordinate::Client.new(:username => ENV["USERNAME"], :api_token => ENV["TOKEN"]) }
|
15
14
|
|
16
|
-
|
15
|
+
let(:subordinate) { Subordinate::Client.new(:username => "someusername", :api_token => "sometoken") }
|
16
|
+
|
17
|
+
describe "#root" do
|
18
|
+
before(:each) { stub_jenkins(:get, "/api/json", "base.json") }
|
19
|
+
|
17
20
|
let(:current_response) { subordinate.root }
|
18
21
|
|
19
22
|
it "returns the root response", :vcr do
|
@@ -120,4 +123,4 @@ describe Subordinate::Client do
|
|
120
123
|
subordinate.safe_restart.should == 302
|
121
124
|
end
|
122
125
|
end
|
123
|
-
end
|
126
|
+
end
|
@@ -1,21 +1,23 @@
|
|
1
|
+
# View Spec
|
1
2
|
require "spec_helper"
|
2
3
|
|
3
|
-
# View Spec
|
4
4
|
describe Subordinate::Client do
|
5
5
|
before do
|
6
6
|
Subordinate.reset!
|
7
7
|
Subordinate.configure do |c|
|
8
|
-
c.subdomain =
|
9
|
-
c.domain =
|
10
|
-
c.port =
|
8
|
+
c.subdomain = "jenkins"
|
9
|
+
c.domain = "example.com"
|
10
|
+
c.port = 8080
|
11
11
|
c.ssl = false
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
let(:subordinate) { Subordinate::Client.new(:username =>
|
15
|
+
let(:subordinate) { Subordinate::Client.new(:username => "someusername", :api_token => "sometoken") }
|
16
16
|
|
17
|
-
describe "#view"
|
18
|
-
|
17
|
+
describe "#view" do
|
18
|
+
before(:each) { stub_jenkins(:get, "/view/someview/api/json", "view.json") }
|
19
|
+
|
20
|
+
let(:current_response) { subordinate.view("someview") }
|
19
21
|
|
20
22
|
it "returns the view response" do
|
21
23
|
current_response.should_not be_nil
|
@@ -44,7 +46,9 @@ describe Subordinate::Client do
|
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
47
|
-
describe "#all_views"
|
49
|
+
describe "#all_views" do
|
50
|
+
before(:each) { stub_jenkins(:get, "/api/json?tree=views%5Bname,url,jobs%5Bname,url%5D%5D", "views.json") }
|
51
|
+
|
48
52
|
let(:current_response) { subordinate.all_views }
|
49
53
|
|
50
54
|
it "returns the view response" do
|
@@ -74,19 +78,45 @@ describe Subordinate::Client do
|
|
74
78
|
|
75
79
|
describe "#add_job_to_view" do
|
76
80
|
it "responds with a success" do
|
77
|
-
|
78
|
-
|
81
|
+
stub_jenkins(:post, "/view/someview/addJobToView?name=somejob", 200, "empty.json")
|
82
|
+
|
83
|
+
subordinate.add_job_to_view("someview", "somejob").status.should == 200
|
84
|
+
end
|
85
|
+
|
86
|
+
context "error" do
|
87
|
+
it "returns 404 when not found" do
|
88
|
+
stub_jenkins(:post, "/view/someview/addJobToView?name=somejob", 404, "empty.json")
|
89
|
+
|
90
|
+
subordinate.add_job_to_view("someview", "somejob").status.should == 404
|
91
|
+
end
|
92
|
+
|
93
|
+
it "returns 500 when server error" do
|
94
|
+
stub_jenkins(:post, "/view/someview/addJobToView?name=somejob", 500, "empty.json")
|
79
95
|
|
80
|
-
|
96
|
+
subordinate.add_job_to_view("someview", "somejob").status.should == 500
|
97
|
+
end
|
81
98
|
end
|
82
99
|
end
|
83
100
|
|
84
101
|
describe "#remove_job_from_view" do
|
85
102
|
it "responds with a success" do
|
86
|
-
|
87
|
-
|
103
|
+
stub_jenkins(:post, "/view/someview/removeJobFromView?name=somejob", 200, "empty.json")
|
104
|
+
|
105
|
+
subordinate.remove_job_from_view("someview", "somejob").status.should == 200
|
106
|
+
end
|
107
|
+
|
108
|
+
context "error" do
|
109
|
+
it "returns 404 when not found" do
|
110
|
+
stub_jenkins(:post, "/view/someview/removeJobFromView?name=somejob", 404, "empty.json")
|
88
111
|
|
89
|
-
|
112
|
+
subordinate.remove_job_from_view("someview", "somejob").status.should == 404
|
113
|
+
end
|
114
|
+
|
115
|
+
it "returns 500 when server error" do
|
116
|
+
stub_jenkins(:post, "/view/someview/removeJobFromView?name=somejob", 500, "empty.json")
|
117
|
+
|
118
|
+
subordinate.remove_job_from_view("someview", "somejob").status.should == 500
|
119
|
+
end
|
90
120
|
end
|
91
121
|
end
|
92
|
-
end
|
122
|
+
end
|
@@ -5,9 +5,9 @@ describe Subordinate::Client do
|
|
5
5
|
before do
|
6
6
|
Subordinate.reset!
|
7
7
|
Subordinate.configure do |c|
|
8
|
-
c.subdomain =
|
9
|
-
c.domain =
|
10
|
-
c.port =
|
8
|
+
c.subdomain = "jenkins"
|
9
|
+
c.domain = "example.com"
|
10
|
+
c.port = 8080
|
11
11
|
c.ssl = false
|
12
12
|
end
|
13
13
|
end
|
@@ -17,6 +17,8 @@ describe Subordinate::Client do
|
|
17
17
|
let(:subdomain) { "awesome" }
|
18
18
|
let(:port) { 2000 }
|
19
19
|
let(:ssl) { false }
|
20
|
+
let(:username) { "someusername" }
|
21
|
+
let(:token) { "sometoken" }
|
20
22
|
|
21
23
|
it "can be initialized" do
|
22
24
|
Subordinate::Client.new.class.should == Subordinate::Client
|
@@ -26,34 +28,35 @@ describe Subordinate::Client do
|
|
26
28
|
Subordinate.new.class.should == Subordinate::Client
|
27
29
|
end
|
28
30
|
|
29
|
-
it "works with basic username and api token"
|
30
|
-
|
31
|
+
it "works with basic username and api token" do
|
32
|
+
stub_jenkins(:get, "/api/json", "base.json")
|
33
|
+
Subordinate::Client.new(:username => username, :api_token => token).root
|
31
34
|
.should_not
|
32
35
|
raise_exception
|
33
36
|
end
|
34
37
|
|
35
38
|
it "generates an endpoint without username and api token" do
|
36
|
-
client = Subordinate::Client.new(:
|
37
|
-
client.api_endpoint.should_not include("#{
|
39
|
+
client = Subordinate::Client.new(:api_token => token )
|
40
|
+
client.api_endpoint.should_not include("#{username}:#{token}")
|
38
41
|
end
|
39
42
|
|
40
43
|
it "can be configured to use a new domain via options" do
|
41
|
-
client = Subordinate::Client.new(:
|
44
|
+
client = Subordinate::Client.new(:api_token => token, :domain => domain )
|
42
45
|
client.domain.should == domain
|
43
46
|
end
|
44
47
|
|
45
48
|
it "can be configured to use a new subdomain via options" do
|
46
|
-
client = Subordinate::Client.new(:
|
49
|
+
client = Subordinate::Client.new(:api_token => token, :subdomain => subdomain )
|
47
50
|
client.subdomain.should == subdomain
|
48
51
|
end
|
49
52
|
|
50
53
|
it "can be configured to use a new port via options" do
|
51
|
-
client = Subordinate::Client.new(:
|
54
|
+
client = Subordinate::Client.new(:api_token => token, :port => port )
|
52
55
|
client.port.should == port
|
53
56
|
end
|
54
57
|
|
55
58
|
it "can be configured to use a different ssl option via options" do
|
56
|
-
client = Subordinate::Client.new(:
|
59
|
+
client = Subordinate::Client.new(:api_token => token, :ssl => ssl )
|
57
60
|
client.ssl.should == ssl
|
58
61
|
end
|
59
62
|
end
|
@@ -1,13 +1,14 @@
|
|
1
|
+
# Configuration Spec
|
1
2
|
require "spec_helper"
|
2
3
|
|
3
|
-
# Configuration Spec
|
4
4
|
describe Subordinate::Client do
|
5
5
|
before do
|
6
6
|
Subordinate.reset!
|
7
|
+
|
7
8
|
Subordinate.configure do |c|
|
8
|
-
c.subdomain =
|
9
|
-
c.domain =
|
10
|
-
c.port =
|
9
|
+
c.subdomain = "jenkins"
|
10
|
+
c.domain = "example.com"
|
11
|
+
c.port = 8080
|
11
12
|
c.ssl = false
|
12
13
|
end
|
13
14
|
end
|
@@ -60,7 +61,7 @@ describe Subordinate::Client do
|
|
60
61
|
describe "without a subdomain" do
|
61
62
|
it "builds an endpoint without a subdomain" do
|
62
63
|
client = Subordinate.new(:subdomain => nil)
|
63
|
-
client.api_endpoint.should == "http
|
64
|
+
client.api_endpoint.should == "http://example.com:8080"
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
@@ -87,7 +88,7 @@ describe Subordinate::Client do
|
|
87
88
|
describe "without a port" do
|
88
89
|
it "builds an endpoint without a port" do
|
89
90
|
client = Subordinate.new(:port => nil)
|
90
|
-
client.api_endpoint.should == "http
|
91
|
+
client.api_endpoint.should == "http://jenkins.example.com"
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
@@ -116,4 +117,4 @@ describe Subordinate::Client do
|
|
116
117
|
end
|
117
118
|
end
|
118
119
|
end
|
119
|
-
end
|
120
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
{
|
2
|
+
"assignedLabels" : [
|
3
|
+
{
|
4
|
+
|
5
|
+
}
|
6
|
+
],
|
7
|
+
"mode" : "NORMAL",
|
8
|
+
"nodeDescription" : "the master Jenkins node",
|
9
|
+
"nodeName" : "",
|
10
|
+
"numExecutors" : 2,
|
11
|
+
"description" : null,
|
12
|
+
"jobs" : [
|
13
|
+
{
|
14
|
+
"name" : "Mission-Control-Production",
|
15
|
+
"url" : "http://jenkins.missioncontrol.io:8080/job/Mission-Control-Production/",
|
16
|
+
"color" : "red"
|
17
|
+
},
|
18
|
+
{
|
19
|
+
"name" : "Mission-Control-Staging",
|
20
|
+
"url" : "http://jenkins.missioncontrol.io:8080/job/Mission-Control-Staging/",
|
21
|
+
"color" : "blue"
|
22
|
+
},
|
23
|
+
{
|
24
|
+
"name" : "Mission-Control-Staging-Testing",
|
25
|
+
"url" : "http://jenkins.missioncontrol.io:8080/job/Mission-Control-Staging-Testing/",
|
26
|
+
"color" : "red"
|
27
|
+
}
|
28
|
+
],
|
29
|
+
"overallLoad" : {
|
30
|
+
|
31
|
+
},
|
32
|
+
"primaryView" : {
|
33
|
+
"name" : "All",
|
34
|
+
"url" : "http://jenkins.missioncontrol.io:8080/"
|
35
|
+
},
|
36
|
+
"quietingDown" : false,
|
37
|
+
"slaveAgentPort" : 0,
|
38
|
+
"unlabeledLoad" : {
|
39
|
+
|
40
|
+
},
|
41
|
+
"useCrumbs" : false,
|
42
|
+
"useSecurity" : true,
|
43
|
+
"views" : [
|
44
|
+
{
|
45
|
+
"name" : "All",
|
46
|
+
"url" : "http://jenkins.missioncontrol.io:8080/"
|
47
|
+
}
|
48
|
+
]
|
49
|
+
}
|
@@ -0,0 +1,126 @@
|
|
1
|
+
{
|
2
|
+
"actions" : [
|
3
|
+
{
|
4
|
+
"causes" : [
|
5
|
+
{
|
6
|
+
"shortDescription" : "Started by an SCM change"
|
7
|
+
}
|
8
|
+
]
|
9
|
+
},
|
10
|
+
{
|
11
|
+
|
12
|
+
},
|
13
|
+
{
|
14
|
+
"buildsByBranchName" : {
|
15
|
+
"origin/rc" : {
|
16
|
+
"buildNumber" : 363,
|
17
|
+
"buildResult" : null,
|
18
|
+
"marked" : {
|
19
|
+
"SHA1" : "28d38cb39d048c0ceaeff34d033e90a7886aa251",
|
20
|
+
"branch" : [
|
21
|
+
{
|
22
|
+
"SHA1" : "28d38cb39d048c0ceaeff34d033e90a7886aa251",
|
23
|
+
"name" : "origin/rc"
|
24
|
+
}
|
25
|
+
]
|
26
|
+
},
|
27
|
+
"revision" : {
|
28
|
+
"SHA1" : "28d38cb39d048c0ceaeff34d033e90a7886aa251",
|
29
|
+
"branch" : [
|
30
|
+
{
|
31
|
+
"SHA1" : "28d38cb39d048c0ceaeff34d033e90a7886aa251",
|
32
|
+
"name" : "origin/rc"
|
33
|
+
}
|
34
|
+
]
|
35
|
+
}
|
36
|
+
}
|
37
|
+
},
|
38
|
+
"lastBuiltRevision" : {
|
39
|
+
"SHA1" : "28d38cb39d048c0ceaeff34d033e90a7886aa251",
|
40
|
+
"branch" : [
|
41
|
+
{
|
42
|
+
"SHA1" : "28d38cb39d048c0ceaeff34d033e90a7886aa251",
|
43
|
+
"name" : "origin/rc"
|
44
|
+
}
|
45
|
+
]
|
46
|
+
},
|
47
|
+
"remoteUrls" : [
|
48
|
+
"git://github.com/jenkinsci/jenkins"
|
49
|
+
],
|
50
|
+
"scmName" : ""
|
51
|
+
},
|
52
|
+
{
|
53
|
+
|
54
|
+
},
|
55
|
+
{
|
56
|
+
|
57
|
+
},
|
58
|
+
{
|
59
|
+
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"failCount" : 1,
|
63
|
+
"skipCount" : 5,
|
64
|
+
"totalCount" : 4513,
|
65
|
+
"urlName" : "testReport"
|
66
|
+
},
|
67
|
+
{
|
68
|
+
|
69
|
+
}
|
70
|
+
],
|
71
|
+
"artifacts" : [
|
72
|
+
{
|
73
|
+
"displayPath" : "cli-1.531-SNAPSHOT-jar-with-dependencies.jar",
|
74
|
+
"fileName" : "cli-1.531-SNAPSHOT-jar-with-dependencies.jar",
|
75
|
+
"relativePath" : "cli/target/cli-1.531-SNAPSHOT-jar-with-dependencies.jar"
|
76
|
+
}
|
77
|
+
],
|
78
|
+
"building" : false,
|
79
|
+
"description" : null,
|
80
|
+
"duration" : 3083928,
|
81
|
+
"estimatedDuration" : 4359595,
|
82
|
+
"executor" : null,
|
83
|
+
"fullDisplayName" : "jenkins_rc_branch #363",
|
84
|
+
"id" : "2013-09-09_21-32-40",
|
85
|
+
"keepLog" : false,
|
86
|
+
"number" : 363,
|
87
|
+
"result" : "UNSTABLE",
|
88
|
+
"timestamp" : 1378776760497,
|
89
|
+
"url" : "http://ci.jenkins-ci.org/view/Jenkins%20core/job/jenkins_rc_branch/363/",
|
90
|
+
"builtOn" : "remote-slave-6",
|
91
|
+
"changeSet" : {
|
92
|
+
"items" : [
|
93
|
+
{
|
94
|
+
"affectedPaths" : [
|
95
|
+
"core/src/main/resources/lib/form/textbox.jelly",
|
96
|
+
"core/src/main/resources/lib/form/expandableTextbox.jelly",
|
97
|
+
"core/src/main/resources/lib/form/advanced.jelly",
|
98
|
+
"core/src/main/resources/lib/form/textarea.jelly"
|
99
|
+
],
|
100
|
+
"commitId" : "7ce4807087239bbe236cb34e9a8d183caffefe73",
|
101
|
+
"timestamp" : 1367431809000,
|
102
|
+
"author" : {
|
103
|
+
"absoluteUrl" : "http://ci.jenkins-ci.org/user/Jesse%20Glick",
|
104
|
+
"fullName" : "Jesse Glick"
|
105
|
+
},
|
106
|
+
"comment" : "[JENKINS-3107] Expand an Advanced section if some fields are already customized.\nInitial implementation handles only text fields, not e.g. checkboxes.\n",
|
107
|
+
"date" : "2013-05-01 14:10:09 -0400",
|
108
|
+
"id" : "7ce4807087239bbe236cb34e9a8d183caffefe73",
|
109
|
+
"msg" : "[JENKINS-3107] Expand an Advanced section if some fields are already customized.",
|
110
|
+
"paths" : [
|
111
|
+
{
|
112
|
+
"editType" : "edit",
|
113
|
+
"file" : "core/src/main/resources/lib/form/textarea.jelly"
|
114
|
+
}
|
115
|
+
]
|
116
|
+
}
|
117
|
+
],
|
118
|
+
"kind" : "git"
|
119
|
+
},
|
120
|
+
"culprits" : [
|
121
|
+
{
|
122
|
+
"absoluteUrl" : "http://ci.jenkins-ci.org/user/Jesse%20Glick",
|
123
|
+
"fullName" : "Jesse Glick"
|
124
|
+
}
|
125
|
+
]
|
126
|
+
}
|