maxwell_agent 0.0.1

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.
@@ -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