bane 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -58,6 +58,17 @@ module Bane
58
58
  include ForEachLine
59
59
  end
60
60
 
61
+ # Sends a newline character as the only response
62
+ class NewlineResponse < BasicBehavior
63
+ def serve(io, options)
64
+ io.write "\n"
65
+ end
66
+ end
67
+
68
+ class NewlineResponseForEachLine < NewlineResponse
69
+ include ForEachLine
70
+ end
71
+
61
72
  # Sends a random response.
62
73
  class RandomResponse < BasicBehavior
63
74
  def serve(io, options)
@@ -75,7 +86,7 @@ module Bane
75
86
  include ForEachLine
76
87
  end
77
88
 
78
- # Sends a fixed response chacter-by-character, pausing in between each character.
89
+ # Sends a fixed response character-by-character, pausing between each character.
79
90
  #
80
91
  # Options:
81
92
  # - message: The response to send. Default: "Hello, world!"
@@ -6,21 +6,6 @@ class BehaviorsTest < Test::Unit::TestCase
6
6
 
7
7
  include Bane::Behaviors
8
8
 
9
- class FakeConnection < StringIO
10
- def will_send(query)
11
- @query = query
12
- end
13
-
14
- def gets
15
- @query
16
- @read_query = true
17
- end
18
-
19
- def read_query?
20
- @read_query
21
- end
22
- end
23
-
24
9
  def setup
25
10
  @fake_connection = FakeConnection.new
26
11
  end
@@ -31,8 +16,14 @@ class BehaviorsTest < Test::Unit::TestCase
31
16
  assert_equal "Test Message", response
32
17
  end
33
18
 
19
+ def test_newline_response_sends_only_a_newline_character
20
+ query_server(create(NewlineResponse))
21
+
22
+ assert_equal "\n", response
23
+ end
24
+
34
25
  def test_deluge_response_sends_one_million_bytes_by_default
35
- query_server(create DelugeResponse)
26
+ query_server(create(DelugeResponse))
36
27
 
37
28
  assert_response_length 1_000_000
38
29
  end
@@ -44,13 +35,13 @@ class BehaviorsTest < Test::Unit::TestCase
44
35
  end
45
36
 
46
37
  def test_close_immediately_sends_no_response
47
- query_server(create CloseImmediately)
38
+ query_server(create(CloseImmediately))
48
39
 
49
40
  assert_empty_response()
50
41
  end
51
42
 
52
43
  def test_never_respond_never_sends_a_response
53
- server = create NeverRespond
44
+ server = create(NeverRespond)
54
45
 
55
46
  assert_raise Timeout::Error do
56
47
  Timeout::timeout(3) { query_server(server) }
@@ -59,7 +50,7 @@ class BehaviorsTest < Test::Unit::TestCase
59
50
  end
60
51
 
61
52
  def test_close_after_pause_sleeps_30_seconds_by_default_and_sends_nothing
62
- server = create CloseAfterPause
53
+ server = create(CloseAfterPause)
63
54
  server.expects(:sleep).with(30)
64
55
 
65
56
  query_server(server)
@@ -68,13 +59,13 @@ class BehaviorsTest < Test::Unit::TestCase
68
59
  end
69
60
 
70
61
  def test_close_after_pause_accepts_duration_parameter
71
- server = create CloseAfterPause
62
+ server = create(CloseAfterPause)
72
63
 
73
64
  within(2) { query_server(server, :duration => 1) }
74
65
  end
75
66
 
76
67
  def test_slow_response_sends_a_message_slowly
77
- server = create SlowResponse
68
+ server = create(SlowResponse)
78
69
  message = "Hi!"
79
70
  delay = 0.5
80
71
  max_delay = (message.length + 1) * delay
@@ -85,7 +76,7 @@ class BehaviorsTest < Test::Unit::TestCase
85
76
  end
86
77
 
87
78
  def test_random_response_sends_a_nonempty_response
88
- query_server(create RandomResponse)
79
+ query_server(create(RandomResponse))
89
80
 
90
81
  assert (!response.empty?), "Should have served a nonempty response"
