fraggle 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,175 +0,0 @@
1
- require 'fraggle'
2
-
3
- class RecConn
4
- include Fraggle
5
-
6
- attr_reader :store, :recs
7
-
8
- def initialize
9
- super("1:1", :assemble => true)
10
- post_init
11
- @store = {}
12
- @recs = []
13
- end
14
-
15
- def get(path, sid=0, &blk)
16
- res = store.fetch(path) { fail("testing: no slot for #{path}") }
17
- blk.call(res)
18
- end
19
-
20
- def reconnect(host, port)
21
- @recs << [host, port]
22
- end
23
-
24
- def send_data(data)
25
- # do nothing
26
- end
27
- end
28
-
29
- class ReconnectTest < Test::Unit::TestCase
30
-
31
- Walk = 0
32
- Watch = 1
33
-
34
- attr_reader :c
35
-
36
- def setup
37
- @c = RecConn.new
38
- end
39
-
40
- def reply(to, path, value)
41
- res = Fraggle::Response.new
42
- res.tag = to
43
- res.flags = Fraggle::Response::Flag::VALID
44
- res.path = path
45
- res.value = value
46
- res.validate!
47
-
48
- c.receive_response(res)
49
- end
50
-
51
- def set(path, value)
52
- res = Fraggle::Response.new
53
- res.tag = 123
54
- res.flags = Fraggle::Response::Flag::VALID
55
- res.value = value
56
- res.validate!
57
-
58
- c.store[path] = res
59
- end
60
-
61
- def test_ignore_current
62
- assert_equal Hash.new, c.doozers
63
-
64
- set "/doozer/info/ABC/public-addr", "1:1"
65
- reply(Walk, "/doozer/slot/1", "ABC")
66
-
67
- assert_equal Hash.new, c.doozers
68
- end
69
-
70
- def test_add_other_slots_at_start
71
- set "/doozer/info/DEF/public-addr", "2:2"
72
- set "/doozer/info/GHI/public-addr", "3:3"
73
- reply(Walk, "/doozer/slot/2", "DEF")
74
- reply(Walk, "/doozer/slot/3", "GHI")
75
-
76
- exp = {
77
- "/doozer/slot/2" => "2:2",
78
- "/doozer/slot/3" => "3:3"
79
- }
80
-
81
- assert_equal exp, c.doozers
82
- end
83
-
84
- def test_add_new_slots_as_they_come
85
- set "/doozer/info/DEF/public-addr", "2:2"
86
- set "/doozer/info/GHI/public-addr", "3:3"
87
- reply(Watch, "/doozer/slot/2", "DEF")
88
- reply(Watch, "/doozer/slot/3", "GHI")
89
-
90
- exp = {
91
- "/doozer/slot/2" => "2:2",
92
- "/doozer/slot/3" => "3:3"
93
- }
94
-
95
- assert_equal exp, c.doozers
96
- end
97
-
98
- def test_del_slots_if_they_emptied
99
- set "/doozer/info/DEF/public-addr", "2:2"
100
- set "/doozer/info/GHI/public-addr", "3:3"
101
- reply(Walk, "/doozer/slot/2", "DEF")
102
- reply(Walk, "/doozer/slot/3", "GHI")
103
-
104
- # Del
105
- reply(Watch, "/doozer/slot/3", "")
106
-
107
- exp = {
108
- "/doozer/slot/2" => "2:2"
109
- }
110
-
111
- assert_equal exp, c.doozers
112
- end
113
-
114
- def test_raise_error_if_given_by_server
115
- res = Fraggle::Response.new
116
- res.tag = Walk
117
- res.flags = Fraggle::Response::Flag::VALID
118
- res.err_code = Fraggle::Response::Err::OTHER
119
- res.err_detail = "invalid glob"
120
-
121
- assert_raises Fraggle::AssemblyError do
122
- c.receive_response(res)
123
- end
124
- end
125
-
126
- def test_out_of_doozers
127
- assert_raises Fraggle::AssemblyError do
128
- c.unbind
129
- end
130
- end
131
-
132
- def test_first_reconnect_success
133
- set "/doozer/info/DEF/public-addr", "2:2"
134
- set "/doozer/info/GHI/public-addr", "3:3"
135
- reply(Walk, "/doozer/slot/2", "DEF")
136
- reply(Walk, "/doozer/slot/3", "GHI")
137
-
138
- c.unbind
139
- assert_equal 1, c.recs.length
140
-
141
- # The order in which the client try is non-detrministic because we're
142
- # shifting off a Hash.
143
- assert ["2:2", "3:3"].include?(c.addr)
144
- end
145
-
146
- def test_second_reconnect_success
147
- set "/doozer/info/DEF/public-addr", "2:2"
148
- set "/doozer/info/GHI/public-addr", "3:3"
149
- reply(Walk, "/doozer/slot/2", "DEF")
150
- reply(Walk, "/doozer/slot/3", "GHI")
151
-
152
- c.unbind
153
- c.unbind
154
- assert_equal 2, c.recs.length
155
-
156
- # The order in which the client try is non-detrministic because we're
157
- # shifting off a Hash.
158
- assert ["2:2", "3:3"].include?(c.addr)
159
- end
160
-
161
- def test_all_recconcts_fail
162
- set "/doozer/info/DEF/public-addr", "2:2"
163
- set "/doozer/info/GHI/public-addr", "3:3"
164
- reply(Walk, "/doozer/slot/2", "DEF")
165
- reply(Walk, "/doozer/slot/3", "GHI")
166
-
167
- c.unbind
168
- c.unbind
169
-
170
- assert_raises Fraggle::AssemblyError do
171
- c.unbind
172
- end
173
- end
174
-
175
- end