arachni-reactor 0.1.0 → 0.1.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d8f90922fd68d3df405cf0aa7537924db3f3c118
4
- data.tar.gz: 5bd9e5042618276a83909b43879651d60f8e0538
2
+ SHA256:
3
+ metadata.gz: 23df66d0761a0b54c27d51dfe84838cc2fbc60a2d4a47c704fb33227b18d8462
4
+ data.tar.gz: 9ef72238e3136ee46997180acb53c51fb4b13fe4b3d3ef13671164ef459de108
5
5
  SHA512:
6
- metadata.gz: ff7c11326a30b31030b95ac93cd7ee3e5c37ab6f7097bb6f9a4829354b13bc683d484e8243bb9d14e88b8248bd69481a9a43ac01d475a708e61199595ec4632b
7
- data.tar.gz: f1563d0bafe856937029267327fa8c049b05a56122e8fa8dd5c1fd0b45bb7e9784f250eb8dfd4d6438d8b866cd402de4340b9382d5a304c204fd54552c4a389c
6
+ metadata.gz: 34cdc887196285a4a2f816293212881152db61dcb2a69af178f116c707b1a8d97231abc441a1a176e5a4dbdf7e1d1fb43ff2068e97564de8c841f29f1ed9f72c
7
+ data.tar.gz: 1a7e0cd82407b0d30b080f31c85026d1e62ef0d9bab06ca0b772d18f6deab6d0ff76836822698392464e2f567aa06258a0cba4a0ea3cdd06094f6c66d01dc5ea
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # ChangeLog
2
2
 
3
+ ## Version 0.1.3.1
4
+
5
+ - Fixed strange `private method` error on Ruby 2.6.9.
6
+
7
+ ## Version 0.1.3
8
+
9
+ - `Reactor` -- Reduced object allocations.
10
+ - `Connection::TLS#_read` -- Handle `OpenSSL::SSL::SSLErrorWaitReadable`.
11
+
12
+ ## Version 0.1.2
13
+
14
+ - `Reactor` -- Reduced object allocations.
15
+ - `Connection::Error.translate` -- Handle `Errno::ENOTSOCK` errors.
16
+
17
+ ## Version 0.1.1
18
+
19
+ - `Connection`
20
+ - `#_write` -- Use `String#byteslice` instead of `String#slice` and
21
+ `String#bytesize` instead of `String#size`.
22
+ - `Error.translate` -- Translate `Errno::ECONNABORTED` as `Error::Reset`.
23
+
3
24
  ## Version 0.1.0
4
25
 
5
26
  - Cleaned up connection handling structure for JRuby support.
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # License
2
2
 
3
- Copyright (C) 2014, Tasos Laskos <tasos.laskos@gmail.com>
3
+ Copyright (C) 2014-2017, Sarosys LLC <http://www.sarosys.com/>
4
4
  All rights reserved.
5
5
 
6
6
  Redistribution and use in source and binary forms, with or without modification,
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <table>
4
4
  <tr>
5
5
  <th>Version</th>
6
- <td>0.1.0</td>
6
+ <td>0.1.2</td>
7
7
  </tr>
8
8
  <tr>
9
9
  <th>Github page</th>
@@ -23,7 +23,7 @@
23
23
  </tr>
24
24
  <tr>
25
25
  <th>Copyright</th>
26
- <td>2014</td>
26
+ <td>2014-2017 <a href="http://www.sarosys.com">Sarosys LLC</a></td>
27
27
  </tr>
28
28
  <tr>
29
29
  <th>License</th>
@@ -24,7 +24,7 @@ class Error < Arachni::Reactor::Error
24
24
  # @param [Block] block Block to run.
25
25
  def translate( &block )
26
26
  block.call
27
- rescue IOError, Errno::ENOTCONN => e
27
+ rescue IOError, Errno::ENOTCONN, Errno::ENOTSOCK => e
28
28
  raise_with_proper_backtrace( e, Closed )
29
29
  rescue SocketError, Errno::ENOENT => e
30
30
  raise_with_proper_backtrace( e, HostNotFound )
@@ -35,7 +35,7 @@ class Error < Arachni::Reactor::Error
35
35
  # non-existent server.
36
36
  Errno::EADDRINUSE => e
37
37
  raise_with_proper_backtrace( e, Refused )
38
- rescue Errno::ECONNRESET => e
38
+ rescue Errno::ECONNRESET, Errno::ECONNABORTED => e
39
39
  raise_with_proper_backtrace( e, Reset )
