stomper 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. data/.gitignore +5 -0
  2. data/{spec/spec.opts → .rspec} +0 -2
  3. data/Gemfile +4 -0
  4. data/LICENSE +201 -201
  5. data/README.md +130 -0
  6. data/Rakefile +5 -0
  7. data/examples/basic.rb +38 -0
  8. data/examples/events.rb +54 -0
  9. data/features/acking_messages.feature +147 -0
  10. data/features/disconnecting.feature +12 -0
  11. data/features/establish_connection.feature +44 -0
  12. data/features/protocol_version_negotiation.feature +61 -0
  13. data/features/receipts.feature +72 -0
  14. data/features/scopes.feature +32 -0
  15. data/features/secure_connections.feature +38 -0
  16. data/features/send_and_message.feature +28 -0
  17. data/features/steps/acking_messages_steps.rb +39 -0
  18. data/features/steps/disconnecting_steps.rb +8 -0
  19. data/features/steps/establish_connection_steps.rb +74 -0
  20. data/features/steps/frame_transmission_steps.rb +35 -0
  21. data/features/steps/protocol_version_negotiation_steps.rb +15 -0
  22. data/features/steps/receipts_steps.rb +79 -0
  23. data/features/steps/scopes_steps.rb +52 -0
  24. data/features/steps/secure_connections_steps.rb +41 -0
  25. data/features/steps/send_and_message_steps.rb +35 -0
  26. data/features/steps/subscribing_steps.rb +36 -0
  27. data/features/steps/threaded_receiver_steps.rb +8 -0
  28. data/features/steps/transactions_steps.rb +0 -0
  29. data/features/subscribing.feature +151 -0
  30. data/features/support/env.rb +11 -0
  31. data/features/support/header_helpers.rb +12 -0
  32. data/features/support/ssl/README +6 -0
  33. data/features/support/ssl/broker_cert.csr +17 -0
  34. data/features/support/ssl/broker_cert.pem +72 -0
  35. data/features/support/ssl/broker_key.pem +27 -0
  36. data/features/support/ssl/client_cert.csr +17 -0
  37. data/features/support/ssl/client_cert.pem +72 -0
  38. data/features/support/ssl/client_key.pem +27 -0
  39. data/features/support/ssl/demoCA/cacert.pem +17 -0
  40. data/features/support/ssl/demoCA/index.txt +2 -0
  41. data/features/support/ssl/demoCA/index.txt.attr +1 -0
  42. data/features/support/ssl/demoCA/index.txt.attr.old +1 -0
  43. data/features/support/ssl/demoCA/index.txt.old +1 -0
  44. data/features/support/ssl/demoCA/newcerts/01.pem +72 -0
  45. data/features/support/ssl/demoCA/newcerts/02.pem +72 -0
  46. data/features/support/ssl/demoCA/private/cakey.pem +17 -0
  47. data/features/support/ssl/demoCA/serial +1 -0
  48. data/features/support/ssl/demoCA/serial.old +1 -0
  49. data/features/support/test_stomp_server.rb +150 -0
  50. data/features/threaded_receiver.feature +11 -0
  51. data/features/transactions.feature +66 -0
  52. data/lib/stomper.rb +30 -20
  53. data/lib/stomper/connection.rb +442 -102
  54. data/lib/stomper/errors.rb +59 -0
  55. data/lib/stomper/extensions.rb +10 -0
  56. data/lib/stomper/extensions/common.rb +258 -0
  57. data/lib/stomper/extensions/events.rb +213 -0
  58. data/lib/stomper/extensions/heartbeat.rb +101 -0
  59. data/lib/stomper/extensions/scoping.rb +56 -0
  60. data/lib/stomper/frame.rb +54 -0
  61. data/lib/stomper/frame_serializer.rb +217 -0
  62. data/lib/stomper/headers.rb +15 -0
  63. data/lib/stomper/receipt_manager.rb +36 -0
  64. data/lib/stomper/receivers.rb +7 -0
  65. data/lib/stomper/receivers/threaded.rb +71 -0
  66. data/lib/stomper/scopes.rb +9 -0
  67. data/lib/stomper/scopes/header_scope.rb +49 -0
  68. data/lib/stomper/scopes/receipt_scope.rb +44 -0
  69. data/lib/stomper/scopes/transaction_scope.rb +109 -0
  70. data/lib/stomper/sockets.rb +66 -28
  71. data/lib/stomper/subscription_manager.rb +79 -0
  72. data/lib/stomper/support.rb +68 -0
  73. data/lib/stomper/support/1.8/frame_serializer.rb +53 -0
  74. data/lib/stomper/support/1.8/headers.rb +183 -0
  75. data/lib/stomper/support/1.9/frame_serializer.rb +64 -0
  76. data/lib/stomper/support/1.9/headers.rb +172 -0
  77. data/lib/stomper/support/ruby.rb +13 -0
  78. data/lib/stomper/uris.rb +49 -0
  79. data/lib/stomper/version.rb +7 -0
  80. data/spec/spec_helper.rb +13 -9
  81. data/spec/stomper/connection_spec.rb +712 -0
  82. data/spec/stomper/extensions/common_spec.rb +187 -0
  83. data/spec/stomper/extensions/events_spec.rb +78 -0
  84. data/spec/stomper/extensions/heartbeat_spec.rb +103 -0
  85. data/spec/stomper/extensions/scoping_spec.rb +21 -0
  86. data/spec/stomper/frame_serializer_1.8_spec.rb +318 -0
  87. data/spec/stomper/frame_serializer_spec.rb +316 -0
  88. data/spec/stomper/frame_spec.rb +36 -0
  89. data/spec/stomper/headers_spec.rb +224 -0
  90. data/spec/stomper/receipt_manager_spec.rb +91 -0
  91. data/spec/stomper/receivers/threaded_spec.rb +116 -0
  92. data/spec/stomper/scopes/header_scope_spec.rb +42 -0
  93. data/spec/stomper/scopes/receipt_scope_spec.rb +51 -0
  94. data/spec/stomper/scopes/transaction_scope_spec.rb +183 -0
  95. data/spec/stomper/sockets_spec.rb +113 -0
  96. data/spec/stomper/subscription_manager_spec.rb +107 -0
  97. data/spec/stomper/support_spec.rb +69 -0
  98. data/spec/stomper/uris_spec.rb +54 -0
  99. data/spec/stomper_spec.rb +9 -0
  100. data/spec/support/custom_argument_matchers.rb +57 -0
  101. data/spec/support/existential_frame_matchers.rb +19 -0
  102. data/spec/support/frame_header_matchers.rb +10 -0
  103. data/stomper.gemspec +30 -0
  104. metadata +272 -97
  105. data/AUTHORS +0 -21
  106. data/CHANGELOG +0 -20
  107. data/README.rdoc +0 -120
  108. data/lib/stomper/client.rb +0 -34
  109. data/lib/stomper/frame_reader.rb +0 -73
  110. data/lib/stomper/frame_writer.rb +0 -21
  111. data/lib/stomper/frames.rb +0 -39
  112. data/lib/stomper/frames/abort.rb +0 -10
  113. data/lib/stomper/frames/ack.rb +0 -25
  114. data/lib/stomper/frames/begin.rb +0 -11
  115. data/lib/stomper/frames/client_frame.rb +0 -89
  116. data/lib/stomper/frames/commit.rb +0 -10
  117. data/lib/stomper/frames/connect.rb +0 -10
  118. data/lib/stomper/frames/connected.rb +0 -30
  119. data/lib/stomper/frames/disconnect.rb +0 -10
  120. data/lib/stomper/frames/error.rb +0 -21
  121. data/lib/stomper/frames/message.rb +0 -48
  122. data/lib/stomper/frames/receipt.rb +0 -19
  123. data/lib/stomper/frames/send.rb +0 -10
  124. data/lib/stomper/frames/server_frame.rb +0 -38
  125. data/lib/stomper/frames/subscribe.rb +0 -42
  126. data/lib/stomper/frames/unsubscribe.rb +0 -19
  127. data/lib/stomper/open_uri_interface.rb +0 -41
  128. data/lib/stomper/receipt_handlers.rb +0 -23
  129. data/lib/stomper/receiptor.rb +0 -38
  130. data/lib/stomper/subscriber.rb +0 -76
  131. data/lib/stomper/subscription.rb +0 -128
  132. data/lib/stomper/subscriptions.rb +0 -95
  133. data/lib/stomper/threaded_receiver.rb +0 -59
  134. data/lib/stomper/transaction.rb +0 -185
  135. data/lib/stomper/transactor.rb +0 -50
  136. data/lib/stomper/uri.rb +0 -55
  137. data/spec/client_spec.rb +0 -29
  138. data/spec/connection_spec.rb +0 -22
  139. data/spec/frame_reader_spec.rb +0 -37
  140. data/spec/frame_writer_spec.rb +0 -27
  141. data/spec/frames/client_frame_spec.rb +0 -66
  142. data/spec/frames/indirect_frame_spec.rb +0 -45
  143. data/spec/frames/server_frame_spec.rb +0 -85
  144. data/spec/open_uri_interface_spec.rb +0 -132
  145. data/spec/receiptor_spec.rb +0 -35
  146. data/spec/shared_connection_examples.rb +0 -79
  147. data/spec/subscriber_spec.rb +0 -77
  148. data/spec/subscription_spec.rb +0 -157
  149. data/spec/subscriptions_spec.rb +0 -145
  150. data/spec/threaded_receiver_spec.rb +0 -33
  151. data/spec/transaction_spec.rb +0 -139
  152. data/spec/transactor_spec.rb +0 -46
