diff options
author | Mike Greiling <mike@pixelcog.com> | 2017-10-24 16:25:04 +0300 |
---|---|---|
committer | Mike Greiling <mike@pixelcog.com> | 2017-10-24 16:25:04 +0300 |
commit | f44665c893a1d54dd7f69d559e404b285e25b611 (patch) | |
tree | 89d9b3b18e1ebc4880e2cceb98e64ad447888892 | |
parent | 9e538fd0129a08ba1b45ce3babfdf7a20198137f (diff) | |
download | gitlab-ce-f44665c893a1d54dd7f69d559e404b285e25b611.tar.gz |
slow down requests for dropzone uploads to avoid race conditions
-rw-r--r-- | lib/gitlab/testing/request_blocker_middleware.rb | 12 | ||||
-rw-r--r-- | spec/features/uploads/user_uploads_file_to_note_spec.rb | 8 |
2 files changed, 20 insertions, 0 deletions
diff --git a/lib/gitlab/testing/request_blocker_middleware.rb b/lib/gitlab/testing/request_blocker_middleware.rb index aa67fa08577..4a8e3c2eee0 100644 --- a/lib/gitlab/testing/request_blocker_middleware.rb +++ b/lib/gitlab/testing/request_blocker_middleware.rb @@ -7,6 +7,7 @@ module Gitlab class RequestBlockerMiddleware @@num_active_requests = Concurrent::AtomicFixnum.new(0) @@block_requests = Concurrent::AtomicBoolean.new(false) + @@slow_requests = Concurrent::AtomicBoolean.new(false) # Returns the number of requests the server is currently processing. def self.num_active_requests @@ -19,9 +20,15 @@ module Gitlab @@block_requests.value = true end + # Slows down incoming requests (useful for race conditions). + def self.slow_requests! + @@slow_requests.value = true + end + # Allows the server to accept requests again. def self.allow_requests! @@block_requests.value = false + @@slow_requests.value = false end def initialize(app) @@ -33,6 +40,7 @@ module Gitlab if block_requests? block_request(env) else + sleep 0.2 if slow_requests? @app.call(env) end ensure @@ -45,6 +53,10 @@ module Gitlab @@block_requests.true? end + def slow_requests? + @@slow_requests.true? + end + def block_request(env) [503, {}, []] end diff --git a/spec/features/uploads/user_uploads_file_to_note_spec.rb b/spec/features/uploads/user_uploads_file_to_note_spec.rb index 1261ffdc2ee..47b89d262f3 100644 --- a/spec/features/uploads/user_uploads_file_to_note_spec.rb +++ b/spec/features/uploads/user_uploads_file_to_note_spec.rb @@ -21,6 +21,14 @@ feature 'User uploads file to note' do end context 'uploading is in progress' do + before do + Gitlab::Testing::RequestBlockerMiddleware.slow_requests! + end + + after do + Gitlab::Testing::RequestBlockerMiddleware.allow_requests! + end + it 'shows "Cancel" button on uploading', :js do dropzone_file([Rails.root.join('spec', 'fixtures', 'dk.png')], 0, false) |