jason-o-matic-deep_test 1.2.2.11 → 1.2.2.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/deep_test.rb +1 -1
  2. metadata +11 -4
  3. data/lib/deep_test/drbfire.rb +0 -290
data/lib/deep_test.rb CHANGED
@@ -39,6 +39,7 @@ require "thread"
39
39
  require "socket"
40
40
  require "webrick"
41
41
  require "timeout"
42
+ require "drb/drbfire"
42
43
 
43
44
  require File.dirname(__FILE__) + "/deep_test/extensions/object_extension"
44
45
  require File.dirname(__FILE__) + "/deep_test/extensions/drb_extension"
@@ -89,5 +90,4 @@ require File.dirname(__FILE__) + "/deep_test/test"
89
90
  require File.dirname(__FILE__) + "/deep_test/ui/console"
90
91
  require File.dirname(__FILE__) + "/deep_test/ui/null"
91
92
 
92
- require File.expand_path(File.dirname(__FILE__) + "/deep_test/drbfire.rb")
93
93
  require File.expand_path(File.dirname(__FILE__) + "/deep_test/test/collector/rails_ordered_object_space.rb")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jason-o-matic-deep_test
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.2.11
4
+ version: 1.2.2.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - anonymous z, Dan Manges, David Vollbracht
@@ -11,8 +11,16 @@ cert_chain: []
11
11
 
12
12
  date: 2008-10-11 00:00:00 -07:00
13
13
  default_executable: deep_test
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ntalbott-drbfire
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.1.0
23
+ version:
16
24
  description: DeepTest runs tests in multiple processes.
17
25
  email: daniel.manges@gmail.com
18
26
  executables:
@@ -24,7 +32,6 @@ extra_rdoc_files:
24
32
  - CHANGELOG
25
33
  files:
26
34
  - lib/deep_test/test/collector/rails_ordered_object_space.rb
27
- - lib/deep_test/drbfire.rb
28
35
  - lib/deep_test/database/mysql_setup_listener.rb
29
36
  - lib/deep_test/database/setup_listener.rb
30
37
  - lib/deep_test/deadlock_detector.rb
