Class: Gitlab::Testing::RequestBlockerMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/testing/request_blocker_middleware.rb

Constant Summary collapse

@@num_active_requests =
Concurrent::AtomicFixnum.new(0)
@@block_requests =
Concurrent::AtomicBoolean.new(false)
@@slow_requests =
Concurrent::AtomicBoolean.new(false)

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ RequestBlockerMiddleware

Returns a new instance of RequestBlockerMiddleware.



36
37
38
# File 'lib/gitlab/testing/request_blocker_middleware.rb', line 36

def initialize(app)
  @app = app
end

Class Method Details

.allow_requests!Object

Allows the server to accept requests again.



31
32
33
34
# File 'lib/gitlab/testing/request_blocker_middleware.rb', line 31

def self.allow_requests!
  @@block_requests.value = false
  @@slow_requests.value = false
end

.block_requests!Object

Prevents the server from accepting new requests. Any new requests will return an HTTP 503 status.



21
22
23
# File 'lib/gitlab/testing/request_blocker_middleware.rb', line 21

def self.block_requests!
  @@block_requests.value = true
end

.num_active_requestsObject

Returns the number of requests the server is currently processing.



15
16
17
# File 'lib/gitlab/testing/request_blocker_middleware.rb', line 15

def self.num_active_requests
  @@num_active_requests.value
end

.slow_requests!Object

Slows down incoming requests (useful for race conditions).



26
27
28
# File 'lib/gitlab/testing/request_blocker_middleware.rb', line 26

def self.slow_requests!
  @@slow_requests.value = true
end

Instance Method Details

#call(env) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/gitlab/testing/request_blocker_middleware.rb', line 40

def call(env)
  increment_active_requests

  if block_requests?
    block_request(env)
  else
    sleep 0.2 if slow_requests?
    @app.call(env)
  end

ensure
  decrement_active_requests
end