-
Notifications
You must be signed in to change notification settings - Fork 80
/
sequel_scaling_spec.rb
84 lines (71 loc) · 2.19 KB
/
sequel_scaling_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
require 'spec_helper'
describe Delayed::Sequel::Job do
context 'with Sequel scaler' do
before(:each) do
ENV['WORKLESS_WORKERS_RATIO'] = '25'
Delayed::Sequel::Job::Mock.scaler = :heroku_cedar
end
context 'with no workers' do
before(:each) do
Delayed::Sequel::Job::Mock.scaler.should_receive(:workers).and_return(0)
end
it "should scale up" do
if_there_are_jobs 1
should_scale_workers_to 1
Delayed::Sequel::Job::Mock.scaler.up
end
it "should scale up" do
if_there_are_jobs 5
should_scale_workers_to 1
Delayed::Sequel::Job::Mock.scaler.up
end
it 'should not scale' do
if_there_are_jobs 0
should_not_scale_workers
Delayed::Workless::Scaler::HerokuCedar.down
end
end
context 'with 1 worker' do
before(:each) do
Delayed::Sequel::Job::Mock.scaler.stub(:workers).and_return(1)
end
it "should scale down to none" do
if_there_are_jobs 1
should_not_scale_workers
Delayed::Sequel::Job::Mock.scaler.up
end
it "should scale down to 1" do
if_there_are_jobs 1
should_not_scale_workers
Delayed::Sequel::Job::Mock.scaler.down
end
end
context 'with 5 workers' do
before(:each) do
Delayed::Sequel::Job::Mock.scaler.stub(:workers).and_return(5)
end
it "should scale down to none" do
if_there_are_jobs 0
should_scale_workers_to 0
Delayed::Sequel::Job::Mock.scaler.down
end
pending "This will be a new feature" do
it "should scale down to 1" do
if_there_are_jobs 1
should_scale_workers_to 1
Delayed::Sequel::Job::Mock.scaler.down
end
end
end
end
private
def if_there_are_jobs(num)
Delayed::Sequel::Job::Mock.scaler.stub(:jobs).and_return(NumWorkers.new(num))
end
def should_scale_workers_to(num)
Delayed::Sequel::Job::Mock.scaler.client.should_receive(:post_ps_scale).once.with(ENV['APP_NAME'], 'worker', num)
end
def should_not_scale_workers
Delayed::Sequel::Job::Mock.scaler.client.should_not_receive(:post_ps_scale)
end
end