@@ -1,33 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- module Stomper
4
- describe ThreadedReceiver do
5
- before(:each) do
6
- @connection = mock("connection")
7
- @connection.extend Stomper::ThreadedReceiver
8
- end
9
-
10
- describe "expected interface" do
11
- it "should provide a start method" do
12
- @connection.should respond_to(:start)
13
- end
14
-
15
- it "should provide a stop method" do
16
- @connection.should respond_to(:stop)
17
- end
18
- end
19
-
20
- describe "reading on a thread" do
21
- it "should start receiving when started, and stop when stopped." do
22
- @connection.should_receive(:connected?).once.and_return(false)
23
- @connection.should_receive(:connect).once.and_return(true)
24
- @connection.should_receive(:connected?).any_number_of_times.and_return(true)
25
- @connection.should_receive(:receive).at_least(:once).and_return(nil)
26
- @connection.start
27
- sleep(0.5)
28
- @connection.stop
29
- @connection.should_not_receive(:receive)
30
- end
31
- end
32
- end
33
- end
@@ -1,139 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
2
-
3
- module Stomper
4
- describe Transaction do
5
- before(:each) do
6
- @mock_client = mock("client")
7
- end
8
-
9
- describe "initialization with blocks" do
10
- before(:each) do
11
- @mock_client.should_receive(:begin).once.with(an_instance_of(String)).and_return(nil)
12
- @mock_client.should_receive(:send).once.with("/queue/test/1","a message", an_instance_of(Hash)).and_return(nil)
13
- @mock_client.should_receive(:commit).once.with(an_instance_of(String)).and_return(nil)
14
- end
15
-
16
-
17
- it "should provide a DSL when a block with no arguments is given" do
18
- lambda do
19
- Transaction.new(@mock_client) do
20
- send("/queue/test/1", "a message")
21
- end
22
- end.should_not raise_error
23
- end
24
-
25
- it "should yield itself when a block with arguments is given" do
26
- lambda do
27
- Transaction.new(@mock_client) do |t|
28
- t.send("/queue/test/1", "a message")
29
- end
30
- end.should_not raise_error
31
- end
32
- end
33
-
34
- describe "explicitly named" do
35
- before(:each) do
36
- @transaction_name = "tx-test"
37
- @mock_client.should_receive(:begin).once.with(@transaction_name).and_return(nil)
38
- @mock_client.should_receive(:send).once.with("/queue/test/1","test message", hash_including(:transaction => @transaction_name)).and_return(nil)
39
- @mock_client.should_receive(:commit).once.with(@transaction_name).and_return(nil)
40
- end
41
-
42
- it "should use the given transaction ID as the transaction header in stomp messages" do
43
- Transaction.new(@mock_client, @transaction_name) do |t|
44
- t.send("/queue/test/1", "test message")
45
- end
46
- end
47
- end
48
-
49
- describe "aborting failed transactions" do
50
- before(:each) do
51
- @transaction_name = "tx-test-2"
52
- @mock_client.should_receive(:begin).once.with(@transaction_name).and_return(nil)
53
- @mock_client.should_receive(:send).once.with("/queue/test/1","test message", hash_including(:transaction => @transaction_name)).and_return(nil)
54
- end
55
-
56
- it "should abort when an exception is raised" do
57
- @mock_client.should_receive(:abort).once.with(@transaction_name).and_return(nil)
58
- @mock_client.should_not_receive(:commit)
59
- lambda do
60
- Transaction.new(@mock_client, @transaction_name) do |t|
61
- t.send("/queue/test/1", "test message")
62
- raise "Never to be completed!"
63
- end
64
- end.should raise_error(TransactionAborted)
65
- end
66
-
67
- it "should abort and raise an error when explicitly aborted" do
68
- @mock_client.should_receive(:abort).once.with(@transaction_name).and_return(nil)
69
- @mock_client.should_not_receive(:commit)
70
- lambda do
71
- Transaction.new(@mock_client, @transaction_name) do |t|
72
- t.send("/queue/test/1", "test message")
73
- t.abort
74
- # This should never be reached.
75
- t.commit
76
- end
77
- end.should raise_error(TransactionAborted)
78
- end
79
-
80
- it "should not raise an exception when explicitly aborted after a commit" do
81
- @mock_client.should_not_receive(:abort)
82
- @mock_client.should_receive(:commit).once.with(@transaction_name).and_return(nil)
83
- lambda do
84
- Transaction.new(@mock_client, @transaction_name) do |t|
85
- t.send("/queue/test/1", "test message")
86
- t.commit
87
- t.abort
88
- end
89
- end.should_not raise_error(TransactionAborted)
90
- end
91
- end
92
-
93
- describe "nested transactions" do
94
- before(:each) do
95
- @transaction_name = "tx-test-3"
96
- @inner_transaction_name = "#{@transaction_name}-inner"
97
- @inner_inner_transaction_name = "#{@transaction_name}-inner-inner"
98
- @mock_client.should_receive(:begin).with(@transaction_name).once.and_return(nil)
99
- @mock_client.should_receive(:begin).with(@inner_transaction_name).once.and_return(nil)
100
- @mock_client.should_receive(:send).with("/queue/test/1","test message", hash_including(:transaction => @transaction_name)).once.and_return(nil)
101
- @mock_client.should_receive(:send).with("/queue/test/2","inner message", hash_including(:transaction => @inner_transaction_name)).once.and_return(nil)
102
- end
103
- it "no transaction should succeed when an inner one fails" do
104
- @mock_client.should_receive(:abort).once.with(@transaction_name).and_return(nil)
105
- @mock_client.should_receive(:abort).once.with(@inner_transaction_name).and_return(nil)
106
- @mock_client.should_not_receive(:commit)
107
- lambda do
108
- Transaction.new(@mock_client, @transaction_name) do |t|
109
- t.send("/queue/test/1", "test message")
110
- t.transaction(@inner_transaction_name) do |nt|
111
- nt.send("/queue/test/2", "inner message")
112
- raise "failure"
113
- end
114
- end
115
- end.should raise_error(TransactionAborted)
116
- end
117
- it "no transaction should succeed when an inner one is explicitly aborted" do
118
- @mock_client.should_receive(:begin).with(@inner_inner_transaction_name).once.and_return(nil)
119
- @mock_client.should_receive(:send).with("/queue/test/3","inner-inner message", hash_including(:transaction => @inner_inner_transaction_name)).once.and_return(nil)
120
- @mock_client.should_receive(:abort).once.with(@transaction_name).and_return(nil)
121
- @mock_client.should_receive(:abort).once.with(@inner_transaction_name).and_return(nil)
122
- @mock_client.should_receive(:abort).once.with(@inner_inner_transaction_name).and_return(nil)
123
- @mock_client.should_not_receive(:commit)
124
- lambda do
125
- Transaction.new(@mock_client, @transaction_name) do |t|
126
- t.send("/queue/test/1", "test message")
127
- t.transaction(@inner_transaction_name) do |nt|
128
- nt.send("/queue/test/2", "inner message")
129
- nt.transaction(@inner_inner_transaction_name) do |nnt|
130
- nnt.send("/queue/test/3", "inner-inner message")
131
- nnt.abort
132
- end
133
- end
134
- end
135
- end.should raise_error(TransactionAborted)
136
- end
137
- end
138
- end
139
- end
@@ -1,46 +0,0 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
2
-
3
- module Stomper
4
- describe Transactor do
5
- class MockConcreteTransactor
6
- include Stomper::Transactor
7
- end
8
-
9
- before(:each) do
10
- @client = MockConcreteTransactor.new
11
- end
12
-
13
- describe "expected interface" do
14
- it "should provide a transaction method" do
15
- @client.should respond_to(:transaction)
16
- end
17
- it "should provide a begin method" do
18
- @client.should respond_to(:begin)
19
- @client.should_receive(:transmit).with(an_instance_of(Stomper::Frames::Begin)).once.and_return(nil)
20
- @client.begin("tx-001")
21
- end
22
- it "should proivde an abort method" do
23
- @client.should respond_to(:abort)
24
- @client.should_receive(:transmit).with(an_instance_of(Stomper::Frames::Abort)).once.and_return(nil)
25
- @client.abort("tx-001")
26
- end
27
- it "should provide a commit method" do
28
- @client.should respond_to(:commit)
29
- @client.should_receive(:transmit).with(an_instance_of(Stomper::Frames::Commit)).once.and_return(nil)
30
- @client.commit("tx-001")
31
- end
32
- end
33
-
34
- describe "transactions" do
35
- it "should provide a transaction method that generates a new Transaction" do
36
- @client.should_receive(:begin)
37
- @client.should_receive(:commit)
38
- @evaluated = false
39
- @client.transaction do |t|
40
- @evaluated = true
41
- end
42
- @evaluated.should be_true
43
- end
44
- end
45
- end
46
- end