91
82
  end
@@ -96,7 +87,7 @@ class BehaviorsTest < Test::Unit::TestCase
96
87
  server = create(HttpRefuseAllCredentials)
97
88
  query_server(server)
98
89
 
99
- assert @fake_connection.read_query?, "Should have read the HTTP query before sending response"
90
+ assert @fake_connection.read_all_queries?, "Should have read the HTTP query before sending response"
100
91
  assert_match /HTTP\/1.1 401 Unauthorized/, response, 'Should have responded with the 401 response code'
101
92
  end
102
93
 
@@ -104,6 +95,17 @@ class BehaviorsTest < Test::Unit::TestCase
104
95
  assert_equal "SlowResponse", Bane::Behaviors::SlowResponse.simple_name
105
96
  end
106
97
 
98
+ def test_for_each_line_reads_a_line_before_responding
99
+ server = create(Bane::Behaviors::FixedResponseForEachLine)
100
+
101
+ @fake_connection.will_send "irrelevant\n"
102
+
103
+ query_server(server, {:message => "Dynamic"})
104
+ assert_equal "Dynamic", response
105
+
106
+ assert @fake_connection.read_all_queries?
107
+ end
108
+
107
109
  private
108
110
 
109
111
  def create(server_class)
@@ -134,4 +136,4 @@ class BehaviorsTest < Test::Unit::TestCase
134
136
  end
135
137
  end
136
138
 
137
- end
139
+ end
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class FakeConnectionTest < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @fake_connection = FakeConnection.new
7
+ end
8
+
9
+ def test_fake_connection_returns_nil_if_no_commands_to_read
10
+ assert_nil @fake_connection.gets
11
+ end
12
+
13
+ def test_fake_connection_reports_when_one_command_set_and_read
14
+ @fake_connection.will_send("Command #1")
15
+
16
+ @fake_connection.gets
17
+
18
+ assert @fake_connection.read_all_queries?, "Should have read all queries"
19
+ end
20
+
21
+ def test_fake_connection_reports_when_all_commands_read
22
+ @fake_connection.will_send("Command #1")
23
+ @fake_connection.will_send("Command #2")
24
+
25
+ @fake_connection.gets
26
+
27
+ assert !@fake_connection.read_all_queries?, "Did not read all queries yet"
28
+
29
+ @fake_connection.gets
30
+
31
+ assert @fake_connection.read_all_queries?, "Should have read all queries"
32
+ end
33
+
34
+ end
data/test/test_helper.rb CHANGED
@@ -7,3 +7,24 @@ require 'bane'
7
7
 
8
8
 
9
9
  IRRELEVANT_PORT = 4001
10
+
11
+ class FakeConnection < StringIO
12
+
13
+ def will_send(query)
14
+ commands.push query
15
+ end
16
+
17
+ def gets
18
+ commands.pop
19
+ end
20
+
21
+ def read_all_queries?
22
+ commands.empty?
23
+ end
24
+
25
+ private
26
+
27
+ def commands
28
+ @commands ||= []
29
+ end
30
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bane
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Wellman
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-05-28 00:00:00 -04:00
18
+ date: 2010-07-02 00:00:00 -04:00
19
19
  default_executable: bane
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -64,6 +64,7 @@ files:
64
64
  - test/bane/configuration_parser_test.rb
65
65
  - test/bane/configuration_test.rb
66
66
  - test/bane/delegating_gserver_test.rb
67
+ - test/bane/fake_connection_test.rb
67
68
  - test/bane/integration_test.rb
68
69
  - test/bane/launcher_test.rb
69
70
  - test/bane/naive_http_response_test.rb
@@ -111,6 +112,7 @@ test_files:
111
112
  - test/bane/configuration_parser_test.rb
112
113
  - test/bane/configuration_test.rb
113
114
  - test/bane/delegating_gserver_test.rb
115
+ - test/bane/fake_connection_test.rb
114
116
  - test/bane/integration_test.rb
115
117
  - test/bane/launcher_test.rb
116
118
  - test/bane/naive_http_response_test.rb