jason-o-matic-deep_test 1.2.2.11 → 1.2.2.12
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.
- data/lib/deep_test.rb +1 -1
- metadata +11 -4
- 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.
|
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
|
data/lib/deep_test/drbfire.rb
DELETED
@@ -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)
|