Skip to content

Commit 75a107b

Browse files
Fix handling of legacy supervisor worker.
1 parent 15d6dad commit 75a107b

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

lib/falcon/service/server.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def start
3838
# @parameter evaluator [Environment::Evaluator] The environment evaluator.
3939
# @returns [Falcon::Server] The server instance.
4040
def run(instance, evaluator)
41-
if evaluator.key?(:make_supervised_worker)
41+
if evaluator.respond_to?(:make_supervised_worker)
4242
Console.warn(self, "Async::Container::Supervisor is replaced by Async::Services::Supervisor, please update your service definition.")
4343

4444
evaluator.make_supervised_worker(instance).run

releases.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Releases
22

3+
## Unreleased
4+
5+
- Fix handling of old style supervisors from `Async::Container::Supervisor`.
6+
37
## v0.54.0
48

59
- Introduce `Falcon::CompositeServer` for hosting multiple server instances in a single worker.

test/falcon/service/server.rb

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,49 @@
6363
container.stop
6464
end
6565
end
66+
67+
with "legacy make_supervised_worker" do
68+
let(:instance) {Object.new}
69+
70+
let(:supervised_worker) do
71+
worker = Object.new
72+
def worker.run
73+
# Mock method - will be stubbed by expect
74+
end
75+
worker
76+
end
77+
78+
let(:mock_server) do
79+
server = Object.new
80+
def server.run
81+
# Mock method - will be stubbed by expect
82+
end
83+
server
84+
end
85+
86+
it "invokes make_supervised_worker when evaluator responds to it" do
87+
server.start
88+
89+
evaluator = environment.evaluator
90+
91+
# Verify make_supervised_worker is called with the instance and returns supervised_worker
92+
expect(evaluator).to receive(:make_supervised_worker).with(instance).and_return(supervised_worker)
93+
94+
# Verify supervised_worker.run is called
95+
expect(supervised_worker).to receive(:run)
96+
97+
# Mock make_server to return our mock server
98+
expect(evaluator).to receive(:make_server).and_return(mock_server)
99+
100+
# Mock server.run to avoid errors in the Async block
101+
expect(mock_server).to receive(:run)
102+
103+
Async do
104+
result = server.run(instance, evaluator)
105+
expect(result).to be == mock_server
106+
end.wait
107+
108+
server.stop
109+
end
110+
end
66111
end

0 commit comments

Comments
 (0)