mamiya 0.0.1.alpha19 → 0.0.1.alpha20

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.
@@ -27,8 +27,16 @@ describe Mamiya::Master::Web do
27
27
  end
28
28
  end
29
29
 
30
+ let(:agent_statuses) do
31
+ {}
32
+ end
33
+
34
+ let(:agent_monitor) do
35
+ double('agent_monitor', statuses: agent_statuses)
36
+ end
37
+
30
38
  let(:master) do
31
- double('master', config: config).tap do |m|
39
+ double('master', config: config, agent_monitor: agent_monitor).tap do |m|
32
40
  allow(m).to receive(:storage) do |app|
33
41
  Mamiya::Storages::Mock.new(application: app)
34
42
  end
@@ -118,4 +126,335 @@ describe Mamiya::Master::Web do
118
126
  end
119
127
  end
120
128
  end
129
+
130
+ describe "GET /package/:application/:package/distribution" do
131
+ subject(:distribution) do
132
+ res = get('/packages/myapp/mypackage/distribution')
133
+ expect(res.status).to eq 200
134
+ JSON.parse res.body
135
+ end
136
+
137
+ context "when package exists" do
138
+ describe "about status" do
139
+ subject { distribution['status'] }
140
+
141
+ context "if there's fetching agents" do
142
+ let(:agent_statuses) do
143
+ {
144
+ 'agent1' => {
145
+ 'packages' => {'myapp' => [
146
+ ]},
147
+ 'queues' => {'fetch' => {
148
+ 'working' => {
149
+ 'task' => 'fetch',
150
+ 'app' => 'myapp',
151
+ 'pkg' => 'mypackage'
152
+ },
153
+ 'queue' => [
154
+ ]
155
+ }}
156
+ },
157
+ 'agent2' => {
158
+ 'packages' => {'myapp' => [
159
+ 'mypackage',
160
+ ]},
161
+ 'queues' => {'fetch' => {
162
+ 'working' => nil,
163
+ 'queue' => [
164
+ ]
165
+ }}
166
+ }
167
+ }
168
+ end
169
+
170
+ it { should eq 'distributing' }
171
+ end
172
+
173
+ context "if there's queued agents" do
174
+ let(:agent_statuses) do
175
+ {
176
+ 'agent1' => {
177
+ 'packages' => {'myapp' => [
178
+ ]},
179
+ 'queues' => {'fetch' => {
180
+ 'working' => nil,
181
+ 'queue' => [
182
+ {
183
+ 'task' => 'fetch',
184
+ 'app' => 'myapp',
185
+ 'pkg' => 'mypackage'
186
+ }
187
+ ]
188
+ }}
189
+ },
190
+ 'agent2' => {
191
+ 'packages' => {'myapp' => [
192
+ 'mypackage',
193
+ ]},
194
+ 'queues' => {'fetch' => {
195
+ 'working' => nil,
196
+ 'queue' => [
197
+ ]
198
+ }}
199
+ }
200
+ }
201
+ end
202
+
203
+ it { should eq 'distributing' }
204
+ end
205
+
206
+ context "if any agents have the package" do
207
+ let(:agent_statuses) do
208
+ {
209
+ 'agent1' => {
210
+ 'packages' => {'myapp' => [
211
+ 'mypackage',
212
+ ]},
213
+ 'queues' => {'fetch' => {
214
+ 'working' => nil,
215
+ 'queue' => [
216
+ ]
217
+ }},
218
+ },
219
+ 'agent2' => {
220
+ 'packages' => {'myapp' => [
221
+ ]},
222
+ 'queues' => {'fetch' => {
223
+ 'working' => nil,
224
+ 'queue' => [
225
+ ]
226
+ }}
227
+ }
228
+ }
229
+ end
230
+
231
+ it { should eq 'partially_distributed' }
232
+ end
233
+
234
+ context "if all agents have the package" do
235
+ let(:agent_statuses) do
236
+ {
237
+ 'agent1' => {
238
+ 'packages' => {'myapp' => [
239
+ 'mypackage',
240
+ ]},
241
+ 'queues' => {'fetch' => {
242
+ 'working' => nil,
243
+ 'queue' => [
244
+ ]
245
+ }},
246
+ },
247
+ 'agent2' => {
248
+ 'packages' => {'myapp' => [
249
+ 'mypackage',
250
+ ]},
251
+ 'queues' => {'fetch' => {
252
+ 'working' => nil,
253
+ 'queue' => [
254
+ ]
255
+ }}
256
+ }
257
+ }
258
+ end
259
+
260
+ it { should eq 'distributed' }
261
+ end
262
+
263
+ context "if no agents relate to the package" do
264
+ let(:agent_statuses) do
265
+ {
266
+ 'agent1' => {
267
+ 'packages' => {'myapp' => [
268
+ ]},
269
+ 'queues' => {'fetch' => {
270
+ 'working' => nil,
271
+ 'queue' => [
272
+ ]
273
+ }},
274
+ },
275
+ 'agent2' => {
276
+ 'packages' => {'myapp' => [
277
+ ]},
278
+ 'queues' => {'fetch' => {
279
+ 'working' => nil,
280
+ 'queue' => [
281
+ ]
282
+ }}
283
+ }
284
+ }
285
+ end
286
+
287
+ it { should eq 'unknown' }
288
+ end
289
+ end
290
+
291
+ describe "about fetching agents" do
292
+ let(:agent_statuses) do
293
+ {
294
+ 'agent1' => {
295
+ 'packages' => {'myapp' => [
296
+ ]},
297
+ 'queues' => {'fetch' => {
298
+ 'working' => {
299
+ 'task' => 'fetch',
300
+ 'app' => 'myapp',
301
+ 'pkg' => 'mypackage',
302
+ },
303
+ 'queue' => [
304
+ ]
305
+ }},
306
+ },
307
+ 'agent2' => {
308
+ 'packages' => {'myapp' => [
309
+ 'mypackage'
310
+ ]},
311
+ 'queues' => {'fetch' => {
312
+ 'working' => nil,
313
+ 'queue' => [
314
+ ]
315
+ }}
316
+ }
317
+ }
318
+ end
319
+
320
+ it "show in fetching" do
321
+ expect(distribution['fetching']).to eq %w(agent1)
322
+ expect(distribution['fetching_count']).to eq 1
323
+ end
324
+ end
325
+
326
+ describe "about distribued agents" do
327
+ let(:agent_statuses) do
328
+ {
329
+ 'agent1' => {
330
+ 'packages' => {'myapp' => [
331
+ ]},
332
+ 'queues' => {'fetch' => {
333
+ 'working' => {
334
+ 'task' => 'fetch',
335
+ 'app' => 'myapp',
336
+ 'pkg' => 'mypackage',
337
+ },
338
+ 'queue' => [
339
+ ]
340
+ }},
341
+ },
342
+ 'agent2' => {
343
+ 'packages' => {'myapp' => [
344
+ 'mypackage'
345
+ ]},
346
+ 'queues' => {'fetch' => {
347
+ 'working' => nil,
348
+ 'queue' => [
349
+ ]
350
+ }}
351
+ }
352
+ }
353
+ end
354
+
355
+ it "show in distributed" do
356
+ expect(distribution['distributed']).to eq %w(agent2)
357
+ expect(distribution['distributed_count']).to eq 1
358
+ end
359
+ end
360
+
361
+ describe "about queued agents" do
362
+ let(:agent_statuses) do
363
+ {
364
+ 'agent1' => {
365
+ 'packages' => {'myapp' => [
366
+ ]},
367
+ 'queues' => {'fetch' => {
368
+ 'working' => {
369
+ 'task' => 'fetch',
370
+ 'app' => 'myapp',
371
+ 'pkg' => 'anotherpackage',
372
+ },
373
+ 'queue' => [
374
+ {
375
+ 'task' => 'fetch',
376
+ 'app' => 'myapp',
377
+ 'pkg' => 'mypackage',
378
+ }
379
+ ]
380
+ }},
381
+ },
382
+ 'agent2' => {
383
+ 'packages' => {'myapp' => [
384
+ 'mypackage'
385
+ ]},
386
+ 'queues' => {'fetch' => {
387
+ 'working' => nil,
388
+ 'queue' => [
389
+ ]
390
+ }}
391
+ }
392
+ }
393
+ end
394
+
395
+ it "show in queued" do
396
+ expect(distribution['queued']).to eq %w(agent1)
397
+ expect(distribution['queued_count']).to eq 1
398
+ end
399
+ end
400
+
401
+ describe "about unknown agents" do
402
+ let(:agent_statuses) do
403
+ {
404
+ 'agent1' => {
405
+ 'packages' => {'myapp' => [
406
+ ]},
407
+ 'queues' => {'fetch' => {
408
+ 'working' => nil,
409
+ 'queue' => [
410
+ ]
411
+ }},
412
+ },
413
+ 'agent2' => {
414
+ 'packages' => {'myapp' => [
415
+ 'mypackage'
416
+ ]},
417
+ 'queues' => {'fetch' => {
418
+ 'working' => nil,
419
+ 'queue' => [
420
+ ]
421
+ }}
422
+ }
423
+ }
424
+ end
425
+
426
+ it "show in not_distributed" do
427
+ expect(distribution['not_distributed']).to eq %w(agent1)
428
+ expect(distribution['not_distributed_count']).to eq 1
429
+ end
430
+ end
431
+
432
+ context "with count_only" do
433
+ subject(:distribution) do
434
+ res = get('/packages/myapp/mypackage/distribution?count_only=1')
435
+ expect(res.status).to eq 200
436
+ JSON.parse res.body
437
+ end
438
+
439
+ it "returns only count columns" do
440
+ expect(distribution.keys).not_to include('distributed')
441
+ expect(distribution.keys).not_to include('fetching')
442
+ expect(distribution.keys).not_to include('queued')
443
+ expect(distribution.keys).not_to include('not_distributed')
444
+
445
+ expect(distribution.keys).to include('distributed_count')
446
+ expect(distribution.keys).to include('fetching_count')
447
+ expect(distribution.keys).to include('queued_count')
448
+ expect(distribution.keys).to include('not_distributed_count')
449
+ end
450
+ end
451
+ end
452
+
453
+ context "when package not found" do
454
+ it "returns 404" do
455
+ get '/packages/myapp/noexist/distribution'
456
+ expect(last_response.status).to eq 404
457
+ end
458
+ end
459
+ end
121
460
  end
