vmfloaty 1.2.0 → 1.6.0
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 +4 -4
- data/README.md +7 -9
- data/lib/vmfloaty/abs.rb +50 -51
- data/lib/vmfloaty/http.rb +2 -6
- data/lib/vmfloaty/logger.rb +13 -10
- data/lib/vmfloaty/nonstandard_pooler.rb +3 -2
- data/lib/vmfloaty/pooler.rb +19 -24
- data/lib/vmfloaty/service.rb +3 -3
- data/lib/vmfloaty/utils.rb +68 -64
- data/lib/vmfloaty/version.rb +1 -2
- data/lib/vmfloaty.rb +52 -57
- data/spec/spec_helper.rb +30 -5
- data/spec/vmfloaty/abs/auth_spec.rb +26 -17
- data/spec/vmfloaty/abs_spec.rb +52 -43
- data/spec/vmfloaty/auth_spec.rb +23 -13
- data/spec/vmfloaty/nonstandard_pooler_spec.rb +32 -31
- data/spec/vmfloaty/pooler_spec.rb +29 -26
- data/spec/vmfloaty/service_spec.rb +10 -10
- data/spec/vmfloaty/ssh_spec.rb +3 -3
- data/spec/vmfloaty/utils_spec.rb +178 -161
- metadata +13 -21
data/spec/vmfloaty/abs_spec.rb
CHANGED
@@ -11,12 +11,12 @@ describe ABS do
|
|
11
11
|
|
12
12
|
describe '#list' do
|
13
13
|
it 'skips empty platforms and lists aws' do
|
14
|
-
stub_request(:get,
|
15
|
-
|
16
|
-
stub_request(:get,
|
17
|
-
|
18
|
-
stub_request(:get,
|
19
|
-
|
14
|
+
stub_request(:get, 'http://foo/api/v2/status/platforms/vmpooler')
|
15
|
+
.to_return(status: 200, body: '', headers: {})
|
16
|
+
stub_request(:get, 'http://foo/api/v2/status/platforms/ondemand_vmpooler')
|
17
|
+
.to_return(status: 200, body: '', headers: {})
|
18
|
+
stub_request(:get, 'http://foo/api/v2/status/platforms/nspooler')
|
19
|
+
.to_return(status: 200, body: '', headers: {})
|
20
20
|
body = '{
|
21
21
|
"aws_platforms": [
|
22
22
|
"amazon-6-x86_64",
|
@@ -26,50 +26,55 @@ describe ABS do
|
|
26
26
|
"redhat-8-arm64"
|
27
27
|
]
|
28
28
|
}'
|
29
|
-
stub_request(:get,
|
30
|
-
|
29
|
+
stub_request(:get, 'http://foo/api/v2/status/platforms/aws')
|
30
|
+
.to_return(status: 200, body: body, headers: {})
|
31
31
|
|
32
|
+
results = ABS.list(false, 'http://foo')
|
32
33
|
|
33
|
-
results
|
34
|
-
|
35
|
-
expect(results).to include("amazon-6-x86_64", "amazon-7-x86_64", "amazon-7-arm64", "centos-7-x86-64-west", "redhat-8-arm64")
|
34
|
+
expect(results).to include('amazon-6-x86_64', 'amazon-7-x86_64', 'amazon-7-arm64', 'centos-7-x86-64-west',
|
35
|
+
'redhat-8-arm64')
|
36
36
|
end
|
37
37
|
it 'legacy JSON string, prior to PR 306' do
|
38
|
-
stub_request(:get,
|
39
|
-
|
40
|
-
stub_request(:get,
|
41
|
-
|
42
|
-
stub_request(:get,
|
43
|
-
|
38
|
+
stub_request(:get, 'http://foo/api/v2/status/platforms/vmpooler')
|
39
|
+
.to_return(status: 200, body: '', headers: {})
|
40
|
+
stub_request(:get, 'http://foo/api/v2/status/platforms/ondemand_vmpooler')
|
41
|
+
.to_return(status: 200, body: '', headers: {})
|
42
|
+
stub_request(:get, 'http://foo/api/v2/status/platforms/nspooler')
|
43
|
+
.to_return(status: 200, body: '', headers: {})
|
44
44
|
body = '{
|
45
45
|
"aws_platforms": "[\"amazon-6-x86_64\",\"amazon-7-x86_64\",\"amazon-7-arm64\",\"centos-7-x86-64-west\",\"redhat-8-arm64\"]"
|
46
46
|
}'
|
47
|
-
stub_request(:get,
|
48
|
-
|
47
|
+
stub_request(:get, 'http://foo/api/v2/status/platforms/aws')
|
48
|
+
.to_return(status: 200, body: body, headers: {})
|
49
49
|
|
50
|
-
results = ABS.list(false,
|
50
|
+
results = ABS.list(false, 'http://foo')
|
51
51
|
|
52
|
-
expect(results).to include(
|
52
|
+
expect(results).to include('amazon-6-x86_64', 'amazon-7-x86_64', 'amazon-7-arm64', 'centos-7-x86-64-west',
|
53
|
+
'redhat-8-arm64')
|
53
54
|
end
|
54
55
|
end
|
55
56
|
|
56
57
|
describe '#format' do
|
57
58
|
it 'returns an hash formatted like a vmpooler return, plus the job_id' do
|
58
|
-
job_id =
|
59
|
+
job_id = 'generated_by_floaty_12345'
|
59
60
|
abs_formatted_response = [
|
60
|
-
{ 'hostname' => 'aaaaaaaaaaaaaaa.delivery.puppetlabs.net', 'type' => 'centos-7.2-x86_64',
|
61
|
-
|
62
|
-
{ 'hostname' => '
|
61
|
+
{ 'hostname' => 'aaaaaaaaaaaaaaa.delivery.puppetlabs.net', 'type' => 'centos-7.2-x86_64',
|
62
|
+
'engine' => 'vmpooler' },
|
63
|
+
{ 'hostname' => 'aaaaaaaaaaaaaab.delivery.puppetlabs.net', 'type' => 'centos-7.2-x86_64',
|
64
|
+
'engine' => 'vmpooler' },
|
65
|
+
{ 'hostname' => 'aaaaaaaaaaaaaac.delivery.puppetlabs.net', 'type' => 'ubuntu-7.2-x86_64',
|
66
|
+
'engine' => 'vmpooler' }
|
63
67
|
]
|
64
68
|
|
65
69
|
vmpooler_formatted_response = ABS.translated(abs_formatted_response, job_id)
|
66
70
|
|
67
71
|
vmpooler_formatted_compare = {
|
68
72
|
'centos-7.2-x86_64' => {},
|
69
|
-
'ubuntu-7.2-x86_64' => {}
|
73
|
+
'ubuntu-7.2-x86_64' => {}
|
70
74
|
}
|
71
75
|
|
72
|
-
vmpooler_formatted_compare['centos-7.2-x86_64']['hostname'] =
|
76
|
+
vmpooler_formatted_compare['centos-7.2-x86_64']['hostname'] =
|
77
|
+
['aaaaaaaaaaaaaaa.delivery.puppetlabs.net', 'aaaaaaaaaaaaaab.delivery.puppetlabs.net']
|
73
78
|
vmpooler_formatted_compare['ubuntu-7.2-x86_64']['hostname'] = ['aaaaaaaaaaaaaac.delivery.puppetlabs.net']
|
74
79
|
|
75
80
|
vmpooler_formatted_compare['ok'] = true
|
@@ -86,22 +91,22 @@ describe ABS do
|
|
86
91
|
hosts = ['host1']
|
87
92
|
allocated_resources = [
|
88
93
|
{
|
89
|
-
'hostname' => 'host1'
|
94
|
+
'hostname' => 'host1'
|
90
95
|
},
|
91
96
|
{
|
92
|
-
'hostname' => 'host2'
|
93
|
-
}
|
97
|
+
'hostname' => 'host2'
|
98
|
+
}
|
94
99
|
]
|
95
100
|
expect(ABS.all_job_resources_accounted_for(allocated_resources, hosts)).to eq(false)
|
96
101
|
|
97
|
-
hosts = [
|
102
|
+
hosts = %w[host1 host2]
|
98
103
|
allocated_resources = [
|
99
104
|
{
|
100
|
-
'hostname' => 'host1'
|
105
|
+
'hostname' => 'host1'
|
101
106
|
},
|
102
107
|
{
|
103
|
-
'hostname' => 'host2'
|
104
|
-
}
|
108
|
+
'hostname' => 'host2'
|
109
|
+
}
|
105
110
|
]
|
106
111
|
expect(ABS.all_job_resources_accounted_for(allocated_resources, hosts)).to eq(true)
|
107
112
|
end
|
@@ -126,16 +131,16 @@ describe ABS do
|
|
126
131
|
|
127
132
|
it 'will skip a line with a null value returned from abs' do
|
128
133
|
stub_request(:get, 'https://abs.example.com/api/v2/status/queue')
|
129
|
-
.to_return(:
|
134
|
+
.to_return(status: 200, body: @active_requests_response, headers: {})
|
130
135
|
|
131
136
|
ret = ABS.get_active_requests(false, @abs_url, @test_user)
|
132
137
|
|
133
138
|
expect(ret[0]).to include(
|
134
139
|
'allocated_resources' => [{
|
135
140
|
'hostname' => 'take-this.delivery.puppetlabs.net',
|
136
|
-
'type'
|
137
|
-
'engine'
|
138
|
-
}]
|
141
|
+
'type' => 'win-2012r2-x86_64',
|
142
|
+
'engine' => 'vmpooler'
|
143
|
+
}]
|
139
144
|
)
|
140
145
|
end
|
141
146
|
end
|
@@ -147,7 +152,11 @@ describe ABS do
|
|
147
152
|
[
|
148
153
|
{ "state":"allocated", "last_processed":"2020-01-17 22:29:13 +0000", "allocated_resources":[{"hostname":"craggy-chord.delivery.puppetlabs.net", "type":"centos-7-x86_64", "engine":"vmpooler"}, {"hostname":"visible-revival.delivery.puppetlabs.net", "type":"centos-7-x86_64", "engine":"vmpooler"}], "audit_log":{"2020-01-17 22:28:45 +0000":"Allocated craggy-chord.delivery.puppetlabs.net, visible-revival.delivery.puppetlabs.net for job 1579300120799"}, "request":{"resources":{"centos-7-x86_64":2}, "job":{"id":"1579300120799", "tags":{"user":"test-user"}, "user":"test-user", "time-received":1579300120}, "priority":3}}
|
149
154
|
]'
|
150
|
-
@return_request = {
|
155
|
+
@return_request = {
|
156
|
+
"job_id" => "1579300120799",
|
157
|
+
"hosts" => [{"hostname"=>"craggy-chord.delivery.puppetlabs.net","type"=>"centos-7-x86_64","engine"=>"vmpooler"},
|
158
|
+
{"hostname"=>"visible-revival.delivery.puppetlabs.net","type"=>"centos-7-x86_64","engine"=>"vmpooler"}]
|
159
|
+
}
|
151
160
|
# rubocop:enable Layout/LineLength
|
152
161
|
@token = 'utpg2i2xswor6h8ttjhu3d47z53yy47y'
|
153
162
|
@test_user = 'test-user'
|
@@ -157,15 +166,15 @@ describe ABS do
|
|
157
166
|
|
158
167
|
it 'will delete the whole job' do
|
159
168
|
stub_request(:get, 'https://abs.example.com/api/v2/status/queue')
|
160
|
-
.to_return(:
|
169
|
+
.to_return(status: 200, body: @active_requests_response, headers: {})
|
161
170
|
stub_request(:post, 'https://abs.example.com/api/v2/return')
|
162
|
-
.with(:
|
163
|
-
.to_return(:
|
171
|
+
.with(headers: get_headers(content_type: 'application/x-www-form-urlencoded', token: @token), body: @return_request.to_json)
|
172
|
+
.to_return(status: 200, body: 'OK', headers: {})
|
164
173
|
|
165
174
|
ret = ABS.delete(false, @abs_url, @hosts, @token, @test_user)
|
166
175
|
|
167
176
|
expect(ret).to include(
|
168
|
-
'craggy-chord.delivery.puppetlabs.net' => { 'ok'=>true }, 'visible-revival.delivery.puppetlabs.net' => { 'ok'=>true }
|
177
|
+
'craggy-chord.delivery.puppetlabs.net' => { 'ok' => true }, 'visible-revival.delivery.puppetlabs.net' => { 'ok' => true }
|
169
178
|
)
|
170
179
|
end
|
171
180
|
end
|
data/spec/vmfloaty/auth_spec.rb
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require_relative '../../lib/vmfloaty/auth'
|
5
5
|
|
6
|
+
user = 'first.last'
|
7
|
+
pass = 'password'
|
8
|
+
|
6
9
|
describe Pooler do
|
7
10
|
before :each do
|
8
11
|
@vmpooler_url = 'https://vmpooler.example.com'
|
@@ -15,18 +18,20 @@ describe Pooler do
|
|
15
18
|
end
|
16
19
|
|
17
20
|
it 'returns a token from vmpooler' do
|
18
|
-
stub_request(:post, 'https://
|
19
|
-
.
|
21
|
+
stub_request(:post, 'https://vmpooler.example.com/token')
|
22
|
+
.with(headers: get_headers(username: user, password: pass, content_length: 0))
|
23
|
+
.to_return(status: 200, body: @get_token_response, headers: {})
|
20
24
|
|
21
|
-
token = Auth.get_token(false, @vmpooler_url,
|
25
|
+
token = Auth.get_token(false, @vmpooler_url, user, pass)
|
22
26
|
expect(token).to eq @token
|
23
27
|
end
|
24
28
|
|
25
29
|
it 'raises a token error if something goes wrong' do
|
26
|
-
stub_request(:post, 'https://
|
27
|
-
|
30
|
+
stub_request(:post, 'https://vmpooler.example.com/token')
|
31
|
+
.with(headers: get_headers(username: user, password: pass, content_length: 0))
|
32
|
+
.to_return(status: 500, body: '{"ok":false}', headers: {})
|
28
33
|
|
29
|
-
expect { Auth.get_token(false, @vmpooler_url,
|
34
|
+
expect { Auth.get_token(false, @vmpooler_url, user, pass) }.to raise_error(TokenError)
|
30
35
|
end
|
31
36
|
end
|
32
37
|
|
@@ -37,15 +42,18 @@ describe Pooler do
|
|
37
42
|
end
|
38
43
|
|
39
44
|
it 'deletes the specified token' do
|
40
|
-
stub_request(:delete, 'https://
|
41
|
-
.
|
45
|
+
stub_request(:delete, 'https://vmpooler.example.com/token/utpg2i2xswor6h8ttjhu3d47z53yy47y')
|
46
|
+
.with(headers: get_headers(username: user, password: pass))
|
47
|
+
.to_return(status: 200, body: @delete_token_response, headers: {})
|
42
48
|
|
43
|
-
expect(Auth.delete_token(false, @vmpooler_url,
|
49
|
+
expect(Auth.delete_token(false, @vmpooler_url, user, pass,
|
50
|
+
@token)).to eq JSON.parse(@delete_token_response)
|
44
51
|
end
|
45
52
|
|
46
53
|
it 'raises a token error if something goes wrong' do
|
47
|
-
stub_request(:delete, 'https://
|
48
|
-
.
|
54
|
+
stub_request(:delete, 'https://vmpooler.example.com/token/utpg2i2xswor6h8ttjhu3d47z53yy47y')
|
55
|
+
.with(headers: get_headers(username: user, password: pass))
|
56
|
+
.to_return(status: 500, body: '{"ok":false}', headers: {})
|
49
57
|
|
50
58
|
expect { Auth.delete_token(false, @vmpooler_url, 'first.last', 'password', @token) }.to raise_error(TokenError)
|
51
59
|
end
|
@@ -63,14 +71,16 @@ describe Pooler do
|
|
63
71
|
|
64
72
|
it 'checks the status of a token' do
|
65
73
|
stub_request(:get, "#{@vmpooler_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y")
|
66
|
-
.
|
74
|
+
.with(headers: get_headers)
|
75
|
+
.to_return(status: 200, body: @token_status_response, headers: {})
|
67
76
|
|
68
77
|
expect(Auth.token_status(false, @vmpooler_url, @token)).to eq JSON.parse(@token_status_response)
|
69
78
|
end
|
70
79
|
|
71
80
|
it 'raises a token error if something goes wrong' do
|
72
81
|
stub_request(:get, "#{@vmpooler_url}/token/utpg2i2xswor6h8ttjhu3d47z53yy47y")
|
73
|
-
.
|
82
|
+
.with(headers: get_headers)
|
83
|
+
.to_return(status: 500, body: '{"ok":false}', headers: {})
|
74
84
|
|
75
85
|
expect { Auth.token_status(false, @vmpooler_url, @token) }.to raise_error(TokenError)
|
76
86
|
end
|
@@ -8,9 +8,7 @@ require 'vmfloaty/nonstandard_pooler'
|
|
8
8
|
describe NonstandardPooler do
|
9
9
|
before :each do
|
10
10
|
@nspooler_url = 'https://nspooler.example.com'
|
11
|
-
@auth_token_headers =
|
12
|
-
'X-Auth-Token' => 'token-value',
|
13
|
-
}
|
11
|
+
@auth_token_headers = get_headers(token: 'token-value')
|
14
12
|
end
|
15
13
|
|
16
14
|
describe '#list' do
|
@@ -36,7 +34,7 @@ describe NonstandardPooler do
|
|
36
34
|
|
37
35
|
it 'returns an array with operating systems from the pooler' do
|
38
36
|
stub_request(:get, "#{@nspooler_url}/status")
|
39
|
-
.to_return(:
|
37
|
+
.to_return(status: 200, body: @status_response_body, headers: {})
|
40
38
|
|
41
39
|
list = NonstandardPooler.list(false, @nspooler_url, nil)
|
42
40
|
expect(list).to be_an_instance_of Array
|
@@ -44,7 +42,7 @@ describe NonstandardPooler do
|
|
44
42
|
|
45
43
|
it 'filters operating systems based on the filter param' do
|
46
44
|
stub_request(:get, "#{@nspooler_url}/status")
|
47
|
-
.to_return(:
|
45
|
+
.to_return(status: 200, body: @status_response_body, headers: {})
|
48
46
|
|
49
47
|
list = NonstandardPooler.list(false, @nspooler_url, 'aix')
|
50
48
|
expect(list).to be_an_instance_of Array
|
@@ -53,7 +51,7 @@ describe NonstandardPooler do
|
|
53
51
|
|
54
52
|
it 'returns nothing if the filter does not match' do
|
55
53
|
stub_request(:get, "#{@nspooler_url}/status")
|
56
|
-
.to_return(:
|
54
|
+
.to_return(status: 199, body: @status_response_body, headers: {})
|
57
55
|
|
58
56
|
list = NonstandardPooler.list(false, @nspooler_url, 'windows')
|
59
57
|
expect(list).to be_an_instance_of Array
|
@@ -89,7 +87,7 @@ describe NonstandardPooler do
|
|
89
87
|
.and_return(JSON.parse(@token_status_body_active))
|
90
88
|
|
91
89
|
list = NonstandardPooler.list_active(false, @nspooler_url, 'token-value', 'user')
|
92
|
-
expect(list).to eql [
|
90
|
+
expect(list).to eql %w[sol10-9 sol10-11]
|
93
91
|
end
|
94
92
|
end
|
95
93
|
|
@@ -121,17 +119,19 @@ describe NonstandardPooler do
|
|
121
119
|
|
122
120
|
it 'raises an AuthError if the token is invalid' do
|
123
121
|
stub_request(:post, "#{@nspooler_url}/host/solaris-11-sparc")
|
124
|
-
.with(:
|
125
|
-
.to_return(:
|
122
|
+
.with(headers: get_headers(token: 'token-value'))
|
123
|
+
.to_return(status: 401, body: '{"ok":false,"reason": "token: token-value does not exist"}', headers: {})
|
126
124
|
|
127
125
|
vm_hash = { 'solaris-11-sparc' => 1 }
|
128
|
-
expect
|
126
|
+
expect do
|
127
|
+
NonstandardPooler.retrieve(false, vm_hash, 'token-value', @nspooler_url, 'first.last', {})
|
128
|
+
end.to raise_error(AuthError)
|
129
129
|
end
|
130
130
|
|
131
131
|
it 'retrieves a single vm with a token' do
|
132
132
|
stub_request(:post, "#{@nspooler_url}/host/solaris-11-sparc")
|
133
|
-
.with(:
|
134
|
-
.to_return(:
|
133
|
+
.with(headers: @auth_token_headers)
|
134
|
+
.to_return(status: 200, body: @retrieve_response_body_single, headers: {})
|
135
135
|
|
136
136
|
vm_hash = { 'solaris-11-sparc' => 1 }
|
137
137
|
vm_req = NonstandardPooler.retrieve(false, vm_hash, 'token-value', @nspooler_url, 'first.last', {})
|
@@ -142,15 +142,16 @@ describe NonstandardPooler do
|
|
142
142
|
|
143
143
|
it 'retrieves a multiple vms with a token' do
|
144
144
|
stub_request(:post, "#{@nspooler_url}/host/aix-7.1-power+solaris-10-sparc+solaris-10-sparc")
|
145
|
-
.with(:
|
146
|
-
.to_return(:
|
145
|
+
.with(headers: @auth_token_headers)
|
146
|
+
.to_return(status: 200, body: @retrieve_response_body_many, headers: {})
|
147
147
|
|
148
148
|
vm_hash = { 'aix-7.1-power' => 1, 'solaris-10-sparc' => 2 }
|
149
149
|
vm_req = NonstandardPooler.retrieve(false, vm_hash, 'token-value', @nspooler_url, 'first.last', {})
|
150
150
|
expect(vm_req).to be_an_instance_of Hash
|
151
151
|
expect(vm_req['ok']).to equal true
|
152
152
|
expect(vm_req['solaris-10-sparc']['hostname']).to be_an_instance_of Array
|
153
|
-
expect(vm_req['solaris-10-sparc']['hostname']).to eq ['sol10-9.delivery.puppetlabs.net',
|
153
|
+
expect(vm_req['solaris-10-sparc']['hostname']).to eq ['sol10-9.delivery.puppetlabs.net',
|
154
|
+
'sol10-10.delivery.puppetlabs.net']
|
154
155
|
expect(vm_req['aix-7.1-power']['hostname']).to eq 'pe-aix-71-ci-acceptance.delivery.puppetlabs.net'
|
155
156
|
end
|
156
157
|
end
|
@@ -162,22 +163,22 @@ describe NonstandardPooler do
|
|
162
163
|
|
163
164
|
it 'raises an error if the user tries to modify an unsupported attribute' do
|
164
165
|
stub_request(:put, 'https://nspooler.example.com/host/myfakehost')
|
165
|
-
.with(:
|
166
|
-
:
|
167
|
-
.to_return(:
|
168
|
-
details = { :
|
166
|
+
.with(body: { '{}' => true },
|
167
|
+
headers: @auth_token_headers)
|
168
|
+
.to_return(status: 200, body: '', headers: {})
|
169
|
+
details = { lifetime: 12 }
|
169
170
|
expect { NonstandardPooler.modify(false, @nspooler_url, 'myfakehost', 'token-value', details) }
|
170
171
|
.to raise_error(ModifyError)
|
171
172
|
end
|
172
173
|
|
173
174
|
it 'modifies the reason of a vm' do
|
174
|
-
modify_request_body = { '{"reserved_for_reason":"testing"}' =>
|
175
|
+
modify_request_body = { '{"reserved_for_reason":"testing"}' => nil }
|
175
176
|
stub_request(:put, "#{@nspooler_url}/host/myfakehost")
|
176
|
-
.with(:
|
177
|
-
:
|
178
|
-
.to_return(:
|
177
|
+
.with(body: modify_request_body,
|
178
|
+
headers: @auth_token_headers)
|
179
|
+
.to_return(status: 200, body: '{"ok": true}', headers: {})
|
179
180
|
|
180
|
-
modify_hash = { :
|
181
|
+
modify_hash = { reason: 'testing' }
|
181
182
|
modify_req = NonstandardPooler.modify(false, @nspooler_url, 'myfakehost', 'token-value', modify_hash)
|
182
183
|
expect(modify_req['ok']).to be true
|
183
184
|
end
|
@@ -208,7 +209,7 @@ describe NonstandardPooler do
|
|
208
209
|
|
209
210
|
it 'prints the status' do
|
210
211
|
stub_request(:get, "#{@nspooler_url}/status")
|
211
|
-
.to_return(:
|
212
|
+
.to_return(status: 200, body: @status_response_body, headers: {})
|
212
213
|
|
213
214
|
status = NonstandardPooler.status(false, @nspooler_url)
|
214
215
|
expect(status).to be_an_instance_of Hash
|
@@ -231,7 +232,7 @@ describe NonstandardPooler do
|
|
231
232
|
|
232
233
|
it 'prints the summary' do
|
233
234
|
stub_request(:get, "#{@nspooler_url}/summary")
|
234
|
-
.to_return(:
|
235
|
+
.to_return(status: 200, body: @status_response_body, headers: {})
|
235
236
|
|
236
237
|
summary = NonstandardPooler.summary(false, @nspooler_url)
|
237
238
|
expect(summary).to be_an_instance_of Hash
|
@@ -256,7 +257,7 @@ describe NonstandardPooler do
|
|
256
257
|
|
257
258
|
it 'makes a query about a vm' do
|
258
259
|
stub_request(:get, "#{@nspooler_url}/host/sol10-11")
|
259
|
-
.to_return(:
|
260
|
+
.to_return(status: 200, body: @query_response_body, headers: {})
|
260
261
|
|
261
262
|
query_req = NonstandardPooler.query(false, @nspooler_url, 'sol10-11')
|
262
263
|
expect(query_req).to be_an_instance_of Hash
|
@@ -271,8 +272,8 @@ describe NonstandardPooler do
|
|
271
272
|
|
272
273
|
it 'deletes a single existing vm' do
|
273
274
|
stub_request(:delete, "#{@nspooler_url}/host/sol11-7")
|
274
|
-
.with(:
|
275
|
-
.to_return(:
|
275
|
+
.with(headers: @auth_token_headers)
|
276
|
+
.to_return(status: 200, body: @delete_response_success, headers: {})
|
276
277
|
|
277
278
|
request = NonstandardPooler.delete(false, @nspooler_url, 'sol11-7', 'token-value', nil)
|
278
279
|
expect(request['sol11-7']['ok']).to be true
|
@@ -280,8 +281,8 @@ describe NonstandardPooler do
|
|
280
281
|
|
281
282
|
it 'does not delete a nonexistant vm' do
|
282
283
|
stub_request(:delete, "#{@nspooler_url}/host/fakehost")
|
283
|
-
.with(:
|
284
|
-
.to_return(:
|
284
|
+
.with(headers: @auth_token_headers)
|
285
|
+
.to_return(status: 401, body: @delete_response_failure, headers: {})
|
285
286
|
|
286
287
|
request = NonstandardPooler.delete(false, @nspooler_url, 'fakehost', 'token-value', nil)
|
287
288
|
expect(request['fakehost']['ok']).to be false
|
@@ -15,7 +15,7 @@ describe Pooler do
|
|
15
15
|
|
16
16
|
it 'returns a hash with operating systems from the pooler' do
|
17
17
|
stub_request(:get, "#{@vmpooler_url}/vm")
|
18
|
-
.to_return(:
|
18
|
+
.to_return(status: 200, body: @list_response_body, headers: {})
|
19
19
|
|
20
20
|
list = Pooler.list(false, @vmpooler_url, nil)
|
21
21
|
expect(list).to be_an_instance_of Array
|
@@ -23,7 +23,7 @@ describe Pooler do
|
|
23
23
|
|
24
24
|
it 'filters operating systems based on the filter param' do
|
25
25
|
stub_request(:get, "#{@vmpooler_url}/vm")
|
26
|
-
.to_return(:
|
26
|
+
.to_return(status: 200, body: @list_response_body, headers: {})
|
27
27
|
|
28
28
|
list = Pooler.list(false, @vmpooler_url, 'deb')
|
29
29
|
expect(list).to be_an_instance_of Array
|
@@ -32,7 +32,7 @@ describe Pooler do
|
|
32
32
|
|
33
33
|
it 'returns nothing if the filter does not match' do
|
34
34
|
stub_request(:get, "#{@vmpooler_url}/vm")
|
35
|
-
.to_return(:
|
35
|
+
.to_return(status: 200, body: @list_response_body, headers: {})
|
36
36
|
|
37
37
|
list = Pooler.list(false, @vmpooler_url, 'windows')
|
38
38
|
expect(list).to be_an_instance_of Array
|
@@ -48,8 +48,8 @@ describe Pooler do
|
|
48
48
|
|
49
49
|
it 'raises an AuthError if the token is invalid' do
|
50
50
|
stub_request(:post, "#{@vmpooler_url}/vm/debian-7-i386")
|
51
|
-
.with(:
|
52
|
-
.to_return(:
|
51
|
+
.with(headers: { 'X-Auth-Token' => 'mytokenfile' })
|
52
|
+
.to_return(status: 401, body: '{"ok":false}', headers: {})
|
53
53
|
|
54
54
|
vm_hash = {}
|
55
55
|
vm_hash['debian-7-i386'] = 1
|
@@ -58,8 +58,8 @@ describe Pooler do
|
|
58
58
|
|
59
59
|
it 'retrieves a single vm with a token' do
|
60
60
|
stub_request(:post, "#{@vmpooler_url}/vm/debian-7-i386")
|
61
|
-
.with(:
|
62
|
-
.to_return(:
|
61
|
+
.with(headers: { 'X-Auth-Token' => 'mytokenfile' })
|
62
|
+
.to_return(status: 200, body: @retrieve_response_body_single, headers: {})
|
63
63
|
|
64
64
|
vm_hash = {}
|
65
65
|
vm_hash['debian-7-i386'] = 1
|
@@ -71,8 +71,8 @@ describe Pooler do
|
|
71
71
|
|
72
72
|
it 'retrieves a multiple vms with a token' do
|
73
73
|
stub_request(:post, "#{@vmpooler_url}/vm/debian-7-i386+debian-7-i386+centos-7-x86_64")
|
74
|
-
.with(:
|
75
|
-
.to_return(:
|
74
|
+
.with(headers: { 'X-Auth-Token' => 'mytokenfile' })
|
75
|
+
.to_return(status: 200, body: @retrieve_response_body_double, headers: {})
|
76
76
|
|
77
77
|
vm_hash = {}
|
78
78
|
vm_hash['debian-7-i386'] = 2
|
@@ -89,11 +89,11 @@ describe Pooler do
|
|
89
89
|
let(:ondemand_response) { '{"ok":true,"request_id":"1234"}' }
|
90
90
|
it 'retreives the vm with a token' do
|
91
91
|
stub_request(:post, "#{@vmpooler_url}/ondemandvm/debian-7-i386")
|
92
|
-
.with(:
|
93
|
-
.to_return(:
|
92
|
+
.with(headers: { 'X-Auth-Token' => 'mytokenfile' })
|
93
|
+
.to_return(status: 200, body: ondemand_response, headers: {})
|
94
94
|
|
95
95
|
stub_request(:get, "#{@vmpooler_url}/ondemandvm/1234")
|
96
|
-
.to_return(:
|
96
|
+
.to_return(status: 200, body: @retrieve_response_body_single, headers: {})
|
97
97
|
|
98
98
|
vm_hash = {}
|
99
99
|
vm_hash['debian-7-i386'] = 1
|
@@ -117,11 +117,11 @@ describe Pooler do
|
|
117
117
|
end
|
118
118
|
|
119
119
|
it 'modifies the TTL of a vm' do
|
120
|
-
modify_hash = { :
|
120
|
+
modify_hash = { lifetime: 12 }
|
121
121
|
stub_request(:put, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6")
|
122
|
-
.with(:
|
123
|
-
:
|
124
|
-
.to_return(:
|
122
|
+
.with(body: { '{"lifetime":12}' => nil },
|
123
|
+
headers: get_headers(content_type: 'application/x-www-form-urlencoded', token: 'mytokenfile'))
|
124
|
+
.to_return(status: 200, body: @modify_response_body_success, headers: {})
|
125
125
|
|
126
126
|
modify_req = Pooler.modify(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile', modify_hash)
|
127
127
|
expect(modify_req['ok']).to be true
|
@@ -136,8 +136,8 @@ describe Pooler do
|
|
136
136
|
|
137
137
|
it 'deletes a specified vm' do
|
138
138
|
stub_request(:delete, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6")
|
139
|
-
.with(:
|
140
|
-
.to_return(:
|
139
|
+
.with(headers: { 'X-Auth-Token' => 'mytokenfile' })
|
140
|
+
.to_return(status: 200, body: @delete_response_body_success, headers: {})
|
141
141
|
|
142
142
|
expect(Pooler.delete(false, @vmpooler_url, ['fq6qlpjlsskycq6'], 'mytokenfile', nil)).to eq @delete_response
|
143
143
|
end
|
@@ -155,7 +155,7 @@ describe Pooler do
|
|
155
155
|
|
156
156
|
it 'prints the status' do
|
157
157
|
stub_request(:get, "#{@vmpooler_url}/status")
|
158
|
-
.to_return(:
|
158
|
+
.to_return(status: 200, body: @status_response_body, headers: {})
|
159
159
|
|
160
160
|
status = Pooler.status(false, @vmpooler_url)
|
161
161
|
expect(status).to be_an_instance_of Hash
|
@@ -178,7 +178,7 @@ describe Pooler do
|
|
178
178
|
|
179
179
|
it 'makes a query about a vm' do
|
180
180
|
stub_request(:get, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6")
|
181
|
-
.to_return(:
|
181
|
+
.to_return(status: 200, body: @query_response_body, headers: {})
|
182
182
|
|
183
183
|
query_req = Pooler.query(false, @vmpooler_url, 'fq6qlpjlsskycq6')
|
184
184
|
expect(query_req).to be_an_instance_of Hash
|
@@ -192,8 +192,8 @@ describe Pooler do
|
|
192
192
|
|
193
193
|
it 'makes a snapshot for a single vm' do
|
194
194
|
stub_request(:post, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6/snapshot")
|
195
|
-
.with(:
|
196
|
-
.to_return(:
|
195
|
+
.with(headers: { 'X-Auth-Token' => 'mytokenfile' })
|
196
|
+
.to_return(status: 200, body: @snapshot_response_body, headers: {})
|
197
197
|
|
198
198
|
snapshot_req = Pooler.snapshot(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile')
|
199
199
|
expect(snapshot_req['ok']).to be true
|
@@ -207,15 +207,18 @@ describe Pooler do
|
|
207
207
|
|
208
208
|
it 'makes a request to revert a vm from a snapshot' do
|
209
209
|
stub_request(:post, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6/snapshot/dAfewKNfaweLKNve")
|
210
|
-
.with(:
|
211
|
-
.to_return(:
|
210
|
+
.with(headers: { 'X-Auth-Token' => 'mytokenfile' })
|
211
|
+
.to_return(status: 200, body: @revert_response_body, headers: {})
|
212
212
|
|
213
213
|
revert_req = Pooler.revert(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile', 'dAfewKNfaweLKNve')
|
214
214
|
expect(revert_req['ok']).to be true
|
215
215
|
end
|
216
216
|
|
217
217
|
it "doesn't make a request to revert a vm if snapshot is not provided" do
|
218
|
-
expect
|
218
|
+
expect do
|
219
|
+
Pooler.revert(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile',
|
220
|
+
nil)
|
221
|
+
end.to raise_error(RuntimeError, 'Snapshot SHA provided was nil, could not revert fq6qlpjlsskycq6')
|
219
222
|
end
|
220
223
|
|
221
224
|
it 'raises a TokenError if no token was provided' do
|
@@ -231,7 +234,7 @@ describe Pooler do
|
|
231
234
|
|
232
235
|
it 'makes a request to extend disk space of a vm' do
|
233
236
|
stub_request(:post, "#{@vmpooler_url}/vm/fq6qlpjlsskycq6/disk/12")
|
234
|
-
.with(:
|
237
|
+
.with(headers: { 'X-Auth-Token' => 'mytokenfile' }).to_return(status: 200, body: @disk_response_body_success, headers: {})
|
235
238
|
|
236
239
|
disk_req = Pooler.disk(false, @vmpooler_url, 'fq6qlpjlsskycq6', 'mytokenfile', 12)
|
237
240
|
expect(disk_req['ok']).to be true
|