RingyDingy 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/lib/ringy_dingy.rb +2 -2
- data/lib/ringy_dingy/ring_server.rb +33 -21
- data/test/test_ring_server.rb +100 -0
- data/test/test_ringy_dingy.rb +2 -2
- metadata +3 -3
data/History.txt
CHANGED
data/lib/ringy_dingy.rb
CHANGED
@@ -21,7 +21,7 @@ $TESTING = defined? $TESTING
|
|
21
21
|
|
22
22
|
class RingyDingy
|
23
23
|
|
24
|
-
VERSION = '1.
|
24
|
+
VERSION = '1.2.0'
|
25
25
|
|
26
26
|
##
|
27
27
|
# Interval to check the RingServer for our registration information.
|
@@ -78,7 +78,7 @@ class RingyDingy
|
|
78
78
|
# RingServer can't be found or contacted, returns false.
|
79
79
|
|
80
80
|
def registered?
|
81
|
-
registrations = ring_server.read_all [:name,
|
81
|
+
registrations = ring_server.read_all [:name, @service, nil, @identifier]
|
82
82
|
registrations.any? { |registration| registration[2] == @object }
|
83
83
|
rescue DRb::DRbConnError
|
84
84
|
@ring_server = nil
|
@@ -48,33 +48,47 @@ class RingyDingy::RingServer
|
|
48
48
|
|
49
49
|
attr_reader :verbose
|
50
50
|
|
51
|
+
RF = Rinda::RingFinger.new
|
52
|
+
|
51
53
|
##
|
52
|
-
#
|
53
|
-
#
|
54
|
+
# Return a collection of all remote DRb services.
|
55
|
+
#
|
56
|
+
# Format:
|
57
|
+
#
|
58
|
+
# { Rinda::RingServer.__drburi => [ registration_tuple, ... ],
|
59
|
+
# ... }
|
54
60
|
|
55
|
-
def self.
|
61
|
+
def self.list_services
|
56
62
|
DRb.start_service unless DRb.primary_server
|
57
63
|
|
58
|
-
|
64
|
+
services = {}
|
59
65
|
|
60
|
-
|
61
|
-
|
62
|
-
rf.lookup_ring do |ts|
|
63
|
-
found_services = ts.read_all [:name, nil, DRbObject, nil]
|
64
|
-
found_services.each do |service|
|
65
|
-
# #hash and #eql? will not always work
|
66
|
-
ref = "#{service[2].__drburi}:#{service[2].__drbref}"
|
67
|
-
services[ts.__drburi][ref] = service
|
68
|
-
end
|
66
|
+
RF.lookup_ring do |ts|
|
67
|
+
services[ts.__drburi] = ts.read_all [:name, nil, DRbObject, nil]
|
69
68
|
end
|
70
69
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
return services
|
71
|
+
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# Print all available services on all available Rinda::RingServers to
|
75
|
+
# stdout.
|
76
|
+
|
77
|
+
def self.print_services
|
78
|
+
out = []
|
79
|
+
list_services.each do |ring_server, services|
|
80
|
+
out << "Services on #{ring_server}"
|
81
|
+
|
82
|
+
values = services.sort_by { |s| [s[2].__drburi, -s[2].__drbref] }
|
83
|
+
|
84
|
+
values.each do |s|
|
85
|
+
out << "\t%p, %p\n\t\tURI: %s ref: %d" %
|
75
86
|
[s[1], s[3], s[2].__drburi, s[2].__drbref]
|
87
|
+
out << nil
|
76
88
|
end
|
77
89
|
end
|
90
|
+
|
91
|
+
puts out.join("\n")
|
78
92
|
end
|
79
93
|
|
80
94
|
##
|
@@ -84,9 +98,7 @@ class RingyDingy::RingServer
|
|
84
98
|
def self.set_verbose(boolean)
|
85
99
|
DRb.start_service unless DRb.primary_server
|
86
100
|
|
87
|
-
|
88
|
-
|
89
|
-
rf.lookup_ring do |ts|
|
101
|
+
RF.lookup_ring do |ts|
|
90
102
|
ts.write [:RingyDingy, :verbose, boolean]
|
91
103
|
end
|
92
104
|
end
|
@@ -150,7 +162,7 @@ class RingyDingy::RingServer
|
|
150
162
|
options = process_args args
|
151
163
|
|
152
164
|
if options.include? :List then
|
153
|
-
|
165
|
+
print_services
|
154
166
|
exit
|
155
167
|
elsif options.include? :SetVerbose then
|
156
168
|
set_verbose options[:SetVerbose]
|
data/test/test_ring_server.rb
CHANGED
@@ -9,19 +9,119 @@ require 'ringy_dingy/ring_server'
|
|
9
9
|
|
10
10
|
DRb.start_service
|
11
11
|
|
12
|
+
class FakeTupleSpace
|
13
|
+
|
14
|
+
attr_writer :read_all
|
15
|
+
attr_accessor :__drburi
|
16
|
+
|
17
|
+
def read_all(template)
|
18
|
+
@read_all
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
12
23
|
class RingyDingy::RingServer
|
24
|
+
|
13
25
|
attr_accessor :expirations, :registrations, :ts
|
14
26
|
attr_reader :verbose
|
27
|
+
|
28
|
+
remove_const :RF
|
29
|
+
|
30
|
+
RF = Object.new
|
31
|
+
|
32
|
+
def RF.lookup_ring
|
33
|
+
ts1 = FakeTupleSpace.new
|
34
|
+
ts1.__drburi = 'druby://localhost:10000'
|
35
|
+
ts1.read_all = TestRingServer::SERVICES[ts1.__drburi]
|
36
|
+
yield ts1
|
37
|
+
|
38
|
+
ts2 = FakeTupleSpace.new
|
39
|
+
ts2.__drburi = 'druby://localhost:10002'
|
40
|
+
ts2.read_all = TestRingServer::SERVICES[ts2.__drburi]
|
41
|
+
yield ts2 # IPv4
|
42
|
+
yield ts2 # IPv6
|
43
|
+
end
|
44
|
+
|
15
45
|
end
|
16
46
|
|
17
47
|
class TestRingServer < Test::Unit::TestCase
|
18
48
|
|
49
|
+
OBJS = [Object.new, Object.new, Object.new]
|
50
|
+
|
51
|
+
OBJS.each_with_index { |obj, i| const_set "OBJ#{i}", obj }
|
52
|
+
|
53
|
+
SERVICES = {
|
54
|
+
'druby://localhost:10000' => [
|
55
|
+
[:name, :RingyDingy, DRbObject.new(OBJ0, 'druby://localhost:10001'),
|
56
|
+
'localhost_9607_obj0'],
|
57
|
+
[:name, :RingyDingy, DRbObject.new(OBJ1, 'druby://localhost:10001'),
|
58
|
+
'localhost_9607_obj1'],
|
59
|
+
],
|
60
|
+
'druby://localhost:10002' => [
|
61
|
+
[:name, :RingyDingy, DRbObject.new(OBJ2, 'druby://localhost:10003'),
|
62
|
+
'localhost_9607_obj2'],
|
63
|
+
],
|
64
|
+
}
|
65
|
+
|
19
66
|
def setup
|
20
67
|
util_capture do
|
21
68
|
@rs = RingyDingy::RingServer.new :Verbose => true
|
22
69
|
end
|
23
70
|
end
|
24
71
|
|
72
|
+
def test_self_list_services
|
73
|
+
assert_equal SERVICES, RingyDingy::RingServer.list_services
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_self_print_services
|
77
|
+
rf = Object.new
|
78
|
+
|
79
|
+
def rf.lookup_ring
|
80
|
+
fts = FakeTupleSpace.new
|
81
|
+
fts.__drburi = 'druby://localhost:10000'
|
82
|
+
fts.read_all = [
|
83
|
+
[:name, :RingyDingy, DRbObject.new(OBJ0, 'druby://localhost:10001'),
|
84
|
+
'localhost_9607_obj0'],
|
85
|
+
[:name, :RingyDingy, DRbObject.new(OBJ1, 'druby://localhost:10001'),
|
86
|
+
'localhost_9607_obj1'],
|
87
|
+
]
|
88
|
+
yield fts
|
89
|
+
fts = FakeTupleSpace.new
|
90
|
+
fts.__drburi = 'druby://localhost:10002'
|
91
|
+
fts.read_all = [
|
92
|
+
[:name, :RingyDingy, DRbObject.new(OBJ2, 'druby://localhost:10003'),
|
93
|
+
'localhost_9607_obj2'],
|
94
|
+
]
|
95
|
+
yield fts
|
96
|
+
end
|
97
|
+
|
98
|
+
RingyDingy::RingServer.send :remove_const, :RF
|
99
|
+
RingyDingy::RingServer.send :const_set, :RF, rf
|
100
|
+
|
101
|
+
out, err = util_capture do
|
102
|
+
RingyDingy::RingServer.print_services
|
103
|
+
end
|
104
|
+
|
105
|
+
expected = <<-EOF
|
106
|
+
Services on druby://localhost:10000
|
107
|
+
\t:RingyDingy, "localhost_9607_obj0"
|
108
|
+
\t\tURI: druby://localhost:10001 ref: #{OBJ0.object_id}
|
109
|
+
|
110
|
+
\t:RingyDingy, "localhost_9607_obj1"
|
111
|
+
\t\tURI: druby://localhost:10001 ref: #{OBJ1.object_id}
|
112
|
+
|
113
|
+
Services on druby://localhost:10002
|
114
|
+
\t:RingyDingy, "localhost_9607_obj2"
|
115
|
+
\t\tURI: druby://localhost:10003 ref: #{OBJ2.object_id}
|
116
|
+
EOF
|
117
|
+
|
118
|
+
assert_equal expected, out.string
|
119
|
+
assert_equal '', err.string
|
120
|
+
ensure
|
121
|
+
RingyDingy::RingServer.send :remove_const, :RF
|
122
|
+
RingyDingy::RingServer.send :const_set, :RF, Rinda::RingFinger
|
123
|
+
end
|
124
|
+
|
25
125
|
def test_initialize_verbose_daemon
|
26
126
|
rs = RingyDingy::RingServer.new :Verbose => true, :Daemon => true
|
27
127
|
assert_equal false, rs.verbose
|
data/test/test_ringy_dingy.rb
CHANGED
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: RingyDingy
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2006-
|
6
|
+
version: 1.2.0
|
7
|
+
date: 2006-11-04 00:00:00 -08:00
|
8
8
|
summary: RingyDingy is a little boat that keeps your DRb service afloat!
|
9
9
|
require_paths:
|
10
10
|
- lib
|