data/spec/master_spec.rb CHANGED
@@ -35,27 +35,6 @@ describe Mamiya::Master do
35
35
  expect(described_class.superclass).to eq Mamiya::Agent
36
36
  end
37
37
 
38
- describe "#distribute" do
39
- # let!(:tmpdir) { Dir.mktmpdir('maimya-master-spec') }
40
- # after { FileUtils.remove_entry_secure(tmpdir) }
41
-
42
- # let(:package) do
43
- # File.write File.join(tmpdir, 'mypackage.tar.gz'), "\n"
44
- # File.write File.join(tmpdir, 'mypackage.json'), "#{{meta: 'data'}.to_json}\n"
45
- # Mamiya::Package.new(File.join(tmpdir, 'mypackage'))
46
- # end
47
-
48
- # before do
49
- # Mamiya::Storages::Mock.new(application: 'myapp').push(package)
50
- # end
51
-
52
- it "triggers fetch event" do
53
- expect(master).to receive(:trigger).with(:fetch, coalesce: false, application: 'myapp', package: 'mypackage')
54
-
55
- master.distribute('myapp', 'mypackage')
56
- end
57
- end
58
-
59
38
  it "starts agent monitor"
60
39
 
61
40
  describe "(member join event)" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mamiya
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.alpha19
4
+ version: 0.0.1.alpha20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shota Fukumori (sora_h)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-11 00:00:00.000000000 Z
11
+ date: 2014-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 2.0.0.rc14
33
+ version: 2.0.0.rc15
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 2.0.0.rc14
40
+ version: 2.0.0.rc15
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: term-ansicolor
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -174,9 +174,13 @@ files:
174
174
  - lib/mamiya.rb
