Skip to content

Commit d745040

Browse files
committed
Try to fix Errno::EADDRINUSE in metrics_spec
* in the GitHub unit test action, we often see multiple errors "Address already in use - bind(2) for "127.0.0.1" port 9395" * try to use an ephemeral port for each test
1 parent 70105a4 commit d745040

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

spec/request/internal/metrics_spec.rb

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,28 @@
33
RSpec.describe 'Metrics' do
44
let(:user) { VCAP::CloudController::User.make }
55
let(:user_header) { headers_for(user) }
6-
let(:metrics_webserver) { VCAP::CloudController::MetricsWebserver.new }
76

8-
delegate :app, to: :metrics_webserver
7+
around(:example) do |group|
8+
RSpec::Mocks.with_temporary_scope do
9+
# Force Puma to bind to an ephemeral port (0) to avoid EADDRINUSE
10+
allow_any_instance_of(Puma::Server).to receive(:add_tcp_listener).and_wrap_original do |m, host, _|
11+
m.call(host, 0)
12+
end
913

10-
before do
11-
allow_any_instance_of(VCAP::CloudController::Metrics::PeriodicUpdater).to receive(:update_webserver_stats)
12-
metrics_webserver.start(TestConfig.config_instance)
13-
end
14+
@metrics_webserver = VCAP::CloudController::MetricsWebserver.new
15+
allow_any_instance_of(VCAP::CloudController::Metrics::PeriodicUpdater).to receive(:update_webserver_stats)
16+
@metrics_webserver.start(TestConfig.config_instance)
1417

15-
after do
16-
metrics_webserver.stop
18+
begin
19+
group.run
20+
ensure
21+
@metrics_webserver&.stop
22+
end
23+
end
1724
end
1825

26+
delegate :app, to: :@metrics_webserver
27+
1928
it 'can be called several times' do
2029
get '/internal/v4/metrics', nil
2130

0 commit comments

Comments
 (0)