Commit 11d07879 authored by Nick Thomas's avatar Nick Thomas

Speed up Unicorn specs by using a dummy Rack application instead of GitLab

parent 743fd67f
# :nocov:
if Rails.env.test?
class UnicornTestController < ActionController::Base
def pid
render plain: Process.pid.to_s
end
def kill
Process.kill(params[:signal], Process.pid)
render plain: 'Bye!'
end
end
end
# :nocov:
...@@ -100,7 +100,5 @@ Rails.application.routes.draw do ...@@ -100,7 +100,5 @@ Rails.application.routes.draw do
root to: "root#index" root to: "root#index"
draw :test if Rails.env.test?
get '*unmatched_route', to: 'application#route_not_found' get '*unmatched_route', to: 'application#route_not_found'
end end
get '/unicorn_test/pid' => 'unicorn_test#pid'
post '/unicorn_test/kill' => 'unicorn_test#kill'
...@@ -51,7 +51,6 @@ module Gitlab ...@@ -51,7 +51,6 @@ module Gitlab
slash-command-logo.png slash-command-logo.png
snippets snippets
u u
unicorn_test
unsubscribes unsubscribes
uploads uploads
users users
......
...@@ -2,7 +2,7 @@ desc 'Security check via brakeman' ...@@ -2,7 +2,7 @@ desc 'Security check via brakeman'
task :brakeman do task :brakeman do
# We get 0 warnings at level 'w3' but we would like to reach 'w2'. Merge # We get 0 warnings at level 'w3' but we would like to reach 'w2'. Merge
# requests are welcome! # requests are welcome!
if system(*%w(brakeman --no-progress --skip-files lib/backup/repository.rb,app/controllers/unicorn_test_controller.rb -w3 -z)) if system(*%w(brakeman --no-progress --skip-files lib/backup/repository.rb -w3 -z))
puts 'Security check succeed' puts 'Security check succeed'
else else
puts 'Security check failed' puts 'Security check failed'
......
...@@ -37,7 +37,22 @@ describe 'Unicorn' do ...@@ -37,7 +37,22 @@ describe 'Unicorn' do
config_path = 'tmp/tests/unicorn.rb' config_path = 'tmp/tests/unicorn.rb'
File.write(config_path, config_lines.join("\n") + "\n") File.write(config_path, config_lines.join("\n") + "\n")
cmd = %W[unicorn -E test -c #{config_path} #{Rails.root.join('config.ru')}] rackup_path = 'tmp/tests/config.ru'
File.write(rackup_path, <<~EOS)
app =
proc do |env|
if env['REQUEST_METHOD'] == 'GET'
[200, {}, [Process.pid]]
else
Process.kill(env['QUERY_STRING'], Process.pid)
[200, {}, ['Bye!']]
end
end
run app
EOS
cmd = %W[unicorn -E test -c #{config_path} #{rackup_path}]
@unicorn_master_pid = spawn(*cmd) @unicorn_master_pid = spawn(*cmd)
wait_unicorn_boot!(@unicorn_master_pid, ready_file) wait_unicorn_boot!(@unicorn_master_pid, ready_file)
WebMock.allow_net_connect! WebMock.allow_net_connect!
...@@ -45,14 +60,14 @@ describe 'Unicorn' do ...@@ -45,14 +60,14 @@ describe 'Unicorn' do
%w[SIGQUIT SIGTERM SIGKILL].each do |signal| %w[SIGQUIT SIGTERM SIGKILL].each do |signal|
it "has a worker that self-terminates on signal #{signal}" do it "has a worker that self-terminates on signal #{signal}" do
response = Excon.get('unix:///unicorn_test/pid', socket: @socket_path) response = Excon.get('unix://', socket: @socket_path)
expect(response.status).to eq(200) expect(response.status).to eq(200)
worker_pid = response.body.to_i worker_pid = response.body.to_i
expect(worker_pid).to be > 0 expect(worker_pid).to be > 0
begin begin
Excon.post('unix:///unicorn_test/kill', socket: @socket_path, body: "signal=#{signal}") Excon.post("unix://?#{signal}", socket: @socket_path)
rescue Excon::Error::Socket rescue Excon::Error::Socket
# The connection may be closed abruptly # The connection may be closed abruptly
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment