stark 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,451 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (0.8.0)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+ require 'thrift'
8
+ require 'profile_types'
9
+
10
+ module UserStorage
11
+ class Client
12
+ include ::Thrift::Client
13
+
14
+ def store(xuser)
15
+ send_store(xuser)
16
+ recv_store()
17
+ end
18
+
19
+ def send_store(xuser)
20
+ send_message('store', Store_args, :xuser => xuser)
21
+ end
22
+
23
+ def recv_store()
24
+ result = receive_message(Store_result)
25
+ return
26
+ end
27
+
28
+ def retrieve(xuid)
29
+ send_retrieve(xuid)
30
+ return recv_retrieve()
31
+ end
32
+
33
+ def send_retrieve(xuid)
34
+ send_message('retrieve', Retrieve_args, :xuid => xuid)
35
+ end
36
+
37
+ def recv_retrieve()
38
+ result = receive_message(Retrieve_result)
39
+ return result.success unless result.success.nil?
40
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'retrieve failed: unknown result')
41
+ end
42
+
43
+ def set_map(m)
44
+ send_set_map(m)
45
+ recv_set_map()
46
+ end
47
+
48
+ def send_set_map(m)
49
+ send_message('set_map', Set_map_args, :m => m)
50
+ end
51
+
52
+ def recv_set_map()
53
+ result = receive_message(Set_map_result)
54
+ return
55
+ end
56
+
57
+ def last_map()
58
+ send_last_map()
59
+ return recv_last_map()
60
+ end
61
+
62
+ def send_last_map()
63
+ send_message('last_map', Last_map_args)
64
+ end
65
+
66
+ def recv_last_map()
67
+ result = receive_message(Last_map_result)
68
+ return result.success unless result.success.nil?
69
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'last_map failed: unknown result')
70
+ end
71
+
72
+ def set_list(l)
73
+ send_set_list(l)
74
+ recv_set_list()
75
+ end
76
+
77
+ def send_set_list(l)
78
+ send_message('set_list', Set_list_args, :l => l)
79
+ end
80
+
81
+ def recv_set_list()
82
+ result = receive_message(Set_list_result)
83
+ return
84
+ end
85
+
86
+ def last_list()
87
+ send_last_list()
88
+ return recv_last_list()
89
+ end
90
+
91
+ def send_last_list()
92
+ send_message('last_list', Last_list_args)
93
+ end
94
+
95
+ def recv_last_list()
96
+ result = receive_message(Last_list_result)
97
+ return result.success unless result.success.nil?
98
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'last_list failed: unknown result')
99
+ end
100
+
101
+ def set_status(s)
102
+ send_set_status(s)
103
+ recv_set_status()
104
+ end
105
+
106
+ def send_set_status(s)
107
+ send_message('set_status', Set_status_args, :s => s)
108
+ end
109
+
110
+ def recv_set_status()
111
+ result = receive_message(Set_status_result)
112
+ return
113
+ end
114
+
115
+ def last_status()
116
+ send_last_status()
117
+ return recv_last_status()
118
+ end
119
+
120
+ def send_last_status()
121
+ send_message('last_status', Last_status_args)
122
+ end
123
+
124
+ def recv_last_status()
125
+ result = receive_message(Last_status_result)
126
+ return result.success unless result.success.nil?
127
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'last_status failed: unknown result')
128
+ end
129
+
130
+ end
131
+
132
+ class Processor
133
+ include ::Thrift::Processor
134
+
135
+ def process_store(seqid, iprot, oprot)
136
+ args = read_args(iprot, Store_args)
137
+ result = Store_result.new()
138
+ @handler.store(args.xuser)
139
+ write_result(result, oprot, 'store', seqid)
140
+ end
141
+
142
+ def process_retrieve(seqid, iprot, oprot)
143
+ args = read_args(iprot, Retrieve_args)
144
+ result = Retrieve_result.new()
145
+ result.success = @handler.retrieve(args.xuid)
146
+ write_result(result, oprot, 'retrieve', seqid)
147
+ end
148
+
149
+ def process_set_map(seqid, iprot, oprot)
150
+ args = read_args(iprot, Set_map_args)
151
+ result = Set_map_result.new()
152
+ @handler.set_map(args.m)
153
+ write_result(result, oprot, 'set_map', seqid)
154
+ end
155
+
156
+ def process_last_map(seqid, iprot, oprot)
157
+ args = read_args(iprot, Last_map_args)
158
+ result = Last_map_result.new()
159
+ result.success = @handler.last_map()
160
+ write_result(result, oprot, 'last_map', seqid)
161
+ end
162
+
163
+ def process_set_list(seqid, iprot, oprot)
164
+ args = read_args(iprot, Set_list_args)
165
+ result = Set_list_result.new()
166
+ @handler.set_list(args.l)
167
+ write_result(result, oprot, 'set_list', seqid)
168
+ end
169
+
170
+ def process_last_list(seqid, iprot, oprot)
171
+ args = read_args(iprot, Last_list_args)
172
+ result = Last_list_result.new()
173
+ result.success = @handler.last_list()
174
+ write_result(result, oprot, 'last_list', seqid)
175
+ end
176
+
177
+ def process_set_status(seqid, iprot, oprot)
178
+ args = read_args(iprot, Set_status_args)
179
+ result = Set_status_result.new()
180
+ @handler.set_status(args.s)
181
+ write_result(result, oprot, 'set_status', seqid)
182
+ end
183
+
184
+ def process_last_status(seqid, iprot, oprot)
185
+ args = read_args(iprot, Last_status_args)
186
+ result = Last_status_result.new()
187
+ result.success = @handler.last_status()
188
+ write_result(result, oprot, 'last_status', seqid)
189
+ end
190
+
191
+ end
192
+
193
+ # HELPER FUNCTIONS AND STRUCTURES
194
+
195
+ class Store_args
196
+ include ::Thrift::Struct, ::Thrift::Struct_Union
197
+ XUSER = 1
198
+
199
+ FIELDS = {
200
+ XUSER => {:type => ::Thrift::Types::STRUCT, :name => 'xuser', :class => UserProfile}
201
+ }
202
+
203
+ def struct_fields; FIELDS; end
204
+
205
+ def validate
206
+ end
207
+
208
+ ::Thrift::Struct.generate_accessors self
209
+ end
210
+
211
+ class Store_result
212
+ include ::Thrift::Struct, ::Thrift::Struct_Union
213
+
214
+ FIELDS = {
215
+
216
+ }
217
+
218
+ def struct_fields; FIELDS; end
219
+
220
+ def validate
221
+ end
222
+
223
+ ::Thrift::Struct.generate_accessors self
224
+ end
225
+
226
+ class Retrieve_args
227
+ include ::Thrift::Struct, ::Thrift::Struct_Union
228
+ XUID = 1
229
+
230
+ FIELDS = {
231
+ XUID => {:type => ::Thrift::Types::I32, :name => 'xuid'}
232
+ }
233
+
234
+ def struct_fields; FIELDS; end
235
+
236
+ def validate
237
+ end
238
+
239
+ ::Thrift::Struct.generate_accessors self
240
+ end
241
+
242
+ class Retrieve_result
243
+ include ::Thrift::Struct, ::Thrift::Struct_Union
244
+ SUCCESS = 0
245
+
246
+ FIELDS = {
247
+ SUCCESS => {:type => ::Thrift::Types::STRUCT, :name => 'success', :class => UserProfile}
248
+ }
249
+
250
+ def struct_fields; FIELDS; end
251
+
252
+ def validate
253
+ end
254
+
255
+ ::Thrift::Struct.generate_accessors self
256
+ end
257
+
258
+ class Set_map_args
259
+ include ::Thrift::Struct, ::Thrift::Struct_Union
260
+ M = 1
261
+
262
+ FIELDS = {
263
+ M => {:type => ::Thrift::Types::MAP, :name => 'm', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}}
264
+ }
265
+
266
+ def struct_fields; FIELDS; end
267
+
268
+ def validate
269
+ end
270
+
271
+ ::Thrift::Struct.generate_accessors self
272
+ end
273
+
274
+ class Set_map_result
275
+ include ::Thrift::Struct, ::Thrift::Struct_Union
276
+
277
+ FIELDS = {
278
+
279
+ }
280
+
281
+ def struct_fields; FIELDS; end
282
+
283
+ def validate
284
+ end
285
+
286
+ ::Thrift::Struct.generate_accessors self
287
+ end
288
+
289
+ class Last_map_args
290
+ include ::Thrift::Struct, ::Thrift::Struct_Union
291
+
292
+ FIELDS = {
293
+
294
+ }
295
+
296
+ def struct_fields; FIELDS; end
297
+
298
+ def validate
299
+ end
300
+
301
+ ::Thrift::Struct.generate_accessors self
302
+ end
303
+
304
+ class Last_map_result
305
+ include ::Thrift::Struct, ::Thrift::Struct_Union
306
+ SUCCESS = 0
307
+
308
+ FIELDS = {
309
+ SUCCESS => {:type => ::Thrift::Types::MAP, :name => 'success', :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::STRING}}
310
+ }
311
+
312
+ def struct_fields; FIELDS; end
313
+
314
+ def validate
315
+ end
316
+
317
+ ::Thrift::Struct.generate_accessors self
318
+ end
319
+
320
+ class Set_list_args
321
+ include ::Thrift::Struct, ::Thrift::Struct_Union
322
+ L = 1
323
+
324
+ FIELDS = {
325
+ L => {:type => ::Thrift::Types::LIST, :name => 'l', :element => {:type => ::Thrift::Types::STRING}}
326
+ }
327
+
328
+ def struct_fields; FIELDS; end
329
+
330
+ def validate
331
+ end
332
+
333
+ ::Thrift::Struct.generate_accessors self
334
+ end
335
+
336
+ class Set_list_result
337
+ include ::Thrift::Struct, ::Thrift::Struct_Union
338
+
339
+ FIELDS = {
340
+
341
+ }
342
+
343
+ def struct_fields; FIELDS; end
344
+
345
+ def validate
346
+ end
347
+
348
+ ::Thrift::Struct.generate_accessors self
349
+ end
350
+
351
+ class Last_list_args
352
+ include ::Thrift::Struct, ::Thrift::Struct_Union
353
+
354
+ FIELDS = {
355
+
356
+ }
357
+
358
+ def struct_fields; FIELDS; end
359
+
360
+ def validate
361
+ end
362
+
363
+ ::Thrift::Struct.generate_accessors self
364
+ end
365
+
366
+ class Last_list_result
367
+ include ::Thrift::Struct, ::Thrift::Struct_Union
368
+ SUCCESS = 0
369
+
370
+ FIELDS = {
371
+ SUCCESS => {:type => ::Thrift::Types::LIST, :name => 'success', :element => {:type => ::Thrift::Types::STRING}}
372
+ }
373
+
374
+ def struct_fields; FIELDS; end
375
+
376
+ def validate
377
+ end
378
+
379
+ ::Thrift::Struct.generate_accessors self
380
+ end
381
+
382
+ class Set_status_args
383
+ include ::Thrift::Struct, ::Thrift::Struct_Union
384
+ S = 1
385
+
386
+ FIELDS = {
387
+ S => {:type => ::Thrift::Types::I32, :name => 's', :enum_class => Status}
388
+ }
389
+
390
+ def struct_fields; FIELDS; end
391
+
392
+ def validate
393
+ unless @s.nil? || Status::VALID_VALUES.include?(@s)
394
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field s!')
395
+ end
396
+ end
397
+
398
+ ::Thrift::Struct.generate_accessors self
399
+ end
400
+
401
+ class Set_status_result
402
+ include ::Thrift::Struct, ::Thrift::Struct_Union
403
+
404
+ FIELDS = {
405
+
406
+ }
407
+
408
+ def struct_fields; FIELDS; end
409
+
410
+ def validate
411
+ end
412
+
413
+ ::Thrift::Struct.generate_accessors self
414
+ end
415
+
416
+ class Last_status_args
417
+ include ::Thrift::Struct, ::Thrift::Struct_Union
418
+
419
+ FIELDS = {
420
+
421
+ }
422
+
423
+ def struct_fields; FIELDS; end
424
+
425
+ def validate
426
+ end
427
+
428
+ ::Thrift::Struct.generate_accessors self
429
+ end
430
+
431
+ class Last_status_result
432
+ include ::Thrift::Struct, ::Thrift::Struct_Union
433
+ SUCCESS = 0
434
+
435
+ FIELDS = {
436
+ SUCCESS => {:type => ::Thrift::Types::I32, :name => 'success', :enum_class => Status}
437
+ }
438
+
439
+ def struct_fields; FIELDS; end
440
+
441
+ def validate
442
+ unless @success.nil? || Status::VALID_VALUES.include?(@success)
443
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field success!')
444
+ end
445
+ end
446
+
447
+ ::Thrift::Struct.generate_accessors self
448
+ end
449
+
450
+ end
451
+
@@ -0,0 +1,24 @@
1
+ struct UserProfile {
2
+ 1: i32 uid,
3
+ 2: string name,
4
+ 3: string blurb
5
+ }
6
+
7
+ enum Status {
8
+ ON
9
+ OFF
10
+ DEAD
11
+ ALIVE
12
+ }
13
+
14
+ service UserStorage {
15
+ void store(1: UserProfile xuser),
16
+ UserProfile retrieve(1: i32 xuid),
17
+ void set_map(1: map<string, string> m),
18
+ map<string, string> last_map(),
19
+ void set_list(1: list<string> l),
20
+ list<string> last_list(),
21
+ void set_status(1: Status s),
22
+ Status last_status()
23
+ }
24
+
@@ -0,0 +1,184 @@
1
+ require 'test/unit'
2
+
3
+ require 'stark'
4
+
5
+ require 'rubygems'
6
+ require 'thrift'
7
+
8
+ $: << "test/legacy_profile"
9
+
10
+ require 'user_storage'
11
+
12
+ class TestClient < Test::Unit::TestCase
13
+ def setup
14
+ @client_t, @server_t = Stark.pipe_transport
15
+ @client_p = Thrift::BinaryProtocol.new @client_t
16
+ @server_p = Thrift::BinaryProtocol.new @server_t
17
+
18
+ @n = Module.new
19
+ Stark.materialize "test/profile.thrift", @n
20
+
21
+ @client = @n::UserStorage::Client.new @client_p, @client_p
22
+ @handler = Handler.new
23
+ @server = UserStorage::Processor.new @handler
24
+ end
25
+
26
+ def teardown
27
+ @client_t.close
28
+ @server_t.close
29
+ end
30
+
31
+ class Handler
32
+ def initialize
33
+ @users = {}
34
+ @last_map = nil
35
+ @last_list = nil
36
+ @last_status = nil
37
+ end
38
+
39
+ attr_accessor :last_map, :last_list, :last_status
40
+
41
+ def store(obj)
42
+ @users[obj.uid] = obj
43
+ end
44
+
45
+ def retrieve(id)
46
+ @users[id]
47
+ end
48
+
49
+ def set_map(m)
50
+ @last_map = m
51
+ end
52
+
53
+ def set_list(l)
54
+ @last_list = l
55
+ end
56
+
57
+ def set_status(s)
58
+ @last_status = s
59
+ end
60
+ end
61
+
62
+ def test_store_and_retrieve
63
+ st = Thread.new do
64
+ @server.process @server_p, @server_p
65
+ end
66
+
67
+ xuser = @n::UserProfile.new 'uid' => 0, 'name' => 'root', 'blurb' => 'god'
68
+
69
+ @client.store xuser
70
+
71
+ st.join
72
+
73
+ st = Thread.new do
74
+ @server.process @server_p, @server_p
75
+ end
76
+
77
+ obj = @client.retrieve 0
78
+
79
+ st.join
80
+
81
+ assert_equal 0, obj.uid
82
+ assert_equal "root", obj.name
83
+ assert_equal "god", obj.blurb
84
+ end
85
+
86
+ def test_set_map
87
+ st = Thread.new do
88
+ @server.process @server_p, @server_p
89
+ end
90
+
91
+ m = { "blah" => "foo", "a" => "b" }
92
+
93
+ @client.set_map m
94
+
95
+ st.join
96
+
97
+ assert_equal "foo", @handler.last_map["blah"]
98
+ assert_equal "b", @handler.last_map["a"]
99
+ end
100
+
101
+ def test_last_map
102
+ st = Thread.new do
103
+ @server.process @server_p, @server_p
104
+ end
105
+
106
+ @handler.last_map = { "blah" => "foo", "a" => "b" }
107
+
108
+ m = @client.last_map
109
+
110
+ st.join
111
+
112
+ assert_equal "foo", m["blah"]
113
+ assert_equal "b", m["a"]
114
+ end
115
+
116
+ def test_set_list
117
+ st = Thread.new do
118
+ @server.process @server_p, @server_p
119
+ end
120
+
121
+ m = [ "blah", "foo", "a", "b" ]
122
+
123
+ @client.set_list m
124
+
125
+ st.join
126
+
127
+ assert_equal m, @handler.last_list
128
+ end
129
+
130
+ def test_last_list
131
+ st = Thread.new do
132
+ @server.process @server_p, @server_p
133
+ end
134
+
135
+ l = [ "blah", "foo", "a", "b" ]
136
+ @handler.last_list = l
137
+
138
+ begin
139
+ assert_equal l, @client.last_list
140
+ rescue Interrupt => e
141
+ puts e.backtrace
142
+ end
143
+
144
+ st.join
145
+ end
146
+
147
+ def test_last_list_is_nil
148
+ st = Thread.new do
149
+ @server.process @server_p, @server_p
150
+ end
151
+
152
+ begin
153
+ assert_equal nil, @client.last_list
154
+ rescue Interrupt => e
155
+ puts e.backtrace
156
+ end
157
+
158
+ st.join
159
+ end
160
+
161
+ def test_enum
162
+ st = Thread.new do
163
+ @server.process @server_p, @server_p
164
+ end
165
+
166
+ @client.set_status :ON
167
+
168
+ st.join
169
+
170
+ assert_equal 0, @handler.last_status
171
+ end
172
+
173
+ def test_enum_recv
174
+ st = Thread.new do
175
+ @server.process @server_p, @server_p
176
+ end
177
+
178
+ @handler.last_status = 0
179
+
180
+ assert_equal :ON, @client.last_status
181
+
182
+ st.join
183
+ end
184
+ end