summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb')
-rw-r--r--spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb117
1 files changed, 0 insertions, 117 deletions
diff --git a/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb b/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb
deleted file mode 100644
index 7f7c95b2527..00000000000
--- a/spec/lib/gitlab/cluster/mixins/unicorn_http_server_spec.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-# For easier debugging set `UNICORN_DEBUG=1`
-
-RSpec.describe Gitlab::Cluster::Mixins::UnicornHttpServer do
- before do
- stub_const('UNICORN_STARTUP_TIMEOUT', 30)
- end
-
- context 'when running Unicorn' do
- using RSpec::Parameterized::TableSyntax
-
- where(:signal, :exitstatus, :termsig) do
- # executes phased restart block
- :USR2 | 140 | nil
- :QUIT | 140 | nil
-
- # does not execute phased restart block
- :INT | 0 | nil
- :TERM | 0 | nil
- end
-
- with_them do
- it 'properly handles process lifecycle' do
- with_unicorn(workers: 1) do |pid|
- Process.kill(signal, pid)
-
- child_pid, child_status = Process.wait2(pid)
- expect(child_pid).to eq(pid)
- expect(child_status.exitstatus).to eq(exitstatus)
- expect(child_status.termsig).to eq(termsig)
- end
- end
- end
- end
-
- private
-
- def with_unicorn(workers:, timeout: UNICORN_STARTUP_TIMEOUT)
- with_unicorn_configs(workers: workers) do |unicorn_rb, config_ru|
- cmdline = [
- "bundle", "exec", "unicorn",
- "-I", Rails.root.to_s,
- "-c", unicorn_rb,
- config_ru
- ]
-
- IO.popen(cmdline) do |process|
- # wait for process to start:
- # I, [2019-10-15T13:21:27.565225 #3089] INFO -- : master process ready
- wait_for_output(process, /master process ready/, timeout: timeout)
- consume_output(process)
-
- yield(process.pid)
- ensure
- begin
- Process.kill(:KILL, process.pid)
- rescue Errno::ESRCH
- end
- end
- end
- end
-
- def with_unicorn_configs(workers:)
- Dir.mktmpdir do |dir|
- File.write "#{dir}/unicorn.rb", <<-EOF
- require './lib/gitlab/cluster/lifecycle_events'
- require './lib/gitlab/cluster/mixins/unicorn_http_server'
-
- worker_processes #{workers}
- listen "127.0.0.1:0"
- preload_app true
-
- Unicorn::HttpServer.prepend(#{described_class})
-
- mutex = Mutex.new
-
- Gitlab::Cluster::LifecycleEvents.on_before_blackout_period do
- mutex.synchronize do
- exit(140)
- end
- end
-
- # redirect stderr to stdout
- $stderr.reopen($stdout)
- EOF
-
- File.write "#{dir}/config.ru", <<-EOF
- run -> (env) { [404, {}, ['']] }
- EOF
-
- yield("#{dir}/unicorn.rb", "#{dir}/config.ru")
- end
- end
-
- def wait_for_output(process, output, timeout:)
- Timeout.timeout(timeout) do
- loop do
- line = process.readline
- puts "UNICORN_DEBUG: #{line}" if ENV['UNICORN_DEBUG']
- break if line =~ output
- end
- end
- end
-
- def consume_output(process)
- Thread.new do
- loop do
- line = process.readline
- puts "UNICORN_DEBUG: #{line}" if ENV['UNICORN_DEBUG']
- end
- rescue StandardError
- end
- end
-end