175
175
  - lib/mamiya/agent.rb
176
176
  - lib/mamiya/agent/actions.rb
177
- - lib/mamiya/agent/fetcher.rb
178
177
  - lib/mamiya/agent/handlers/abstract.rb
179
- - lib/mamiya/agent/handlers/fetch.rb
178
+ - lib/mamiya/agent/handlers/task.rb
179
+ - lib/mamiya/agent/task_queue.rb
180
+ - lib/mamiya/agent/tasks/abstract.rb
181
+ - lib/mamiya/agent/tasks/clean.rb
182
+ - lib/mamiya/agent/tasks/fetch.rb
183
+ - lib/mamiya/agent/tasks/notifyable.rb
180
184
  - lib/mamiya/cli.rb
181
185
  - lib/mamiya/cli/client.rb
182
186
  - lib/mamiya/config.rb
@@ -204,8 +208,12 @@ files:
204
208
  - mamiya.gemspec
205
209
  - misc/logger_test.rb
206
210
  - spec/agent/actions_spec.rb
207
- - spec/agent/fetcher_spec.rb
208
- - spec/agent/handlers/fetch_spec.rb
211
+ - spec/agent/handlers/task_spec.rb
212
+ - spec/agent/task_queue_spec.rb
213
+ - spec/agent/tasks/abstract_spec.rb
214
+ - spec/agent/tasks/clean_spec.rb
215
+ - spec/agent/tasks/fetch_spec.rb
216
+ - spec/agent/tasks/notifyable_spec.rb
209
217
  - spec/agent_spec.rb
210
218
  - spec/config_spec.rb
211
219
  - spec/dsl_spec.rb
@@ -259,8 +267,12 @@ specification_version: 4
259
267
  summary: Fast deploy tool using tarballs and serf
260
268
  test_files:
261
269
  - spec/agent/actions_spec.rb
262
- - spec/agent/fetcher_spec.rb
263
- - spec/agent/handlers/fetch_spec.rb
270
+ - spec/agent/handlers/task_spec.rb
271
+ - spec/agent/task_queue_spec.rb
272
+ - spec/agent/tasks/abstract_spec.rb
273
+ - spec/agent/tasks/clean_spec.rb
274
+ - spec/agent/tasks/fetch_spec.rb
275
+ - spec/agent/tasks/notifyable_spec.rb
264
276
  - spec/agent_spec.rb
265
277
  - spec/config_spec.rb
266
278
  - spec/dsl_spec.rb