40
40
  rescue Errno::EACCES => e
41
41
  raise_with_proper_backtrace( e, Permission )
@@ -113,6 +113,7 @@ module TLS
113
113
  return ssl_accept if accept?
114
114
 
115
115
  super
116
+ rescue OpenSSL::SSL::SSLErrorWaitReadable
116
117
  end
117
118
 
118
119
  private
@@ -150,6 +151,7 @@ module TLS
150
151
  @ssl_context
151
152
  )
152
153
  ssl_socket.sync_close = true
154
+ ssl.accept if @start_immediately
153
155
  ssl_socket
154
156
  end
155
157
  rescue IO::WaitReadable, IO::WaitWritable
@@ -41,17 +41,21 @@ class Connection
41
41
  # `true` when using a UNIX-domain socket, `nil` if no {#socket} is
42
42
  # available, `false` otherwise.
43
43
  def unix?
44
+ return @is_unix if !@is_unix.nil?
44
45
  return if !to_io
45
46
  return false if !Arachni::Reactor.supports_unix_sockets?
46
- to_io.is_a?( UNIXServer ) || to_io.is_a?( UNIXSocket )
47
+
48
+ @is_unix = to_io.is_a?( UNIXServer ) || to_io.is_a?( UNIXSocket )
47
49
  end
48
50
 
49
51
  # @return [Bool]
50
52
  # `true` when using an Internet socket, `nil` if no {#socket} is
51
53
  # available, `false` otherwise.
52
54
  def inet?
55
+ return @is_inet if !@is_inet.nil?
53
56
  return if !to_io
54
- to_io.is_a?( TCPServer ) || to_io.is_a?( TCPSocket ) || to_io.is_a?( Socket )
57
+
58
+ @is_inet = to_io.is_a?( TCPServer ) || to_io.is_a?( TCPSocket ) || to_io.is_a?( Socket )
55
59
  end
56
60
 
57
61
  # @return [IO, nil]
@@ -64,8 +68,10 @@ class Connection
64
68
  # @return [Bool]
65
69
  # `true` if the connection is a server listener.
66
70
  def listener?
71
+ return @is_listener if !@is_listener.nil?
67
72
  return if !to_io
68
- to_io.is_a?( TCPServer ) || (unix? && to_io.is_a?( UNIXServer ))
73
+
74
+ @is_listener = to_io.is_a?( TCPServer ) || (unix? && to_io.is_a?( UNIXServer ))
69
75
  end
70
76
 
71
77
  # @note The data will be buffered and sent in future {Reactor} ticks.
@@ -228,7 +234,7 @@ class Connection
228
234
  socket.connect_nonblock( Socket.sockaddr_in( @port, @host ) )
229
235
  end
230
236
  # Already connected. :)
231
- rescue Errno::EISCONN
237
+ rescue Errno::EISCONN, Errno::EALREADY
232
238
  end
233
239
 
234
240
  @connected = true
@@ -277,7 +283,7 @@ class Connection
277
283
  def _write
278
284
  return _connect if !connected?
279
285
 
280
- chunk = write_buffer.slice( 0, BLOCK_SIZE )
286
+ chunk = write_buffer.byteslice( 0, BLOCK_SIZE )
281
287
  total_written = 0
282
288
 
283
289
  begin
@@ -285,13 +291,13 @@ class Connection
285
291
  # Send out the chunk, **all** of it, or at least try to.
286
292
  loop do
287
293
  total_written += written = @socket.write_nonblock( chunk )
288
- write_buffer.slice!( 0, written )
294
+ @write_buffer = @write_buffer.byteslice( written..-1 )
289
295
 
290
296
  # Call #on_write every time any of the buffer is consumed.
291
297
  on_write
292
298
 
293
- break if written == chunk.size
294
- chunk.slice!( 0, written )
299
+ break if written == chunk.bytesize
300
+ chunk = chunk.byteslice( written..-1 )
295
301
  end
296
302
  end
297
303
 
@@ -9,7 +9,7 @@
9
9
  module Arachni
10
10
  class Reactor
11
11
 
12
- VERSION = '0.1.0'
12
+ VERSION = '0.1.3.1'
13
13
 
14
14
  end
15
15
  end
@@ -414,7 +414,7 @@ class Reactor
414
414
  def schedule( &block )
415
415
  fail_if_not_running
416
416
 
417
- if running? && in_same_thread?
417
+ if in_same_thread?
418
418
  block.call
419
419
  else
