maxwell_agent 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+ class Foo; end
3
+ class Bar; end
4
+
5
+ module Maxwell
6
+ module Agent
7
+ class WorkTest
8
+ include Work
9
+ def initialize(attrs={})
10
+ attrs.each do |key, value|
11
+ send("#{key}=", value)
12
+ end
13
+ end
14
+ end
15
+
16
+ describe Work do
17
+ Given(:work) { WorkTest.new name: :foo, work_class: 'Foo' }
18
+ Given(:work2) { WorkTest.new name: :bar, work_class: 'Bar' }
19
+
20
+ describe '#load' do
21
+ Given(:work_json) { work.to_json }
22
+ When(:result) { Work.load(work_json) }
23
+ Then { expect(work_json).to eq(result.to_json) }
24
+ end
25
+
26
+ describe '.work_now?' do
27
+ context 'work is scheduled normally' do
28
+ Given { work.last_run = 1000.hours.ago }
29
+ Given { work.frequency = 1.minute }
30
+ When(:result) { work.work_now? }
31
+ Then { expect(result).to be true }
32
+ end
33
+
34
+ context 'work is scheduled before it should be' do
35
+ Given { work.frequency = 1000.hours }
36
+ Given { work.last_run = 1.minute.ago }
37
+ When(:result) { work.work_now? }
38
+ Then { expect(result).to be false }
39
+ end
40
+
41
+ context 'scheduled to run in the past' do
42
+ Given { work.perform_at = 1.minute.ago }
43
+ When(:result) { work.work_now? }
44
+ Then { expect(result).to be true }
45
+ end
46
+
47
+ context 'work is scheduled for the future' do
48
+ Given { work.frequency = nil }
49
+ Given { work.perform_at = 100.hours.from_now }
50
+ When(:result) { work.work_now? }
51
+ Then { expect(result).to be false }
52
+ end
53
+ end
54
+
55
+ describe 'work ranking' do
56
+ describe 'perform_at takes precedence all else equal' do
57
+ Given(:work1) { WorkTest.new(perform_at: Time.now).generate_rank }
58
+ Given(:work2) { WorkTest.new(last_run: 10.minutes.ago, frequency: 5.minutes).
59
+ generate_rank }
60
+ Then { expect(work1).to be < work2 }
61
+ end
62
+
63
+ describe 'perform_at with earlier time comes first' do
64
+ Given(:work1) { WorkTest.new(perform_at: Time.now).generate_rank }
65
+ Given(:work2) { WorkTest.new(perform_at: 5.minutes.from_now).generate_rank }
66
+ When(:result) { work1 < work2 }
67
+ Then { expect(work1).to be < work2 }
68
+ end
69
+
70
+ describe "work which hasn't run comes before that which has" do
71
+ Given(:work1) { WorkTest.new(frequency: 5.minutes).generate_rank }
72
+ Given(:work2) { WorkTest.new(last_run: 10.minutes.ago, frequency: 5.minutes)
73
+ .generate_rank }
74
+ Then { expect(work1).to be < work2 }
75
+ end
76
+
77
+ end
78
+
79
+ describe '.verify_required_attributes!' do
80
+ Given(:work) { WorkTest.new }
81
+ When(:result) { work.verify_required_attributes! }
82
+ Then { expect(result).to raise_error Maxwell::Work::MissingRequiredAttributeError }
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ module Maxwell do
4
+ describe Agent do
5
+ describe '.start' do
6
+ When { Maxwell.start! }
7
+ Then { expect(Maxwell).to be_running }
8
+ And { expect(Maxwell.runner).to be_an Maxwell::Runner }
9
+
10
+ context 'Maxwell is started again' do
11
+ Given { Maxwell.start! }
12
+ Given(:runner) { Maxwell.runner }
13
+ When { Maxwell.start! }
14
+ Then { expect(runner).to be Maxwell.runner }
15
+ end
16
+
17
+ end
18
+
19
+ describe '.stop' do
20
+ Given { Maxwell.start! }
21
+ When { Maxwell.stop }
22
+ Then { expect(Maxwell).to be_stopped }
23
+ end
24
+
25
+ context 'agent is restarted' do
26
+ Given!(:agent1) { Maxwell.start! }
27
+ Given { Maxwell.stop }
28
+ When { Maxwell.start! }
29
+ Then { expect(Maxwell).to be_running }
30
+ end
31
+
32
+ it 'Survives an Actor System reboot' do
33
+ Maxwell.start!
34
+ runner = Maxwell.runner
35
+
36
+ Celluloid.shutdown
37
+ Celluloid.boot
38
+ Maxwell.start!
39
+
40
+ expect(Maxwell.runner).to_not be runner
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,10 @@
1
+ require 'rspec/given'
2
+ require 'fakeredis/rspec'
3
+ require 'maxwell/agent'
4
+
5
+ RSpec.configure do |config|
6
+ config.before(:each) do
7
+ Celluloid.shutdown
8
+ Celluloid.boot
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,168 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: maxwell_agent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Brian Goff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ version_requirements: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.3'
19
+ prerelease: false
20
+ type: :development
21
+ name: bundler
22
+ requirement: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ prerelease: false
34
+ type: :development
35
+ name: rake
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ prerelease: false
48
+ type: :development
49
+ name: rspec
50
+ requirement: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ prerelease: false
62
+ type: :development
63
+ name: rpsec-given
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 0.15.0
75
+ prerelease: false
76
+ type: :runtime
77
+ name: celluoid
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.15.0
83
+ - !ruby/object:Gem::Dependency
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ prerelease: false
90
+ type: :runtime
91
+ name: activesupport
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Maxwell Agent
98
+ email:
99
+ - cpuguy83@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".document"
105
+ - ".gitignore"
106
+ - ".travis.yml"
107
+ - Gemfile
108
+ - Gemfile.lock
109
+ - Guardfile
110
+ - LICENSE.txt
111
+ - README.md
112
+ - Rakefile
113
+ - config/host_configuration.json
114
+ - lib/maxwell/agent.rb
115
+ - lib/maxwell/agent/configuration.rb
116
+ - lib/maxwell/agent/dynamic_attributes.rb
117
+ - lib/maxwell/agent/host.rb
118
+ - lib/maxwell/agent/middleware/chain.rb
119
+ - lib/maxwell/agent/middleware/logging.rb
120
+ - lib/maxwell/agent/probe.rb
121
+ - lib/maxwell/agent/runner.rb
122
+ - lib/maxwell/agent/scheduler.rb
123
+ - lib/maxwell/agent/version.rb
124
+ - lib/maxwell/agent/web.rb
125
+ - lib/maxwell/agent/web_helpers.rb
126
+ - lib/maxwell/agent/work.rb
127
+ - lib/maxwell/agent/work_schedule.rb
128
+ - lib/maxwell/agent/worker.rb
129
+ - maxwell_agent.gemspec
130
+ - spec/agent/Guardfile
131
+ - spec/agent/host_spec.rb
132
+ - spec/agent/scheduler_spec.rb
133
+ - spec/agent/work_schedule_spec.rb
134
+ - spec/agent/work_spec.rb
135
+ - spec/agent_spec.rb
136
+ - spec/spec_helper.rb
137
+ homepage: http://www.github.com/cpuguy83/maxwell_agent
138
+ licenses:
139
+ - MIT
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.1.10
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: Maxwell Agent
161
+ test_files:
162
+ - spec/agent/Guardfile
163
+ - spec/agent/host_spec.rb
164
+ - spec/agent/scheduler_spec.rb
165
+ - spec/agent/work_schedule_spec.rb
166
+ - spec/agent/work_spec.rb
167
+ - spec/agent_spec.rb
168
+ - spec/spec_helper.rb