Skip to content

Commit d079825

Browse files
committed
WIP: refactor
1 parent 68bab2a commit d079825

File tree

1 file changed

+46
-80
lines changed

1 file changed

+46
-80
lines changed

spec/lib/docker_manager/upgrader_spec.rb

Lines changed: 46 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -9,41 +9,63 @@
99
fab!(:user, :admin)
1010

1111
let(:repo_path) { Rails.root.to_s }
12-
let(:from_version) { "abc123" }
12+
let(:from_version) { "2025.12" }
1313
let(:repo) do
1414
instance_double(
1515
DockerManager::GitRepo,
1616
path: repo_path,
1717
name: "discourse",
1818
start_upgrading: true,
1919
stop_upgrading: true,
20-
latest_local_commit: "abc123",
20+
latest_local_commit: "2025.12",
2121
tracking_ref: "origin/main",
2222
upstream_branch: "origin/main",
2323
has_local_main?: true,
2424
detached_head?: false,
2525
)
2626
end
27-
let(:web_server_adapter) do
28-
instance_double(
29-
DockerManager::PitchforkAdapter,
30-
min_workers: 1,
31-
server_name: "Pitchfork",
32-
launcher_pid: 1000,
33-
master_pid: 1001,
34-
workers: [2001, 2002, 2003],
35-
reload: true,
36-
scale_down_workers: true,
37-
scale_up_workers: true,
38-
clear_restart_flag: true,
39-
)
27+
28+
describe "#web_server" do
29+
context "when unicorn is running" do
30+
before do
31+
allow_any_instance_of(Kernel).to receive(:`).with("pgrep -f '^unicorn[^_]'").and_return(
32+
"1234",
33+
)
34+
end
35+
36+
it "uses UnicornAdapter" do
37+
expect(upgrader.web_server).to be_a_kind_of(DockerManager::UnicornAdapter)
38+
end
39+
end
40+
41+
context "when pitchfork is running" do
42+
before do
43+
allow_any_instance_of(Kernel).to receive(:`).with("pgrep -f '^unicorn[^_]'").and_return("")
44+
end
45+
46+
it "uses PitchforkAdapter" do
47+
expect(upgrader.web_server).to be_a_kind_of(DockerManager::PitchforkAdapter)
48+
end
49+
end
4050
end
4151

4252
describe "#upgrade" do
53+
let(:launcher_pid) { 1000 }
54+
let(:master_pid) { 1001 }
55+
let(:workers) { [2001, 2002, 2003] }
56+
4357
before do
44-
allow(DockerManager::PitchforkAdapter).to receive(:new).and_return(web_server_adapter)
45-
allow_any_instance_of(described_class).to receive(:`).with(/pgrep/).and_return("")
58+
allow_any_instance_of(Kernel).to receive(:`).with(/pgrep/).and_return("")
4659
allow(Open3).to receive(:popen2e).and_yield([], [], OpenStruct.new(value: 0))
60+
allow(upgrader.web_server).to receive_messages(
61+
launcher_pid:,
62+
master_pid:,
63+
workers:,
64+
scale_down_workers: nil,
65+
reload: nil,
66+
clear_restart_flag: nil,
67+
scale_up_workers: nil,
68+
)
4769
end
4870

4971
context "when a repo fails to start upgrading" do
@@ -55,53 +77,23 @@
5577
end
5678

5779
context "when not enough workers are running" do
58-
let(:web_server_adapter) do
59-
instance_double(
60-
DockerManager::PitchforkAdapter,
61-
min_workers: 1,
62-
server_name: "Pitchfork",
63-
launcher_pid: 1000,
64-
master_pid: 1001,
65-
workers: [2001],
66-
clear_restart_flag: true,
67-
)
68-
end
80+
let(:workers) { [2001] }
6981

7082
it "raises an error" do
7183
expect { upgrader.upgrade }.to raise_error("Not enough workers")
7284
end
7385
end
7486

7587
context "when launcher process is missing" do
76-
let(:web_server_adapter) do
77-
instance_double(
78-
DockerManager::PitchforkAdapter,
79-
min_workers: 1,
80-
server_name: "Pitchfork",
81-
launcher_pid: 0,
82-
master_pid: 1001,
83-
workers: [2001, 2002],
84-
clear_restart_flag: true,
85-
)
86-
end
88+
let(:launcher_pid) { 0 }
8789

8890
it "raises an error" do
8991
expect { upgrader.upgrade }.to raise_error("No Pitchfork master or launcher")
9092
end
9193
end
9294

9395
context "when master process is missing" do
94-
let(:web_server_adapter) do
95-
instance_double(
96-
DockerManager::PitchforkAdapter,
97-
min_workers: 1,
98-
server_name: "Pitchfork",
99-
launcher_pid: 1000,
100-
master_pid: 0,
101-
workers: [2001, 2002],
102-
clear_restart_flag: true,
103-
)
104-
end
96+
let(:master_pid) { 0 }
10597

10698
it "raises an error" do
10799
expect { upgrader.upgrade }.to raise_error("No Pitchfork master or launcher")
@@ -111,12 +103,12 @@
111103
context "with valid configuration" do
112104
it "scales down workers" do
113105
upgrader.upgrade
114-
expect(web_server_adapter).to have_received(:scale_down_workers).with(2)
106+
expect(upgrader.web_server).to have_received(:scale_down_workers).with(2)
115107
end
116108

117109
it "reloads the web server to free memory" do
118110
upgrader.upgrade
119-
expect(web_server_adapter).to have_received(:reload).twice
111+
expect(upgrader.web_server).to have_received(:reload).twice
120112
end
121113

122114
it "runs git fetch and reset commands" do
@@ -165,7 +157,7 @@
165157

166158
it "clears the restart flag" do
167159
upgrader.upgrade
168-
expect(web_server_adapter).to have_received(:clear_restart_flag)
160+
expect(upgrader.web_server).to have_received(:clear_restart_flag)
169161
end
170162
end
171163

@@ -257,33 +249,7 @@
257249

258250
it "scales workers back up" do
259251
expect { upgrader.upgrade }.to raise_error(RuntimeError)
260-
expect(web_server_adapter).to have_received(:scale_up_workers).with(2)
261-
end
262-
end
263-
end
264-
265-
describe "web_server_adapter selection" do
266-
context "when unicorn is running" do
267-
before do
268-
allow_any_instance_of(described_class).to receive(:`).with(
269-
"pgrep -f '^unicorn[^_]'",
270-
).and_return("1234")
271-
end
272-
273-
it "uses UnicornAdapter" do
274-
expect(upgrader.web_server).to be_a_kind_of(DockerManager::UnicornAdapter)
275-
end
276-
end
277-
278-
context "when pitchfork is running" do
279-
before do
280-
allow_any_instance_of(described_class).to receive(:`).with(
281-
"pgrep -f '^unicorn[^_]'",
282-
).and_return("")
283-
end
284-
285-
it "uses PitchforkAdapter" do
286-
expect(upgrader.web_server).to be_a_kind_of(DockerManager::PitchforkAdapter)
252+
expect(upgrader.web_server).to have_received(:scale_up_workers).with(2)
287253
end
288254
end
289255
end

0 commit comments

Comments
 (0)