bane 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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