420
420
  next_tick(&block)
@@ -551,32 +551,8 @@ class Reactor
551
551
  'The host OS does not support UNIX-domain sockets.'
552
552
  end
553
553
 
554
- def process_connections
555
- if @connections.empty?
556
- sleep @max_tick_interval
557
- return
558
- end
559
-
560
- # Required for OSX as it connects immediately and then #select returns
561
- # nothing as there's no activity, given that, OpenSSL doesn't get a chance
562
- # to do its handshake so explicitly connect pending sockets, bypassing #select.
563
- @connections.each do |_, connection|
564
- connection._connect if !connection.connected?
565
- end
566
-
567
- # Get connections with available events - :read, :write, :error.
568
- selected = select_connections
569
-
570
- # Close connections that have errors.
571
- [selected.delete(:error)].flatten.compact.each(&:close)
572
-
573
- # Call the corresponding event on the connections.
574
- selected.each { |event, connections| connections.each(&"_#{event}".to_sym) }
575
- end
576
-
577
554
  def determine_connection_options( *args )
578
555
  options = {}
579
- host = port = unix_socket = nil
580
556
 
581
557
  if args[1].is_a? Integer
582
558
  options[:host], options[:port], options[:handler], *handler_options = *args
@@ -634,6 +610,22 @@ class Reactor
634
610
  @connections.values.each(&:close)
635
611
  end
636
612
 
613
+ def process_connections
614
+ if @connections.empty?
615
+ sleep @max_tick_interval
616
+ return
617
+ end
618
+
619
+ # Get connections with available events - :read, :write, :error.
620
+ selected = select_connections
621
+
622
+ # Close connections that have errors.
623
+ selected.delete(:error)&.each(&:close)
624
+
625
+ # Call the corresponding event on the connections.
626
+ selected.each { |event, connections| connections.each(&"_#{event}".to_sym) }
627
+ end
628
+
637
629
  # @return [Hash]
638
630
  #
639
631
  # Connections grouped by their available events:
@@ -643,17 +635,34 @@ class Reactor
643
635
  # {Connection#has_outgoing_data? outgoing buffer).
644
636
  # * `:error`
645
637
  def select_connections
646
- readables = read_sockets
638
+ r = []
639
+ w = []
640
+ e = []
641
+
642
+ @connections.values.each do |connection|
643
+
644
+ # Required for OSX as it connects immediately and then #select returns
645
+ # nothing as there's no activity, given that, OpenSSL doesn't get a chance
646
+ # to do its handshake so explicitly connect pending sockets, bypassing #select.
647
+ connection._connect if !connection.connected?
648
+
649
+ socket = connection.socket
650
+
651
+ e << socket
652
+
653
+ if connection.listener? || connection.connected?
654
+ r << socket
655
+ end
656
+
657
+ if connection.connected? && connection.has_outgoing_data?
658
+ w << socket
659
+ end
660
+ end
647
661
 
648
662
  selected_sockets =
649
663
  begin
650
664
  Connection::Error.translate do
651
- select(
652
- readables,
653
- write_sockets,
654
- all_sockets,
655
- @select_timeout
656
- )
665
+ select( r, w, e, @select_timeout )
657
666
  end
658
667
  rescue Connection::Error => e
659
668
  nil
@@ -668,9 +677,11 @@ class Reactor
668
677
  # So force a read for SSL sockets to cover all our bases.
669
678
  #
670
679
  # This is apparent especially on JRuby.
671
- (readables - selected_sockets[0]).each do |socket|
672
- next if !socket.is_a?( OpenSSL::SSL::SSLSocket )
673
- selected_sockets[0] << socket
680
+ if r.size != selected_sockets[0].size
681
+ (r - selected_sockets[0]).each do |socket|
682
+ next if !socket.is_a?( OpenSSL::SSL::SSLSocket )
683
+ selected_sockets[0] << socket
684
+ end
674
685
  end
675
686
 
676
687
  if selected_sockets[0].empty? && selected_sockets[1].empty? &&
@@ -687,35 +698,8 @@ class Reactor
687
698
  }
688
699
  end
689
700
 
