droid19 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Request' do
4
+ before do
5
+ @mq = mock("MQ")
6
+ @exchange = mock("MQ Exchange")
7
+ @queue = mock("MQ Queue")
8
+
9
+ @qobj = mock("Droid::BasicQueue Instance")
10
+ @qobj.stubs(:q).returns(@queue)
11
+ @qobj.stubs(:mq).returns(@mq)
12
+ @qobj.stubs(:ex).returns(@exchange)
13
+
14
+ @header = mock("amqp header", :headers => {})
15
+
16
+ @raw_message = '{"x":123,"y":"abc"}'
17
+
18
+ @res = Droid::Request.new(@qobj, @header, @raw_message)
19
+ end
20
+
21
+ it "allows access to response via symbols or strings in array access" do
22
+ @res['x'].should == 123
23
+ @res[:x].should == 123
24
+ @res['y'].should == 'abc'
25
+ @res[:y].should == 'abc'
26
+ end
27
+
28
+ it "calls ack on the header" do
29
+ @header.expects(:ack)
30
+ @res.ack
31
+ end
32
+
33
+ it "calls q on the qobj" do
34
+ @qobj.expects(:q)
35
+ @res.q
36
+ end
37
+
38
+ it "calls ex on the qobj" do
39
+ @qobj.expects(:ex)
40
+ @res.ex
41
+ end
42
+
43
+ it "calls mq on the qobj" do
44
+ @qobj.expects(:mq)
45
+ @res.mq
46
+ end
47
+ end
@@ -0,0 +1,12 @@
1
+ require 'rubygems'
2
+ require 'baconmocha'
3
+ require 'rspec'
4
+
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+
8
+ require 'droid'
9
+
10
+ Droid.log.level = Logger::FATAL
11
+
12
+ Bacon.summary_on_exit
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Utils' do
4
+ before do
5
+ end
6
+
7
+ it "parses a json message" do
8
+ Droid::Utils.parse_message('{"x":1,"y":2}').should == {'x' => 1, 'y' => 2}
9
+ end
10
+
11
+ it "parses custom headers and force integers on a few values" do
12
+ headers = {
13
+ :x => '1',
14
+ :y => '2',
15
+ :reply_to => 'q.random.reply',
16
+ :published_on => '12345',
17
+ :event_hash => 'x123'
18
+ }
19
+
20
+ h = Droid::Utils.parse_custom_headers(headers)
21
+
22
+ h.size.should == 6
23
+ h[:ttl].should == -1
24
+ h[:reply_to].should == 'q.random.reply'
25
+ h[:published_on].should == 12345
26
+ h[:event_hash].should == 'x123'
27
+ end
28
+
29
+ it "raises an exception if the data to format for publish is not a hash" do
30
+ lambda { Droid::Utils.format_publish('bad payload') }.should.raise Droid::BadPayload
31
+ end
32
+
33
+ it "generates a name for the instance" do
34
+ Socket.stubs(:gethostname).returns('deepblue.123')
35
+ Droid::Utils.generate_name_for_instance('woo').should == 'woo.deepblue.123'
36
+ end
37
+
38
+ it "generates queue name, really more like a generic identifier" do
39
+ Socket.stubs(:gethostname).returns('deepblue.123')
40
+ Droid::Utils.generate_queue('topic').should == "topic.deepblue.123.#{$$}"
41
+ Droid::Utils.generate_queue('topic', 'local').should == "topic.deepblue.123.local"
42
+ end
43
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'spec_helper'
2
+
3
+ Thread.new do
4
+ sleep 2
5
+ TCPServer.new('localhost', 20_001).accept.close
6
+ end
7
+
8
+ describe 'Connectivity' do
9
+ it "waits for the rabbitmq server to come up before opening the amqp connection" do
10
+ start = Time.now
11
+ Droid.wait_for_tcp_port('localhost', 20_001)
12
+ finish = Time.now
13
+ (finish - start).should > 1
14
+ (finish - start).should < 3
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: droid19
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 2
9
+ version: 1.0.2
10
+ platform: ruby
11
+ authors:
12
+ - Ricardo Chimal, Jr.
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-04-05 00:00:00 -07:00
18
+ default_executable: bleedq
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: baconmocha
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :development
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: json_pure
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 1
43
+ - 2
44
+ - 0
45
+ version: 1.2.0
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rest-client
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 1
58
+ - 2
59
+ - 0
60
+ version: 1.2.0
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: amqp
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - "="
70
+ - !ruby/object:Gem::Version
71
+ segments:
72
+ - 0
73
+ - 6
74
+ - 7
75
+ version: 0.6.7
76
+ type: :runtime
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: bunny
80
+ prerelease: false
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ~>
85
+ - !ruby/object:Gem::Version
86
+ segments:
87
+ - 0
88
+ - 6
89
+ - 0
90
+ version: 0.6.0
91
+ type: :runtime
92
+ version_requirements: *id005
93
+ - !ruby/object:Gem::Dependency
94
+ name: eventmachine_httpserver
95
+ prerelease: false
96
+ requirement: &id006 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - "="
100
+ - !ruby/object:Gem::Version
101
+ segments:
102
+ - 0
103
+ - 2
104
+ - 0
105
+ version: 0.2.0
106
+ type: :runtime
107
+ version_requirements: *id006
108
+ description: Easy to use AMQP Library with constructs for typical usage patterns
109
+ email: ricardo@heroku.com
110
+ executables:
111
+ - bleedq
112
+ extensions: []
113
+
114
+ extra_rdoc_files: []
115
+
116
+ files:
117
+ - Rakefile
118
+ - VERSION
119
+ - bin/bleedq
120
+ - droid.gemspec
121
+ - examples/async_reply.rb
122
+ - examples/heroku_async_reply.rb
123
+ - examples/sync.rb
124
+ - examples/worker.rb
125
+ - lib/droid.rb
126
+ - lib/droid/em.rb
127
+ - lib/droid/heroku.rb
128
+ - lib/droid/heroku/local_stats.rb
129
+ - lib/droid/heroku/logger_client.rb
130
+ - lib/droid/heroku/memcache_cluster.rb
131
+ - lib/droid/heroku/stats.rb
132
+ - lib/droid/json_server.rb
133
+ - lib/droid/monkey.rb
134
+ - lib/droid/publish.rb
135
+ - lib/droid/queue.rb
136
+ - lib/droid/request.rb
137
+ - lib/droid/sync.rb
138
+ - lib/droid/utilization.rb
139
+ - lib/droid/utils.rb
140
+ - lib/heroku_droid.rb
141
+ - lib/local_stats.rb
142
+ - lib/memcache_cluster.rb
143
+ - lib/stats.rb
144
+ - spec/publish_spec.rb
145
+ - spec/response_spec.rb
146
+ - spec/spec_helper.rb
147
+ - spec/utils_spec.rb
148
+ - spec/wait_for_port_spec.rb
149
+ has_rdoc: true
150
+ homepage: http://heroku.com
151
+ licenses: []
152
+
153
+ post_install_message:
154
+ rdoc_options: []
155
+
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ segments:
164
+ - 0
165
+ version: "0"
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ segments:
172
+ - 0
173
+ version: "0"
174
+ requirements: []
175
+
176
+ rubyforge_project:
177
+ rubygems_version: 1.3.7
178
+ signing_key:
179
+ specification_version: 3
180
+ summary: AMQP Wrapper Library
181
+ test_files:
182
+ - examples/async_reply.rb
183
+ - examples/heroku_async_reply.rb
184
+ - examples/sync.rb
185
+ - examples/worker.rb
186
+ - spec/publish_spec.rb
187
+ - spec/response_spec.rb
188
+ - spec/spec_helper.rb
189
+ - spec/utils_spec.rb
190
+ - spec/wait_for_port_spec.rb