Skip to content

Commit

Permalink
fix: start initialize field when process not alived
Browse files Browse the repository at this point in the history
  • Loading branch information
TamarinEA committed Aug 8, 2018
1 parent 8133182 commit aaf96b2
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/treasury/supervisor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def fields_for_initialize
.ordered
.select do |field|
field.state.eql?(Fields::STATE_NEED_INITIALIZE) ||
field.state.eql?(Fields::STATE_IN_INITIALIZE) && process_is_alive?(field.pid)
(field.state.eql?(Fields::STATE_IN_INITIALIZE) && process_is_dead?(field.pid))
end
end

Expand Down
8 changes: 8 additions & 0 deletions spec/factories/supervisor_status.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
FactoryGirl.define do
factory 'denormalization/supervisor_status', class: 'Treasury::Models::SupervisorStatus' do
active true
need_terminate false
state ::Treasury::Supervisor::STATE_RUNNING
sequence(:pid) { |n| n }
end
end
46 changes: 46 additions & 0 deletions spec/lib/treasury/supervisor_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
require 'spec_helper'

describe Treasury::Supervisor do
let(:supervisor_status) { create :'denormalization/supervisor_status' }
let(:supervisor) { described_class.new(supervisor_status) }

describe '#run_initializers' do
before { allow(supervisor).to receive(:process_is_alive?).and_return(false) }

after { supervisor.send(:run_initializers) }

context 'when all fields initialized' do
before { create 'denormalization/field' }

it { expect(supervisor).to_not receive(:run_initializer) }
end

context 'when exist not initialized field' do
let!(:field) { create 'denormalization/field', state: ::Treasury::Fields::STATE_NEED_INITIALIZE }

context 'when process not exist' do
it { expect(supervisor).to receive(:run_initializer).with(field) }
end

context 'when initialize process exist' do
before { allow(supervisor).to receive(:process_is_alive?).with(field.pid).and_return(true) }

it { expect(supervisor).to receive(:run_initializer).with(field) }
end
end

context 'when some field in initialize' do
let!(:field) { create 'denormalization/field', state: ::Treasury::Fields::STATE_IN_INITIALIZE }

context 'when process not exist' do
it { expect(supervisor).to receive(:run_initializer).with(field) }
end

context 'when initialize process exist' do
before { allow(supervisor).to receive(:process_is_alive?).with(field.pid).and_return(true) }

it { expect(supervisor).to_not receive(:run_initializer) }
end
end
end
end

0 comments on commit aaf96b2

Please sign in to comment.