690
- # @return [Array<Socket>]
691
- # Sockets of all connections, we want to be ready to read at any time.
692
- def read_sockets
693
- @connections.map do |_, connection|
694
- next if !connection.listener? && !connection.connected?
695
- connection.socket
696
- end.compact
697
- end
698
-
699
- def all_sockets
700
- @connections.values.map(&:socket)
701
- end
702
-
703
- # @return [Array<Socket>]
704
- # Sockets of connections with
705
- # {Connection#has_outgoing_data? outgoing data}.
706
- def write_sockets
707
- @connections.map do |_, connection|
708
- next if connection.connected? && !connection.has_outgoing_data?
709
- connection.socket
710
- end.compact
711
- end
712
-
713
701
  def connections_from_sockets( sockets )
714
- sockets.map { |s| connection_from_socket( s ) }
715
- end
716
-
717
- def connection_from_socket( socket )
718
- @connections[socket.to_io]
702
+ sockets.map { |s| @connections[s.to_io] }
719
703
  end
720
704
 
721
705
  end
@@ -129,10 +129,12 @@ describe Arachni::Reactor::Connection::TLS do
129
129
  reactor.listen( host, port, TLSHandler, options )
130
130
 
131
131
  client.write data
132
+ sleep 1
133
+
132
134
  reactor.stop
133
135
  reactor.wait rescue Arachni::Reactor::Error::NotRunning
134
136
 
135
- received_data.should == data
137
+ expect(received_data).to eq data
136
138
  end
137
139
  end
138
140
 
@@ -324,7 +326,8 @@ describe Arachni::Reactor::Connection::TLS do
324
326
  connection.write data
325
327
  end
326
328
 
327
- received.should == data
329
+ sleep 1
330
+ expect(received).to eq data
328
331
  end
329
332
  end
330
333
 
@@ -25,7 +25,7 @@ describe Arachni::Reactor::Iterator do
25
25
  end
26
26
 
27
27
  context 'when the concurrency is' do
28
- context 0 do
28
+ context '0' do
29
29
  let(:concurrency) { 0 }
30
30
 
31
31
  it "raises #{ArgumentError}" do
@@ -35,7 +35,9 @@ describe Arachni::Reactor::Tasks::Delayed do
35
35
  time = Time.now
36
36
  task.call while called < 1
37
37
 
38
- (Time.now - time).round(2).should == 0.25
38
+ elapsed = (Time.now - time).round(2)
39
+ elapsed.should >= 0.25
40
+ elapsed.should < 0.30
39
41
  end
40
42
 
41
43
  it 'calls #done' do
@@ -33,7 +33,9 @@ describe Arachni::Reactor::Tasks::Periodic do
33
33
  time = Time.now
34
34
  task.call while called < 5
35
35
 
36
- (Time.now - time).round(2).should == 1.25
36
+ elapsed = (Time.now - time).round(2)
37
+ elapsed.should >= 1.25
38
+ elapsed.should < 1.35
37
39
  end
38
40
  end
39
41
 
@@ -25,14 +25,14 @@ describe Arachni::Reactor::Tasks do
25
25
  context 'when it includes the given task' do
26
26
  it 'returns true' do
27
27
  subject << task
28
- subject.should include task
28
+ expect(subject.include?( task )).to be_truthy
29
29
  end
30
30
  end
31
31
 
32
32
  context 'when it does not includes the given task' do
33
33
  it 'returns false' do
34
34
  subject << task
35
- subject.should_not include another_task
35
+ expect(subject.include?( another_task )).to be_falsey
36
36
  end
37
37
  end
38
38
  end
@@ -125,8 +125,8 @@ describe Arachni::Reactor::Tasks do
125
125
 
126
126
  subject.call
127
127
 
128
- called_one.should be_true
129
- called_two.should be_true
128
+ called_one.should be_truthy
129
+ called_two.should be_truthy
130
130
  end
131
131
 
132
132
  it 'returns self' do
@@ -114,7 +114,7 @@ def convert_server_to_ssl( server, options = {} )
114
114
  context.cert.version = 2
115
115
  context.cert.serial = 1
116
116
 
117
- context.cert.sign( context.key, OpenSSL::Digest::SHA1.new )
117
+ context.cert.sign( context.key, OpenSSL::Digest::SHA256.new )
118
118
  end
119
119
 
120
120
  OpenSSL::SSL::SSLServer.new( server, context )
@@ -77,7 +77,7 @@ class Servers
77
77
  return if !server_info[:pid]
78
78
 
79
79
  begin
80
- Process.kill( Gem.win_platform? ? 'QUIT' : 'KILL', server_info[:pid] ) while sleep 0.1
80
+ Process.kill( 'KILL', server_info[:pid] ) while sleep 0.1
81
81
  rescue Errno::ESRCH
82
82
  server_info.delete(:pid)
83
83
 
