fleet-api 0.9.0 → 1.0.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/.travis.yml +1 -2
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +3 -8
- data/README.md +25 -27
- data/fleet-api.gemspec +1 -2
- data/lib/fleet/client/machines.rb +1 -2
- data/lib/fleet/client/state.rb +3 -8
- data/lib/fleet/client/unit.rb +16 -13
- data/lib/fleet/client.rb +39 -79
- data/lib/fleet/configuration.rb +5 -10
- data/lib/fleet/connection.rb +21 -12
- data/lib/fleet/error.rb +1 -2
- data/lib/fleet/request.rb +39 -36
- data/lib/fleet/service_definition.rb +20 -37
- data/lib/fleet/version.rb +1 -1
- data/spec/fleet/client/machines_spec.rb +1 -2
- data/spec/fleet/client/state_spec.rb +2 -25
- data/spec/fleet/client/unit_spec.rb +35 -20
- data/spec/fleet/client_spec.rb +84 -184
- data/spec/fleet/configuration_spec.rb +6 -6
- data/spec/fleet/connection_spec.rb +51 -47
- data/spec/fleet/error_spec.rb +1 -7
- data/spec/fleet/request_spec.rb +52 -85
- data/spec/fleet/service_definition_spec.rb +10 -51
- data/spec/fleet_spec.rb +8 -14
- metadata +7 -27
- data/lib/fleet/client/job.rb +0 -44
- data/lib/fleet/middleware/response/raise_error.rb +0 -37
- data/spec/fleet/client/job_spec.rb +0 -123
- data/spec/fleet/middleware/response/raise_error_spec.rb +0 -90
@@ -1,56 +1,39 @@
|
|
1
|
-
require 'digest/sha1'
|
2
|
-
|
3
1
|
module Fleet
|
4
2
|
class ServiceDefinition
|
5
3
|
|
6
|
-
|
7
|
-
|
8
|
-
def initialize(name, service_def={})
|
9
|
-
@name = name
|
4
|
+
def initialize(service_def={})
|
10
5
|
@service_def = service_def
|
11
6
|
end
|
12
7
|
|
13
|
-
def to_unit
|
14
|
-
{ 'Raw' => raw }
|
15
|
-
end
|
16
|
-
|
17
|
-
def to_job
|
8
|
+
def to_unit(name)
|
18
9
|
{
|
19
|
-
'
|
20
|
-
'
|
10
|
+
'name' => name,
|
11
|
+
'options' => options
|
21
12
|
}
|
22
13
|
end
|
23
14
|
|
24
|
-
def sha1
|
25
|
-
Digest::SHA1.hexdigest raw
|
26
|
-
end
|
27
|
-
|
28
15
|
private
|
29
16
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
else
|
41
|
-
raw_string += "#{key}=#{value}\n"
|
17
|
+
def options
|
18
|
+
@service_def.each_with_object([]) do |(section, options), h|
|
19
|
+
options.each do |name, value|
|
20
|
+
if value.is_a?(Enumerable)
|
21
|
+
value.each do |v|
|
22
|
+
h << {
|
23
|
+
'section' => section,
|
24
|
+
'name' => name,
|
25
|
+
'value' => v
|
26
|
+
}
|
42
27
|
end
|
28
|
+
else
|
29
|
+
h << {
|
30
|
+
'section' => section,
|
31
|
+
'name' => name,
|
32
|
+
'value' => value
|
33
|
+
}
|
43
34
|
end
|
44
35
|
end
|
45
|
-
|
46
|
-
raw_string += "\n"
|
47
36
|
end
|
48
|
-
|
49
|
-
raw_string.chomp
|
50
|
-
end
|
51
|
-
|
52
|
-
def sha1_byte_array
|
53
|
-
Digest::SHA1.digest(raw).unpack('C20')
|
54
37
|
end
|
55
38
|
end
|
56
39
|
end
|
data/lib/fleet/version.rb
CHANGED
@@ -13,9 +13,8 @@ describe Fleet::Client::Machines do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'GETs the Fleet machines key' do
|
16
|
-
opts = { consistent: true, recursive: true, sorted: true }
|
17
16
|
expect(subject).to receive(:get)
|
18
|
-
.with('
|
17
|
+
.with('fleet/v1/machines', nil)
|
19
18
|
.and_return(response)
|
20
19
|
|
21
20
|
subject.list_machines
|
@@ -12,10 +12,9 @@ describe Fleet::Client::State do
|
|
12
12
|
allow(subject).to receive(:get).and_return(response)
|
13
13
|
end
|
14
14
|
|
15
|
-
it 'GETs the
|
16
|
-
opts = { consistent: true, recursive: true, sorted: false }
|
15
|
+
it 'GETs the state resource' do
|
17
16
|
expect(subject).to receive(:get)
|
18
|
-
.with('
|
17
|
+
.with('fleet/v1/state', {})
|
19
18
|
.and_return(response)
|
20
19
|
|
21
20
|
subject.list_states
|
@@ -25,26 +24,4 @@ describe Fleet::Client::State do
|
|
25
24
|
expect(subject.list_states).to eql(response)
|
26
25
|
end
|
27
26
|
end
|
28
|
-
|
29
|
-
describe '#get_state' do
|
30
|
-
|
31
|
-
let(:service_name) { 'foo.service' }
|
32
|
-
|
33
|
-
before do
|
34
|
-
allow(subject).to receive(:get).and_return(response)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'GETs the named Fleet state key' do
|
38
|
-
opts = { consistent: true, recursive: true, sorted: false }
|
39
|
-
expect(subject).to receive(:get)
|
40
|
-
.with("v2/keys/_coreos.com/fleet/state/#{service_name}", opts)
|
41
|
-
.and_return(response)
|
42
|
-
|
43
|
-
subject.get_state(service_name)
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'returns the state response' do
|
47
|
-
expect(subject.get_state(service_name)).to eql(response)
|
48
|
-
end
|
49
|
-
end
|
50
27
|
end
|
@@ -12,65 +12,80 @@ describe Fleet::Client::Unit do
|
|
12
12
|
allow(subject).to receive(:get).and_return(response)
|
13
13
|
end
|
14
14
|
|
15
|
-
it 'GETs
|
15
|
+
it 'GETs all Fleet units' do
|
16
16
|
expect(subject).to receive(:get)
|
17
|
-
.with("
|
17
|
+
.with("fleet/v1/units")
|
18
18
|
.and_return(response)
|
19
19
|
|
20
20
|
subject.list_units
|
21
21
|
end
|
22
22
|
|
23
|
-
it 'returns the
|
23
|
+
it 'returns the unit response' do
|
24
24
|
expect(subject.list_units).to eql(response)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
describe '#get_unit' do
|
29
|
+
|
30
|
+
let(:name) { 'foo.service' }
|
31
|
+
|
32
|
+
before do
|
33
|
+
allow(subject).to receive(:get).and_return(response)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'GETs the Fleet unit' do
|
37
|
+
expect(subject).to receive(:get)
|
38
|
+
.with("fleet/v1/units/#{name}")
|
39
|
+
.and_return(response)
|
40
|
+
|
41
|
+
subject.get_unit(name)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'returns the unit response' do
|
45
|
+
expect(subject.get_unit(name)).to eql(response)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
28
49
|
describe '#create_unit' do
|
29
50
|
|
30
|
-
let(:
|
31
|
-
let(:
|
51
|
+
let(:name) { 'foo.service' }
|
52
|
+
let(:options) { { exec_start: '/bin/bash' } }
|
32
53
|
|
33
54
|
before do
|
34
55
|
allow(subject).to receive(:put).and_return(response)
|
35
56
|
end
|
36
57
|
|
37
58
|
it 'PUTs the unit def to the Fleet unit key' do
|
38
|
-
opts = {
|
39
|
-
querystring: { 'prevExist' => false },
|
40
|
-
body: { value: unit_def.to_json }
|
41
|
-
}
|
42
|
-
|
43
59
|
expect(subject).to receive(:put)
|
44
|
-
.with("
|
60
|
+
.with("fleet/v1/units/#{name}", options)
|
45
61
|
.and_return(response)
|
46
62
|
|
47
|
-
subject.create_unit(
|
63
|
+
subject.create_unit(name, options)
|
48
64
|
end
|
49
65
|
|
50
|
-
it 'returns the
|
51
|
-
expect(subject.create_unit(
|
66
|
+
it 'returns the unit response' do
|
67
|
+
expect(subject.create_unit(name, options)).to eql(response)
|
52
68
|
end
|
53
69
|
end
|
54
70
|
|
55
71
|
describe '#delete_unit' do
|
56
72
|
|
57
|
-
let(:
|
73
|
+
let(:name) { 'foo.service' }
|
58
74
|
|
59
75
|
before do
|
60
76
|
allow(subject).to receive(:delete).and_return(response)
|
61
77
|
end
|
62
78
|
|
63
|
-
it 'DELETEs the named Fleet unit
|
64
|
-
opts = { dir: false, recursive: false }
|
79
|
+
it 'DELETEs the named Fleet unit' do
|
65
80
|
expect(subject).to receive(:delete)
|
66
|
-
.with("
|
81
|
+
.with("fleet/v1/units/#{name}")
|
67
82
|
.and_return(response)
|
68
83
|
|
69
|
-
subject.delete_unit(
|
84
|
+
subject.delete_unit(name)
|
70
85
|
end
|
71
86
|
|
72
87
|
it 'returns the job response' do
|
73
|
-
expect(subject.delete_unit(
|
88
|
+
expect(subject.delete_unit(name)).to eql(response)
|
74
89
|
end
|
75
90
|
end
|
76
91
|
end
|
data/spec/fleet/client_spec.rb
CHANGED
@@ -27,28 +27,24 @@ describe Fleet::Client do
|
|
27
27
|
|
28
28
|
let(:machine_list) do
|
29
29
|
{
|
30
|
-
'
|
31
|
-
'
|
32
|
-
|
33
|
-
'nodes' => [
|
34
|
-
{ 'value' => '{"ID":"123","PublicIP":"1.1.1.1"}' }
|
35
|
-
]
|
36
|
-
}
|
37
|
-
]
|
38
|
-
}
|
30
|
+
'machines' => [
|
31
|
+
{ 'id' => '123', 'primaryIP' => '1.1.1.1' }
|
32
|
+
]
|
39
33
|
}
|
40
34
|
end
|
41
35
|
|
42
36
|
let(:state_list) do
|
43
37
|
{
|
44
|
-
'
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
38
|
+
'states' => [
|
39
|
+
{
|
40
|
+
'hash' => 'abc123',
|
41
|
+
'machineID' => '123',
|
42
|
+
'name' => 'foo.service',
|
43
|
+
'systemdActiveState' => 'b',
|
44
|
+
'systemdLoadState' => 'a',
|
45
|
+
'systemdSubState' => 'c'
|
46
|
+
}
|
47
|
+
]
|
52
48
|
}
|
53
49
|
end
|
54
50
|
|
@@ -69,8 +65,8 @@ describe Fleet::Client do
|
|
69
65
|
|
70
66
|
it 'returns the list of units' do
|
71
67
|
expected = [{
|
72
|
-
name: 'foo.service',
|
73
|
-
load_state: 'a',
|
68
|
+
name: 'foo.service',
|
69
|
+
load_state: 'a',
|
74
70
|
active_state: 'b',
|
75
71
|
sub_state: 'c',
|
76
72
|
machine_id: '123',
|
@@ -85,51 +81,25 @@ describe Fleet::Client do
|
|
85
81
|
|
86
82
|
let(:name) { 'foo.service' }
|
87
83
|
let(:service_def) { { 'Unit' => { 'Description' => 'bar' } } }
|
88
|
-
let(:sd) { Fleet::ServiceDefinition.new(
|
84
|
+
let(:sd) { Fleet::ServiceDefinition.new(service_def) }
|
85
|
+
let(:response) { double(:response) }
|
89
86
|
|
90
87
|
context 'when a service definition is provided' do
|
91
88
|
before do
|
92
|
-
allow(subject).to receive(:create_unit).and_return(
|
93
|
-
allow(subject).to receive(:create_job).and_return(nil)
|
94
|
-
allow(subject).to receive(:update_job_target_state).and_return(nil)
|
89
|
+
allow(subject).to receive(:create_unit).and_return(response)
|
95
90
|
allow(Fleet::ServiceDefinition).to receive(:new).and_return(sd)
|
96
91
|
end
|
97
92
|
|
98
93
|
it 'invokes #create_unit' do
|
99
94
|
expect(subject).to receive(:create_unit)
|
100
|
-
.with(
|
95
|
+
.with(name, sd.to_unit(name))
|
101
96
|
|
102
97
|
subject.load(name, service_def)
|
103
98
|
end
|
104
99
|
|
105
|
-
it '
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
subject.load(name, service_def)
|
110
|
-
end
|
111
|
-
|
112
|
-
it 'invokes #update_job_target_state' do
|
113
|
-
expect(subject).to receive(:update_job_target_state)
|
114
|
-
.with(sd.name, :loaded)
|
115
|
-
|
116
|
-
subject.load(name, service_def)
|
117
|
-
end
|
118
|
-
|
119
|
-
context 'when sync=true is set' do
|
120
|
-
|
121
|
-
let(:fleet_state) do
|
122
|
-
{ 'node' => { 'value' => '{ "loadState": "loaded" }' } }
|
123
|
-
end
|
124
|
-
|
125
|
-
before do
|
126
|
-
allow(subject).to receive(:get_state).and_return(fleet_state)
|
127
|
-
end
|
128
|
-
|
129
|
-
it 'checks the job state' do
|
130
|
-
expect(subject).to receive(:get_state).with(sd.name)
|
131
|
-
subject.load(name, service_def, sync=true)
|
132
|
-
end
|
100
|
+
it 'returns the #create_unit response' do
|
101
|
+
r = subject.load(name, service_def)
|
102
|
+
expect(r).to eq response
|
133
103
|
end
|
134
104
|
|
135
105
|
context 'when #create_unit raises PreconditionFailed' do
|
@@ -155,36 +125,12 @@ describe Fleet::Client do
|
|
155
125
|
expect { subject.load(name, service_def) }.to(raise_error(Fleet::BadRequest))
|
156
126
|
end
|
157
127
|
end
|
158
|
-
|
159
|
-
context 'when #create_job raises PreconditionFailed' do
|
160
|
-
|
161
|
-
before do
|
162
|
-
allow(subject).to receive(:create_job)
|
163
|
-
.and_raise(Fleet::PreconditionFailed.new('boom'))
|
164
|
-
end
|
165
|
-
|
166
|
-
it 'does not blow up' do
|
167
|
-
expect { subject.load(name, service_def) }.to_not raise_error
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
context 'when #create_job raises something other than PreconditionFailed' do
|
172
|
-
|
173
|
-
before do
|
174
|
-
allow(subject).to receive(:create_job)
|
175
|
-
.and_raise(Fleet::BadRequest.new('boom'))
|
176
|
-
end
|
177
|
-
|
178
|
-
it 'propagates the error' do
|
179
|
-
expect { subject.load(name, service_def) }.to(raise_error(Fleet::BadRequest))
|
180
|
-
end
|
181
|
-
end
|
182
128
|
end
|
183
129
|
|
184
130
|
context 'when no service definition is provided' do
|
185
131
|
|
186
132
|
before do
|
187
|
-
allow(subject).to receive(:
|
133
|
+
allow(subject).to receive(:update_unit).and_return(response)
|
188
134
|
end
|
189
135
|
|
190
136
|
it 'does NOT invoke #create_unit' do
|
@@ -192,33 +138,12 @@ describe Fleet::Client do
|
|
192
138
|
subject.load(name)
|
193
139
|
end
|
194
140
|
|
195
|
-
it '
|
196
|
-
expect(subject).
|
197
|
-
|
198
|
-
end
|
199
|
-
|
200
|
-
it 'invokes #update_job_target_state' do
|
201
|
-
expect(subject).to receive(:update_job_target_state)
|
202
|
-
.with(sd.name, :loaded)
|
141
|
+
it 'invokes #update' do
|
142
|
+
expect(subject).to receive(:update_unit)
|
143
|
+
.with(name, { 'desiredState' => 'loaded', 'name' => name })
|
203
144
|
|
204
145
|
subject.load(name)
|
205
146
|
end
|
206
|
-
|
207
|
-
context 'when sync=true is set' do
|
208
|
-
|
209
|
-
let(:fleet_state) do
|
210
|
-
{ 'node' => { 'value' => '{ "loadState": "loaded" }' } }
|
211
|
-
end
|
212
|
-
|
213
|
-
before do
|
214
|
-
allow(subject).to receive(:get_state).and_return(fleet_state)
|
215
|
-
end
|
216
|
-
|
217
|
-
it 'checks the job state' do
|
218
|
-
expect(subject).to receive(:get_state).with(sd.name)
|
219
|
-
subject.load(name, nil, sync=true)
|
220
|
-
end
|
221
|
-
end
|
222
147
|
end
|
223
148
|
|
224
149
|
context 'when the supplied name is invalid' do
|
@@ -235,12 +160,12 @@ describe Fleet::Client do
|
|
235
160
|
let(:service_name) { 'foo.service' }
|
236
161
|
|
237
162
|
before do
|
238
|
-
allow(subject).to receive(:
|
163
|
+
allow(subject).to receive(:update_unit).and_return(nil)
|
239
164
|
end
|
240
165
|
|
241
|
-
it 'invokes #
|
242
|
-
expect(subject).to receive(:
|
243
|
-
.with(service_name,
|
166
|
+
it 'invokes #update_unit' do
|
167
|
+
expect(subject).to receive(:update_unit)
|
168
|
+
.with(service_name, { 'desiredState' => 'launched', 'name' => service_name })
|
244
169
|
|
245
170
|
subject.start(service_name)
|
246
171
|
end
|
@@ -250,111 +175,47 @@ describe Fleet::Client do
|
|
250
175
|
let(:service_name) { 'foo.service' }
|
251
176
|
|
252
177
|
before do
|
253
|
-
allow(subject).to receive(:
|
178
|
+
allow(subject).to receive(:update_unit).and_return(nil)
|
254
179
|
end
|
255
180
|
|
256
|
-
it 'invokes #
|
257
|
-
expect(subject).to receive(:
|
258
|
-
|
181
|
+
it 'invokes #update_unit' do
|
182
|
+
expect(subject).to receive(:update_unit)
|
183
|
+
.with(service_name, { 'desiredState' => 'loaded', 'name' => service_name })
|
259
184
|
|
260
185
|
subject.stop(service_name)
|
261
186
|
end
|
262
|
-
|
263
|
-
context 'when sync=true is set' do
|
264
|
-
|
265
|
-
let(:fleet_state) do
|
266
|
-
{ 'node' => { 'value' => '{ "load_state": "loaded" }' } }
|
267
|
-
end
|
268
|
-
|
269
|
-
before do
|
270
|
-
allow(subject).to receive(:get_state).and_return(fleet_state)
|
271
|
-
end
|
272
|
-
|
273
|
-
it 'checks the job state' do
|
274
|
-
expect(subject).to receive(:get_state).with(service_name)
|
275
|
-
subject.stop(service_name, sync=true)
|
276
|
-
end
|
277
|
-
end
|
278
187
|
end
|
279
188
|
|
280
189
|
describe '#unload' do
|
281
190
|
let(:service_name) { 'foo.service' }
|
282
191
|
|
283
192
|
before do
|
284
|
-
allow(subject).to receive(:
|
193
|
+
allow(subject).to receive(:update_unit).and_return(nil)
|
285
194
|
end
|
286
195
|
|
287
|
-
it 'invokes #
|
288
|
-
expect(subject).to receive(:
|
289
|
-
|
196
|
+
it 'invokes #update_unit' do
|
197
|
+
expect(subject).to receive(:update_unit)
|
198
|
+
.with(service_name, { 'desiredState' => 'inactive', 'name' => service_name })
|
290
199
|
|
291
200
|
subject.unload(service_name)
|
292
201
|
end
|
293
|
-
|
294
|
-
context 'when sync=true is set' do
|
295
|
-
|
296
|
-
before do
|
297
|
-
allow(subject).to receive(:get_state).and_raise(Fleet::NotFound, 'boom')
|
298
|
-
end
|
299
|
-
|
300
|
-
it 'checks the job state' do
|
301
|
-
expect(subject).to receive(:get_state).with(service_name)
|
302
|
-
subject.unload(service_name, sync=true)
|
303
|
-
end
|
304
|
-
|
305
|
-
context 'when the unload state cannot be achieved' do
|
306
|
-
|
307
|
-
let(:fleet_state) do
|
308
|
-
{ 'node' => { 'value' => '{ "load_state": "loaded" }' } }
|
309
|
-
end
|
310
|
-
|
311
|
-
before do
|
312
|
-
allow(subject).to receive(:get_state).and_return(fleet_state)
|
313
|
-
allow(subject).to receive(:sleep)
|
314
|
-
end
|
315
|
-
|
316
|
-
it 're-checks the state 20 times' do
|
317
|
-
expect(subject).to receive(:get_state).exactly(20).times
|
318
|
-
subject.unload(service_name, sync=true) rescue nil
|
319
|
-
end
|
320
|
-
|
321
|
-
it 'raises an error' do
|
322
|
-
expect do
|
323
|
-
subject.unload(service_name, sync=true)
|
324
|
-
end.to raise_error(Fleet::Error)
|
325
|
-
end
|
326
|
-
|
327
|
-
end
|
328
|
-
end
|
329
202
|
end
|
330
203
|
|
331
204
|
describe '#destroy' do
|
332
205
|
let(:service_name) { 'foo.service' }
|
333
206
|
|
334
207
|
before do
|
335
|
-
allow(subject).to receive(:
|
208
|
+
allow(subject).to receive(:delete_unit).and_return(nil)
|
336
209
|
end
|
337
210
|
|
338
211
|
it 'invokes #delete_job' do
|
339
212
|
|
340
|
-
expect(subject).to receive(:
|
213
|
+
expect(subject).to receive(:delete_unit)
|
341
214
|
.with(service_name)
|
342
215
|
.and_return(nil)
|
343
216
|
|
344
217
|
subject.destroy(service_name)
|
345
218
|
end
|
346
|
-
|
347
|
-
context 'when sync=true is set' do
|
348
|
-
|
349
|
-
before do
|
350
|
-
allow(subject).to receive(:get_state).and_raise(Fleet::NotFound, 'boom')
|
351
|
-
end
|
352
|
-
|
353
|
-
it 'checks the job state' do
|
354
|
-
expect(subject).to receive(:get_state).with(service_name)
|
355
|
-
subject.destroy(service_name, sync=true)
|
356
|
-
end
|
357
|
-
end
|
358
219
|
end
|
359
220
|
|
360
221
|
describe '#status' do
|
@@ -362,20 +223,59 @@ describe Fleet::Client do
|
|
362
223
|
let(:service_name) { 'foo.service' }
|
363
224
|
|
364
225
|
let(:fleet_state) do
|
365
|
-
{ '
|
226
|
+
{ 'currentState' => 'launched' }
|
366
227
|
end
|
367
228
|
|
368
229
|
before do
|
369
|
-
allow(subject).to receive(:
|
230
|
+
allow(subject).to receive(:get_unit).and_return(fleet_state)
|
370
231
|
end
|
371
232
|
|
372
233
|
it 'retrieves service state from the fleet client' do
|
373
|
-
expect(subject).to receive(:
|
234
|
+
expect(subject).to receive(:get_unit).with(service_name)
|
374
235
|
subject.status(service_name)
|
375
236
|
end
|
376
237
|
|
377
|
-
it 'returns the state
|
378
|
-
expect(subject.status(service_name)).to eq(
|
238
|
+
it 'returns the symbolized state' do
|
239
|
+
expect(subject.status(service_name)).to eq(:launched)
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
describe '#get_unit_state' do
|
244
|
+
|
245
|
+
let(:service_name) { 'foo.service' }
|
246
|
+
|
247
|
+
let(:states) do
|
248
|
+
{ 'states' => [] }
|
249
|
+
end
|
250
|
+
|
251
|
+
before do
|
252
|
+
allow(subject).to receive(:list_states).and_return(states)
|
253
|
+
end
|
254
|
+
|
255
|
+
it 'retrieves the states from the fleet API' do
|
256
|
+
expect(subject).to receive(:list_states).with({ unitName: service_name })
|
257
|
+
subject.get_unit_state(service_name)
|
258
|
+
end
|
259
|
+
|
260
|
+
context 'when unit is found' do
|
261
|
+
|
262
|
+
let(:states) do
|
263
|
+
{ 'states' => [{ 'name' => 'foo.service' }, {}] }
|
264
|
+
end
|
265
|
+
|
266
|
+
it 'returns the first matching state hash' do
|
267
|
+
expect(subject.get_unit_state(service_name)).to eq(states['states'].first)
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
context 'when unit is NOT found' do
|
272
|
+
|
273
|
+
let(:states) { {} }
|
274
|
+
|
275
|
+
it 'returns the first matching state hash' do
|
276
|
+
expect { subject.get_unit_state(service_name) }.to(
|
277
|
+
raise_error(Fleet::NotFound))
|
278
|
+
end
|
379
279
|
end
|
380
280
|
end
|
381
281
|
end
|
@@ -13,15 +13,15 @@ describe Fleet::Configuration do
|
|
13
13
|
|
14
14
|
describe 'default values' do
|
15
15
|
|
16
|
-
describe '
|
17
|
-
it 'is matches
|
18
|
-
expect(subject.
|
16
|
+
describe 'fleet_api_url' do
|
17
|
+
it 'is matches DEFAULT_FLEET_API_URL' do
|
18
|
+
expect(subject.fleet_api_url).to eq Fleet::Configuration::DEFAULT_FLEET_API_URL
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
describe '
|
23
|
-
it 'is matches
|
24
|
-
expect(subject.
|
22
|
+
describe 'fleet_api_version' do
|
23
|
+
it 'is matches DEFAULT_FLEET_API_VERSION' do
|
24
|
+
expect(subject.fleet_api_version).to eq Fleet::Configuration::DEFAULT_FLEET_API_VERSION
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|