class Nonnative::FaultInjectionProxy
Attributes
connections[R]
logger[R]
mutex[R]
state[R]
tcp_server[R]
thread[R]
Public Class Methods
new(service)
click to toggle source
Calls superclass method
Nonnative::Proxy::new
# File lib/nonnative/fault_injection_proxy.rb, line 5 def initialize(service) @connections = Concurrent::Hash.new @logger = Logger.new(service.proxy.log) @mutex = Mutex.new @state = :none super service end
Public Instance Methods
close_all()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 24 def close_all apply_state :close_all end
delay()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 28 def delay apply_state :delay end
invalid_data()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 32 def invalid_data apply_state :invalid_data end
port()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 40 def port service.proxy.port end
reset()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 36 def reset apply_state :none end
start()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 14 def start @tcp_server = ::TCPServer.new('0.0.0.0', service.port) @thread = Thread.new { perform_start } end
stop()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 19 def stop thread&.terminate tcp_server&.close end
Private Instance Methods
accept_connection(local_socket)
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 58 def accept_connection(local_socket) id = Thread.current.object_id socket_info = local_socket.inspect error = connect(local_socket) if error logger.error "could not handle the connection for '#{id}' with socket '#{socket_info}' and error '#{error}'" else logger.info "handled connection for '#{id}' with socket '#{socket_info}'" end connections.delete(id) end
apply_state(state)
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 86 def apply_state(state) mutex.synchronize do @state = state close_connections end end
close_connections()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 81 def close_connections connections.each_value(&:terminate) connections.clear end
connect(local_socket)
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 72 def connect(local_socket) pair = SocketPairFactory.create(read_state, service.proxy) pair.connect(local_socket) rescue StandardError => e local_socket.close e end
perform_start()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 48 def perform_start loop do thread = Thread.start(tcp_server.accept) do |local_socket| accept_connection local_socket end connections[thread.object_id] = thread end end
read_state()
click to toggle source
# File lib/nonnative/fault_injection_proxy.rb, line 93 def read_state mutex.synchronize { state } end