@@ -15,7 +15,7 @@ loop do
15
15
  next if (data = socket.gets).to_s.empty?
16
16
  socket.write( data )
17
17
  end
18
- rescue EOFError, Errno::EPIPE
18
+ rescue EOFError, Errno::EPIPE, Errno::ECONNRESET
19
19
  socket.close
20
20
  end
21
21
  end
@@ -7,7 +7,7 @@ loop do
7
7
  next if (data = socket.gets).to_s.empty?
8
8
  socket.write( data )
9
9
  end
10
- rescue EOFError, Errno::EPIPE
10
+ rescue EOFError, Errno::EPIPE, Errno::ECONNRESET
11
11
  socket.close
12
12
  end
13
13
  end
@@ -15,7 +15,7 @@ loop do
15
15
  next if (data = socket.gets).to_s.empty?
16
16
  socket.write( data )
17
17
  end
18
- rescue EOFError, Errno::EPIPE
18
+ rescue EOFError, Errno::EPIPE, Errno::ECONNRESET
19
19
  socket.close
20
20
  end
21
21
  end
@@ -290,10 +290,10 @@ shared_examples_for 'Arachni::Reactor::Connection' do
290
290
 
291
291
  reactor.run_in_thread
292
292
 
293
- connection.attach( reactor ).should be_true
293
+ connection.attach( reactor ).should be_truthy
294
294
  sleep 1
295
295
 
296
- reactor.attached?( configured ).should be_true
296
+ reactor.attached?( configured ).should be_truthy
297
297
  end
298
298
 
299
299
  it 'calls #on_attach' do
@@ -319,7 +319,7 @@ shared_examples_for 'Arachni::Reactor::Connection' do
319
319
  connection.attach reactor
320
320
  sleep 0.1 while connection.detached?
321
321
 
322
- connection.attach( reactor ).should be_false
322
+ connection.attach( reactor ).should be_falsey
323
323
  end
324
324
  end
325
325
 
@@ -337,11 +337,11 @@ shared_examples_for 'Arachni::Reactor::Connection' do
337
337
  r.run_in_thread
338
338
 
339
339
  configured.should receive(:on_detach)
340
- connection.attach( r ).should be_true
340
+ connection.attach( r ).should be_truthy
341
341
 
342
342
  sleep 2
343
343
 
344
- r.attached?( configured ).should be_true
344
+ r.attached?( configured ).should be_truthy
345
345
  end
346
346
  end
347
347
  end
@@ -363,7 +363,7 @@ shared_examples_for 'Arachni::Reactor::Connection' do
363
363
  connection.detach
364
364
  sleep 0.1 while connection.attached?
365
365
 
366
- reactor.attached?( configured ).should be_false
366
+ reactor.attached?( configured ).should be_falsey
367
367
  end
368
368
 
369
369
  it 'calls #on_detach' do
@@ -582,7 +582,7 @@ shared_examples_for 'Arachni::Reactor::Connection' do
582
582
  end
583
583
  end
584
584
 
585
- configured.called_on_flush.should be_true
585
+ configured.called_on_flush.should be_truthy
586
586
  end
587
587
  end
588
588
  end
@@ -601,13 +601,13 @@ shared_examples_for 'Arachni::Reactor::Connection' do
601
601
  configured.write 'test'
602
602
  sleep 0.1 while !configured.has_outgoing_data?
603
603
 
604
- configured.has_outgoing_data?.should be_true
604
+ configured.has_outgoing_data?.should be_truthy
605
605
  end
606
606
  end
607
607
 
608
608
  context 'when the send-buffer is empty' do
609
609
  it 'returns false' do
610
- configured.has_outgoing_data?.should be_false
610
+ configured.has_outgoing_data?.should be_falsey
611
611
  end
612
612
  end
613
613
  end
@@ -158,7 +158,7 @@ shared_examples_for 'Arachni::Reactor' do
158
158
  end
159
159
 
160
160
  subject.should_not be_running
161
- running.should be_true
161
+ running.should be_truthy
162
162
  end
163
163
 
164
164
  context 'when no block is given' do
@@ -816,6 +816,9 @@ shared_examples_for 'Arachni::Reactor' do
816
816
  subject.listen( host, port, echo_server_handler, *options )
817
817
 
818
818
  @socket = tcp_writer.call( host, port, data )
819
+
820
+ sleep 5
821
+
819
822
  subject.connections.values.first.initialization_args.should == options
820
823
  end