@@ -1,290 +0,0 @@
1
- # :include:README
2
- #--
3
- # Author:: Nathaniel Talbott.
4
- # Copyright:: Copyright (c) 2004 Nathaniel Talbott. All rights reserved.
5
- # License:: Ruby license.
6
-
7
- require 'delegate'
8
- require 'drb'
9
- require 'timeout'
10
-
11
- # = DRb Firewall Protocol
12
- #
13
- # == Prerequisites
14
- #
15
- # It is assumed that you already know how to use DRb; if you don't
16
- # you'll need to go read up on it and understand the basics of how it
17
- # works before using DRbFire. DRbFire actually wraps the standard
18
- # protocols that DRb uses, so generally anything that applies to them
19
- # applies to DRbFire.
20
- #
21
- #
22
- # == Basic Usage
23
- #
24
- # Using DRbFire is quite simple, and can be summed up in four steps:
25
- #
26
- # 1. Start with <tt>require 'drb/drbfire'</tt>.
27
- #
28
- # 2. Use <tt>drbfire://</tt> instead of <tt>druby://</tt> when
29
- # specifying the server url.
30
- #
31
- # 3. When calling <tt>DRb.start_service</tt> on the client, specify
32
- # the server's uri as the uri (as opposed to the normal usage, which
33
- # is to specify *no* uri).
34
- #
35
- # 4. Specify the right configuration when calling
36
- # <tt>DRb.start_service</tt>, specifically the role to use:
37
- # On the server:: <tt>DRbFire::ROLE => DRbFire::SERVER</tt>
38
- # On the client:: <tt>DRbFire::ROLE => DRbFire::CLIENT</tt>
39
- #
40
- # So a simple server would look like:
41
- #
42
- # require 'drb/drbfire'
43
- #
44
- # front = ['a', 'b', 'c']
45
- # DRb.start_service('drbfire://some.server.com:5555', front, DRbFire::ROLE => DRbFire::SERVER)
46
- # DRb.thread.join
47
- #
48
- # And a simple client:
49
- #
50
- # require 'drb/drbfire'
51
- #
52
- # DRb.start_service('drbfire://some.server.com:5555', nil, DRbFire::ROLE => DRbFire::CLIENT)
53
- # DRbObject.new(nil, 'drbfire://some.server.com:5555').each do |e|
54
- # p e
55
- # end
56
- #
57
- #
58
- # == Advanced Usage
59
- #
60
- # You can do some more interesting tricks with DRbFire, too:
61
- #
62
- # <b>Using SSL</b>:: To do this, you have to set the delegate in the
63
- # configuration (on both the server and the client) using
64
- # <tt>DRbFire::DELEGATE => DRb::DRbSSLSocket</tt>. Other
65
- # DRb protcols may also work as delegates, but only the
66
- # SSL protocol is tested.
67
- #
68
- #
69
- # == Caveats
70
- #
71
- # * DRbFire uses a 32-bit id space, meaning ids will wrap after
72
- # approximately ~4.2 billion connections. If that's a non-theoretical
73
- # problem for you, and you tell me about it, I'll figure out some
74
- # way to fix it. It'd be worth it just to find out that DRbFire is
75
- # being used in such a mind-blowing fashion.
76
- #
77
- # * You're limited to one _server_ per process at this point. You can
78
- # have (and handle) as many clients as you want (well, ok, so I just
79
- # said there's really a limit somewhere around 4.2 billion. I'm
80
- # trying to simplify here). Again, this is possible to deal with,
81
- # but not something that I've needed at this point and not something
82
- # I'm guessing is terribly common. Let me know if it's a problem for
83
- # you.
84
-
85
-
86
- module DRbFire
87
- # The current version.
88
- VERSION = [0, 1, 0]
89
-
90
- # The role configuration key.
91
- ROLE = "#{self}::ROLE"
92
-
93
- # The server role configuration value.
94
- SERVER = "#{self}::SERVER"
95
-
96
- # The client role configuration value.
97
- CLIENT = "#{self}::CLIENT"
98
-
99
- # The delegate configuration key.
100
- DELEGATE = "#{self}::DELEGATE"
101
-
102
- # Miscellaneous constants
103
- SCHEME = "drbfire" #:nodoc:
104
- ID_FORMAT = "N" #:nodoc:
105
- INCOMING_CONN = "1" #:nodoc:
106
- OUTGOING_CONN = "2" #:nodoc:
107
- SIGNAL_CONN = "3" #:nodoc:
108
-
109
- class Protocol < SimpleDelegator #nodoc:all
110
- class ClientServer
111
- attr_reader :signal_id
112
-
113
- def initialize(uri, config)
114
- @uri = uri
115
- @config = config
116
- @connection = Protocol.open(uri, config, SIGNAL_CONN)
117
- @signal_id = @connection.read_signal_id
118
- end
119
-
120
- def uri
121
- "#{@uri}?#{@signal_id}"
122
- end
123
-
124
- def accept
125
- @connection.stream.read(1)
126
- connection = Protocol.open(@uri, @config, OUTGOING_CONN)
127
- connection.stream.write([@signal_id].pack(ID_FORMAT))
128
- connection
129
- end
130
-
131
- def close
132
- @connection.close
133
- end
134
- end
135
-
136
- class ClientServerProxy
137
- def initialize(connection, id)
138
- @connection = connection
139
- @id = id
140
- @queue = Queue.new
141
- end
142
-
143
- def write_signal_id
144
- @connection.stream.write([@id].pack(ID_FORMAT))
145
- end
146
-
147
- def push(connection)
148
- @queue.push(connection)
149
- end
150
-
151
- def open
152
- @connection.stream.write("0")
153
- timeout(20) do
154
- @queue.pop
155
- end
156
- rescue TimeoutError
157
- raise DRb::DRbConnError, "Unable to get a client connection."
158
- end
159
- end
160
-
161
- class << self
162
- def open_server(uri, config)
163
- if(server?(config))
164
- @client_servers ||= {}
165
-
166
- puts "OPEN SERVER1 #{uri}"
167
-
168
- sock = delegate(config).open_server(uri, config)
169
- scheme = sock.uri.match(/^(.*):\/\//)[1]
170
- drbfire_uri = sock.uri.sub(scheme, SCHEME)
171
- puts "OPEN SERVER2 #{drbfire_uri}\n#{caller.join("\n")}"
172
- new(drbfire_uri, sock)
173
-
174
- # new(uri, delegate(config).open_server(uri, config))
175
- else
176
- ClientServer.new(uri, config)
177
- end
178
- end
179
-
180
- def open(uri, config, type=INCOMING_CONN)
181
- unless(server?(config))
182
- connection = new(uri, delegate(config).open(uri, config))
183
- connection.stream.write(type)
184
- connection
185
- else
186
- @client_servers[parse_uri(uri).last.to_i].open
187
- end
188
- end
189
-
190
- def add_client_connection(id, connection)
191
- if((c = @client_servers[id]))
192
- c.push(connection)
193
- else
194
- end
195
- end
196
-
197
- def add_client_server(id, server)
198
- @client_servers[id] = server
199
- end
200
-
201
- def parse_uri(uri)
202
- if(%r{^#{SCHEME}://([^:]+):(\d+)(?:\?(.+))?$} =~ uri)
203
- [$1, $2.to_i, $3]
204
- else
205
- raise DRb::DRbBadScheme, uri unless(/^#{SCHEME}/ =~ uri)
206
- raise DRb::DRbBadURI, "Can't parse uri: #{uri}"
207
- end
208
- end
209
-
210
- def uri_option(uri, config)
211
- host, port, option = parse_uri(uri)
212
- return "#{SCHEME}://#{host}:#{port}", option
213
- end
214
-
215
- private
216
-
217
- def server?(config)
218
- raise "Invalid configuration" unless(config.include?(ROLE))
219
- config[ROLE] == SERVER
220
- end
221
-
222
- def delegate(config)
223
- unless(defined?(@delegate))
224
- @delegate = Class.new(config[DELEGATE] || DRb::DRbTCPSocket) do
225
- class << self
226
- attr_writer :delegate
227
-
228
- def parse_uri(uri)
229
- @delegate.parse_uri(uri)
230
- end
231
-
232
- def uri_option(uri, config)
233
- @delegate.uri_option(uri, config)
234
- end
235
- end
236
- end
237
- @delegate.delegate = self
238
- end
239
- @delegate
240
- end
241
- end
242
-
243
- attr_reader :signal_id, :uri
244
-
245
- def initialize(uri, delegate)
246
- super(delegate)
247
- @uri = uri
248
- @id = 0
249
- @id_mutex = Mutex.new
250
- end
251
-
252
- def accept
253
- while(__getobj__.instance_eval{@socket})
254
- begin
255
- connection = self.class.new(nil, __getobj__.accept)
256
- rescue IOError
257
- return nil
258
- end
259
- begin
260
- type = connection.stream.read(1)
261
- rescue
262
- next
263
- end
264
- case type
265
- when INCOMING_CONN
266
- return connection
267
- when OUTGOING_CONN
268
- self.class.add_client_connection(connection.read_signal_id, connection)
269
- next
270
- when SIGNAL_CONN
271
- new_id = nil
272
- @id_mutex.synchronize do
273
- new_id = (@id += 1)
274
- end
275
- client_server = ClientServerProxy.new(connection, new_id)
276
- self.class.add_client_server(new_id, client_server)
277
- client_server.write_signal_id
278
- next
279
- else
280
- raise "Invalid type #{type}"
281
- end
282
- end
283
- end
284
-
285
- def read_signal_id
286
- stream.read(4).unpack(ID_FORMAT).first
287
- end
288
- end
289
- end
290
- DRb::DRbProtocol.add_protocol(DRbFire::Protocol)