821
824
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arachni-reactor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tasos Laskos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-21 00:00:00.000000000 Z
11
+ date: 2021-12-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  Arachni::Reactor is a simple, lightweight, pure-Ruby implementation of the Reactor
@@ -97,45 +97,44 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  requirements: []
100
- rubyforge_project:
101
- rubygems_version: 2.4.5
100
+ rubygems_version: 3.3.0.dev
102
101
  signing_key:
103
102
  specification_version: 4
104
103
  summary: A pure-Ruby implementation of the Reactor pattern.
105
104
  test_files:
106
- - spec/support/fixtures/pems/server/cert.pem
107
- - spec/support/fixtures/pems/server/key.pem
105
+ - spec/arachni/reactor/connection/tls_spec.rb
106
+ - spec/arachni/reactor/connection_spec.rb
107
+ - spec/arachni/reactor/iterator_spec.rb
108
+ - spec/arachni/reactor/queue_spec.rb
109
+ - spec/arachni/reactor/tasks/base.rb
110
+ - spec/arachni/reactor/tasks/delayed_spec.rb
111
+ - spec/arachni/reactor/tasks/one_off_spec.rb
112
+ - spec/arachni/reactor/tasks/periodic_spec.rb
113
+ - spec/arachni/reactor/tasks/persistent_spec.rb
114
+ - spec/arachni/reactor/tasks_spec.rb
115
+ - spec/arachni/reactor_spec.rb
116
+ - spec/arachni/reactor_tls_spec.rb
117
+ - spec/spec_helper.rb
118
+ - spec/support/fixtures/handlers/echo_client.rb
119
+ - spec/support/fixtures/handlers/echo_client_tls.rb
120
+ - spec/support/fixtures/handlers/echo_server.rb
121
+ - spec/support/fixtures/handlers/echo_server_tls.rb
108
122
  - spec/support/fixtures/pems/cacert.pem
109
- - spec/support/fixtures/pems/client/foo-key.pem
110
123
  - spec/support/fixtures/pems/client/cert.pem
111
124
  - spec/support/fixtures/pems/client/foo-cert.pem
125
+ - spec/support/fixtures/pems/client/foo-key.pem
112
126
  - spec/support/fixtures/pems/client/key.pem
113
- - spec/support/fixtures/handlers/echo_client.rb
114
- - spec/support/fixtures/handlers/echo_server.rb
115
- - spec/support/fixtures/handlers/echo_client_tls.rb
116
- - spec/support/fixtures/handlers/echo_server_tls.rb
117
- - spec/support/servers/echo_unix.rb
118
- - spec/support/servers/echo_tls.rb
119
- - spec/support/servers/echo.rb
120
- - spec/support/servers/echo_unix_tls.rb
121
- - spec/support/helpers/utilities.rb
127
+ - spec/support/fixtures/pems/server/cert.pem
128
+ - spec/support/fixtures/pems/server/key.pem
122
129
  - spec/support/helpers/paths.rb
123
- - spec/support/lib/servers.rb
124
- - spec/support/lib/servers/runner.rb
130
+ - spec/support/helpers/utilities.rb
125
131
  - spec/support/lib/server_option_parser.rb
126
- - spec/support/shared/reactor.rb
132
+ - spec/support/lib/servers/runner.rb
133
+ - spec/support/lib/servers.rb
134
+ - spec/support/servers/echo.rb
135
+ - spec/support/servers/echo_tls.rb
136
+ - spec/support/servers/echo_unix.rb
137
+ - spec/support/servers/echo_unix_tls.rb
127
138
  - spec/support/shared/connection.rb
139
+ - spec/support/shared/reactor.rb
128
140
  - spec/support/shared/task.rb
129
- - spec/spec_helper.rb
130
- - spec/arachni/reactor_tls_spec.rb
131
- - spec/arachni/reactor_spec.rb
132
- - spec/arachni/reactor/queue_spec.rb
133
- - spec/arachni/reactor/tasks_spec.rb
134
- - spec/arachni/reactor/connection_spec.rb
135
- - spec/arachni/reactor/iterator_spec.rb
136
- - spec/arachni/reactor/connection/tls_spec.rb
137
- - spec/arachni/reactor/tasks/base.rb
138
- - spec/arachni/reactor/tasks/persistent_spec.rb
139
- - spec/arachni/reactor/tasks/delayed_spec.rb
140
- - spec/arachni/reactor/tasks/one_off_spec.rb
141
- - spec/arachni/reactor/tasks/periodic_spec.rb