ffi-rzmq 1.0.3 → 2.0.7

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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +5 -6
  3. data/AUTHORS.txt +7 -1
  4. data/History.txt +79 -0
  5. data/README.rdoc +67 -29
  6. data/Rakefile +15 -0
  7. data/examples/README.rdoc +1 -3
  8. data/examples/{v3api/latency_measurement.rb → latency_measurement.rb} +1 -2
  9. data/examples/{v3api/local_lat.rb → local_lat.rb} +1 -1
  10. data/examples/{v3api/local_lat_poll.rb → local_lat_poll.rb} +4 -4
  11. data/examples/{v3api/local_throughput.rb → local_throughput.rb} +1 -1
  12. data/examples/{v3api/pub.rb → pub.rb} +1 -1
  13. data/examples/{v2api/publish_subscribe.rb → publish_subscribe.rb} +2 -2
  14. data/examples/{v2api/remote_lat.rb → remote_lat.rb} +1 -1
  15. data/examples/{v3api/remote_throughput.rb → remote_throughput.rb} +4 -3
  16. data/examples/repreq_over_curve.rb +60 -0
  17. data/examples/{v2api/reqrep_poll.rb → reqrep_poll.rb} +3 -4
  18. data/examples/{v2api/request_response.rb → request_response.rb} +1 -2
  19. data/examples/{v3api/sub.rb → sub.rb} +1 -2
  20. data/examples/{v3api/throughput_measurement.rb → throughput_measurement.rb} +1 -1
  21. data/examples/{v3api/xreqxrep_poll.rb → xreqxrep_poll.rb} +6 -7
  22. data/ffi-rzmq.gemspec +4 -4
  23. data/lib/ffi-rzmq/context.rb +26 -54
  24. data/lib/ffi-rzmq/device.rb +8 -4
  25. data/lib/ffi-rzmq/exceptions.rb +3 -0
  26. data/lib/ffi-rzmq/message.rb +24 -30
  27. data/lib/ffi-rzmq/poll.rb +5 -16
  28. data/lib/ffi-rzmq/poll_item.rb +0 -1
  29. data/lib/ffi-rzmq/socket.rb +132 -282
  30. data/lib/ffi-rzmq/util.rb +28 -36
  31. data/lib/ffi-rzmq/version.rb +1 -1
  32. data/lib/ffi-rzmq.rb +3 -3
  33. data/lib/io_extensions.rb +1 -1
  34. data/spec/context_spec.rb +18 -23
  35. data/spec/device_spec.rb +13 -12
  36. data/spec/message_spec.rb +13 -13
  37. data/spec/multipart_spec.rb +11 -11
  38. data/spec/nonblocking_recv_spec.rb +22 -22
  39. data/spec/poll_spec.rb +49 -49
  40. data/spec/pushpull_spec.rb +12 -11
  41. data/spec/reqrep_spec.rb +11 -11
  42. data/spec/socket_spec.rb +110 -197
  43. data/spec/spec_helper.rb +3 -11
  44. data/spec/support/generate_keys_and_certs.rb +41 -0
  45. data/spec/support/test.crt +26 -13
  46. data/spec/support/test.key +49 -13
  47. data/spec/util_spec.rb +29 -0
  48. data/travis_build_script.sh +27 -0
  49. metadata +83 -104
  50. data/examples/v2api/latency_measurement.rb +0 -139
  51. data/examples/v2api/local_lat.rb +0 -58
  52. data/examples/v2api/local_lat_poll.rb +0 -66
  53. data/examples/v2api/local_throughput.rb +0 -58
  54. data/examples/v2api/pub.rb +0 -46
  55. data/examples/v2api/remote_throughput.rb +0 -39
  56. data/examples/v2api/sub.rb +0 -74
  57. data/examples/v2api/throughput_measurement.rb +0 -138
  58. data/examples/v2api/xreqxrep_poll.rb +0 -93
  59. data/examples/v3api/publish_subscribe.rb +0 -82
  60. data/examples/v3api/remote_lat.rb +0 -71
  61. data/examples/v3api/reqrep_poll.rb +0 -62
  62. data/examples/v3api/request_response.rb +0 -40
  63. data/lib/ffi-rzmq/constants.rb +0 -187
  64. data/lib/ffi-rzmq/libc.rb +0 -19
  65. data/lib/ffi-rzmq/libzmq.rb +0 -283
data/spec/socket_spec.rb CHANGED
@@ -7,11 +7,8 @@ module ZMQ
7
7
  describe Socket do
8
8
  include APIHelper
9
9
 
10
- socket_types = if LibZMQ.version2?
11
- [ZMQ::REQ, ZMQ::REP, ZMQ::DEALER, ZMQ::ROUTER, ZMQ::PUB, ZMQ::SUB, ZMQ::PUSH, ZMQ::PULL, ZMQ::PAIR]
12
- elsif LibZMQ.version3?
10
+ socket_types =
13
11
  [ZMQ::REQ, ZMQ::REP, ZMQ::DEALER, ZMQ::ROUTER, ZMQ::PUB, ZMQ::SUB, ZMQ::PUSH, ZMQ::PULL, ZMQ::PAIR, ZMQ::XPUB, ZMQ::XSUB]
14
- end
15
12
 
16
13
  context "when initializing" do
17
14
  before(:all) { @ctx = Context.new }
@@ -19,21 +16,21 @@ module ZMQ
19
16
 
20
17
 
21
18
  it "should raise an error for a nil context" do
22
- lambda { Socket.new(FFI::Pointer.new(0), ZMQ::REQ) }.should raise_exception(ZMQ::ContextError)
19
+ expect { Socket.new(FFI::Pointer.new(0), ZMQ::REQ) }.to raise_exception(ZMQ::ContextError)
23
20
  end
24
21
 
25
22
  it "works with a Context#pointer as the context_ptr" do
26
- lambda do
23
+ expect do
27
24
  s = Socket.new(@ctx.pointer, ZMQ::REQ)
28
25
  s.close
29
- end.should_not raise_exception
26
+ end.not_to raise_exception
30
27
  end
31
28
 
32
29
  it "works with a Context instance as the context_ptr" do
33
- lambda do
30
+ expect do
34
31
  s = Socket.new(@ctx, ZMQ::SUB)
35
32
  s.close
36
- end.should_not raise_exception
33
+ end.not_to raise_exception
37
34
  end
38
35
 
39
36
 
@@ -41,22 +38,22 @@ module ZMQ
41
38
 
42
39
  it "should not raise an error for a [#{ZMQ::SocketTypeNameMap[socket_type]}] socket type" do
43
40
  sock = nil
44
- lambda { sock = Socket.new(@ctx.pointer, socket_type) }.should_not raise_error
41
+ expect { sock = Socket.new(@ctx.pointer, socket_type) }.not_to raise_error
45
42
  sock.close
46
43
  end
47
44
  end # each socket_type
48
45
 
49
46
  it "should set the :socket accessor to the raw socket allocated by libzmq" do
50
47
  socket = double('socket')
51
- socket.stub(:null? => false)
52
- LibZMQ.should_receive(:zmq_socket).and_return(socket)
48
+ allow(socket).to receive(:null?).and_return(false)
49
+ expect(LibZMQ).to receive(:zmq_socket).and_return(socket)
53
50
 
54
51
  sock = Socket.new(@ctx.pointer, ZMQ::REQ)
55
- sock.socket.should == socket
52
+ expect(sock.socket).to eq(socket)
56
53
  end
57
54
 
58
55
  it "should define a finalizer on this object" do
59
- ObjectSpace.should_receive(:define_finalizer).at_least(1)
56
+ expect(ObjectSpace).to receive(:define_finalizer).at_least(1)
60
57
  sock = Socket.new(@ctx.pointer, ZMQ::REQ)
61
58
  sock.close
62
59
  end
@@ -80,7 +77,7 @@ module ZMQ
80
77
  sock = Socket.new @ctx.pointer, ZMQ::REQ
81
78
  raw_socket = sock.socket
82
79
 
83
- LibZMQ.should_receive(:close).with(raw_socket)
80
+ expect(LibZMQ).to receive(:close).with(raw_socket)
84
81
  sock.close
85
82
  sock.close
86
83
  LibZMQ.close raw_socket # *really close it otherwise the context will block indefinitely
@@ -97,7 +94,7 @@ module ZMQ
97
94
  sock = Socket.new @ctx.pointer, ZMQ::REQ
98
95
 
99
96
  sock.identity = ('a' * 256)
100
- sock.identity.should == ''
97
+ expect(sock.identity).to eq('')
101
98
  sock.close
102
99
  end
103
100
 
@@ -105,7 +102,7 @@ module ZMQ
105
102
  sock = Socket.new @ctx.pointer, ZMQ::REQ
106
103
 
107
104
  sock.identity = ''
108
- sock.identity.should == ''
105
+ expect(sock.identity).to eq('')
109
106
  sock.close
110
107
  end
111
108
 
@@ -113,7 +110,7 @@ module ZMQ
113
110
  sock = Socket.new @ctx.pointer, ZMQ::REQ
114
111
 
115
112
  sock.identity = 'a'
116
- sock.identity.should == 'a'
113
+ expect(sock.identity).to eq('a')
117
114
  sock.close
118
115
  end
119
116
 
@@ -121,7 +118,7 @@ module ZMQ
121
118
  sock = Socket.new @ctx.pointer, ZMQ::REQ
122
119
 
123
120
  sock.identity = ('a' * 255)
124
- sock.identity.should == ('a' * 255)
121
+ expect(sock.identity).to eq('a' * 255)
125
122
  sock.close
126
123
  end
127
124
 
@@ -129,7 +126,7 @@ module ZMQ
129
126
  sock = Socket.new @ctx.pointer, ZMQ::REQ
130
127
 
131
128
  sock.identity = 7
132
- sock.identity.should == '7'
129
+ expect(sock.identity).to eq('7')
133
130
  sock.close
134
131
  end
135
132
  end # context identity=
@@ -160,8 +157,8 @@ module ZMQ
160
157
 
161
158
  array = []
162
159
  rc = socket.getsockopt(ZMQ::IDENTITY, array)
163
- rc.should == 0
164
- array[0].should == identity
160
+ expect(rc).to eq(0)
161
+ expect(array[0]).to eq(identity)
165
162
  end
166
163
  end
167
164
 
@@ -169,138 +166,63 @@ module ZMQ
169
166
  identity = 'a' * 256
170
167
  array = []
171
168
  rc = socket.setsockopt(ZMQ::IDENTITY, identity)
172
- rc.should == -1
169
+ expect(rc).to eq(-1)
173
170
  end
174
171
  end # context using option ZMQ::IDENTITY
175
172
 
173
+ context "using option ZMQ::IPV4ONLY" do
174
+ it "should enable use of IPV6 sockets when set to 0" do
175
+ value = 0
176
+ socket.setsockopt ZMQ::IPV4ONLY, value
177
+ array = []
178
+ rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
179
+ expect(rc).to eq(0)
180
+ expect(array[0]).to eq(value)
181
+ end
176
182
 
177
- if version2?
178
-
179
- context "using option ZMQ::HWM" do
180
- it "should set the high water mark given a positive value" do
181
- hwm = 4
182
- socket.setsockopt ZMQ::HWM, hwm
183
- array = []
184
- rc = socket.getsockopt(ZMQ::HWM, array)
185
- rc.should == 0
186
- array[0].should == hwm
187
- end
188
- end # context using option ZMQ::HWM
189
-
190
-
191
- context "using option ZMQ::SWAP" do
192
- it "should set the swap value given a positive value" do
193
- swap = 10_000
194
- socket.setsockopt ZMQ::SWAP, swap
195
- array = []
196
- rc = socket.getsockopt(ZMQ::SWAP, array)
197
- rc.should == 0
198
- array[0].should == swap
199
- end
200
-
201
- it "returns -1 given a negative value" do
202
- swap = -10_000
203
- rc = socket.setsockopt(ZMQ::SWAP, swap)
204
- rc.should == -1
205
- end
206
- end # context using option ZMQ::SWP
207
-
208
-
209
- context "using option ZMQ::MCAST_LOOP" do
210
- it "should enable the multicast loopback given a 1 (true) value" do
211
- socket.setsockopt ZMQ::MCAST_LOOP, 1
212
- array = []
213
- rc = socket.getsockopt(ZMQ::MCAST_LOOP, array)
214
- rc.should == 0
215
- array[0].should be_true
216
- end
217
-
218
- it "should disable the multicast loopback given a 0 (false) value" do
219
- socket.setsockopt ZMQ::MCAST_LOOP, 0
220
- array = []
221
- rc = socket.getsockopt(ZMQ::MCAST_LOOP, array)
222
- rc.should == 0
223
- array[0].should be_false
224
- end
225
- end # context using option ZMQ::MCAST_LOOP
226
-
227
-
228
- context "using option ZMQ::RECOVERY_IVL_MSEC" do
229
- it "should set the time interval for saving messages measured in milliseconds given a positive value" do
230
- value = 200
231
- socket.setsockopt ZMQ::RECOVERY_IVL_MSEC, value
232
- array = []
233
- rc = socket.getsockopt(ZMQ::RECOVERY_IVL_MSEC, array)
234
- rc.should == 0
235
- array[0].should == value
236
- end
237
-
238
- it "should default to a value of -1" do
239
- value = -1
240
- array = []
241
- rc = socket.getsockopt(ZMQ::RECOVERY_IVL_MSEC, array)
242
- rc.should == 0
243
- array[0].should == value
244
- end
245
- end # context using option ZMQ::RECOVERY_IVL_MSEC
246
-
247
- else # version3 or higher
248
-
249
- context "using option ZMQ::IPV4ONLY" do
250
- it "should enable use of IPV6 sockets when set to 0" do
251
- value = 0
252
- socket.setsockopt ZMQ::IPV4ONLY, value
253
- array = []
254
- rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
255
- rc.should == 0
256
- array[0].should == value
257
- end
258
-
259
- it "should default to a value of 1" do
260
- value = 1
261
- array = []
262
- rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
263
- rc.should == 0
264
- array[0].should == value
265
- end
266
-
267
- it "returns -1 given a negative value" do
268
- value = -1
269
- rc = socket.setsockopt ZMQ::IPV4ONLY, value
270
- rc.should == -1
271
- end
183
+ it "should default to a value of 1" do
184
+ value = 1
185
+ array = []
186
+ rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
187
+ expect(rc).to eq(0)
188
+ expect(array[0]).to eq(value)
189
+ end
272
190
 
273
- it "returns -1 given a value > 1" do
274
- value = 2
275
- rc = socket.setsockopt ZMQ::IPV4ONLY, value
276
- rc.should == -1
277
- end
278
- end # context using option ZMQ::IPV4ONLY
191
+ it "returns -1 given a negative value" do
192
+ value = -1
193
+ rc = socket.setsockopt ZMQ::IPV4ONLY, value
194
+ expect(rc).to eq(-1)
195
+ end
279
196
 
280
- context "using option ZMQ::LAST_ENDPOINT" do
281
- it "should return last enpoint" do
282
- random_port = bind_to_random_tcp_port(socket, max_tries = 500)
283
- array = []
284
- rc = socket.getsockopt(ZMQ::LAST_ENDPOINT, array)
285
- ZMQ::Util.resultcode_ok?(rc).should == true
286
- endpoint_regex = %r{\Atcp://(.*):(\d+)\0\z}
287
- array[0].should =~ endpoint_regex
288
- Integer(array[0][endpoint_regex, 2]).should == random_port
289
- end
197
+ it "returns -1 given a value > 1" do
198
+ value = 2
199
+ rc = socket.setsockopt ZMQ::IPV4ONLY, value
200
+ expect(rc).to eq(-1)
290
201
  end
291
- end # version2? if/else block
202
+ end # context using option ZMQ::IPV4ONLY
292
203
 
204
+ context "using option ZMQ::LAST_ENDPOINT" do
205
+ it "should return last enpoint" do
206
+ random_port = bind_to_random_tcp_port(socket, max_tries = 500)
207
+ array = []
208
+ rc = socket.getsockopt(ZMQ::LAST_ENDPOINT, array)
209
+ expect(ZMQ::Util.resultcode_ok?(rc)).to eq(true)
210
+ endpoint_regex = %r{\Atcp://(.*):(\d+)\0\z}
211
+ expect(array[0]).to match(endpoint_regex)
212
+ expect(Integer(array[0][endpoint_regex, 2])).to eq(random_port)
213
+ end
214
+ end
293
215
 
294
216
  context "using option ZMQ::SUBSCRIBE" do
295
217
  if ZMQ::SUB == socket_type
296
218
  it "returns 0 for a SUB socket" do
297
219
  rc = socket.setsockopt(ZMQ::SUBSCRIBE, "topic.string")
298
- rc.should == 0
220
+ expect(rc).to eq(0)
299
221
  end
300
222
  else
301
223
  it "returns -1 for non-SUB sockets" do
302
224
  rc = socket.setsockopt(ZMQ::SUBSCRIBE, "topic.string")
303
- rc.should == -1
225
+ expect(rc).to eq(-1)
304
226
  end
305
227
  end
306
228
  end # context using option ZMQ::SUBSCRIBE
@@ -311,13 +233,13 @@ module ZMQ
311
233
  it "returns 0 given a topic string that was previously subscribed" do
312
234
  socket.setsockopt ZMQ::SUBSCRIBE, "topic.string"
313
235
  rc = socket.setsockopt(ZMQ::UNSUBSCRIBE, "topic.string")
314
- rc.should == 0
236
+ expect(rc).to eq(0)
315
237
  end
316
238
 
317
239
  else
318
240
  it "returns -1 for non-SUB sockets" do
319
241
  rc = socket.setsockopt(ZMQ::UNSUBSCRIBE, "topic.string")
320
- rc.should == -1
242
+ expect(rc).to eq(-1)
321
243
  end
322
244
  end
323
245
  end # context using option ZMQ::UNSUBSCRIBE
@@ -329,8 +251,8 @@ module ZMQ
329
251
  socket.setsockopt ZMQ::AFFINITY, affinity
330
252
  array = []
331
253
  rc = socket.getsockopt(ZMQ::AFFINITY, array)
332
- rc.should == 0
333
- array[0].should == affinity
254
+ expect(rc).to eq(0)
255
+ expect(array[0]).to eq(affinity)
334
256
  end
335
257
  end # context using option ZMQ::AFFINITY
336
258
 
@@ -341,14 +263,14 @@ module ZMQ
341
263
  socket.setsockopt ZMQ::RATE, rate
342
264
  array = []
343
265
  rc = socket.getsockopt(ZMQ::RATE, array)
344
- rc.should == 0
345
- array[0].should == rate
266
+ expect(rc).to eq(0)
267
+ expect(array[0]).to eq(rate)
346
268
  end
347
269
 
348
270
  it "returns -1 given a negative value" do
349
271
  rate = -200
350
272
  rc = socket.setsockopt ZMQ::RATE, rate
351
- rc.should == -1
273
+ expect(rc).to eq(-1)
352
274
  end
353
275
  end # context using option ZMQ::RATE
354
276
 
@@ -359,14 +281,14 @@ module ZMQ
359
281
  socket.setsockopt ZMQ::RECOVERY_IVL, rate
360
282
  array = []
361
283
  rc = socket.getsockopt(ZMQ::RECOVERY_IVL, array)
362
- rc.should == 0
363
- array[0].should == rate
284
+ expect(rc).to eq(0)
285
+ expect(array[0]).to eq(rate)
364
286
  end
365
287
 
366
288
  it "returns -1 given a negative value" do
367
289
  rate = -200
368
290
  rc = socket.setsockopt ZMQ::RECOVERY_IVL, rate
369
- rc.should == -1
291
+ expect(rc).to eq(-1)
370
292
  end
371
293
  end # context using option ZMQ::RECOVERY_IVL
372
294
 
@@ -377,8 +299,8 @@ module ZMQ
377
299
  socket.setsockopt ZMQ::SNDBUF, size
378
300
  array = []
379
301
  rc = socket.getsockopt(ZMQ::SNDBUF, array)
380
- rc.should == 0
381
- array[0].should == size
302
+ expect(rc).to eq(0)
303
+ expect(array[0]).to eq(size)
382
304
  end
383
305
  end # context using option ZMQ::SNDBUF
384
306
 
@@ -389,8 +311,8 @@ module ZMQ
389
311
  socket.setsockopt ZMQ::RCVBUF, size
390
312
  array = []
391
313
  rc = socket.getsockopt(ZMQ::RCVBUF, array)
392
- rc.should == 0
393
- array[0].should == size
314
+ expect(rc).to eq(0)
315
+ expect(array[0]).to eq(size)
394
316
  end
395
317
  end # context using option ZMQ::RCVBUF
396
318
 
@@ -401,8 +323,8 @@ module ZMQ
401
323
  socket.setsockopt ZMQ::LINGER, value
402
324
  array = []
403
325
  rc = socket.getsockopt(ZMQ::LINGER, array)
404
- rc.should == 0
405
- array[0].should == value
326
+ expect(rc).to eq(0)
327
+ expect(array[0]).to eq(value)
406
328
  end
407
329
 
408
330
  it "should set the socket message linger option to 0 for dropping packets" do
@@ -410,27 +332,17 @@ module ZMQ
410
332
  socket.setsockopt ZMQ::LINGER, value
411
333
  array = []
412
334
  rc = socket.getsockopt(ZMQ::LINGER, array)
413
- rc.should == 0
414
- array[0].should == value
335
+ expect(rc).to eq(0)
336
+ expect(array[0]).to eq(value)
415
337
  end
416
338
 
417
- if (ZMQ::SUB == socket_type) && version3? || (defined?(ZMQ::XSUB) && ZMQ::XSUB == socket_type)
418
339
  it "should default to a value of 0" do
419
- value = 0
420
- array = []
421
- rc = socket.getsockopt(ZMQ::LINGER, array)
422
- rc.should == 0
423
- array[0].should == value
424
- end
425
- else
426
- it "should default to a value of -1" do
427
- value = -1
340
+ value = [SUB, XSUB].include?(socket_type) ? 0 : -1
428
341
  array = []
429
342
  rc = socket.getsockopt(ZMQ::LINGER, array)
430
- rc.should == 0
431
- array[0].should == value
343
+ expect(rc).to eq(0)
344
+ expect(array[0]).to eq(value)
432
345
  end
433
- end
434
346
  end # context using option ZMQ::LINGER
435
347
 
436
348
 
@@ -440,16 +352,16 @@ module ZMQ
440
352
  socket.setsockopt ZMQ::RECONNECT_IVL, value
441
353
  array = []
442
354
  rc = socket.getsockopt(ZMQ::RECONNECT_IVL, array)
443
- rc.should == 0
444
- array[0].should == value
355
+ expect(rc).to eq(0)
356
+ expect(array[0]).to eq(value)
445
357
  end
446
358
 
447
359
  it "should default to a value of 100" do
448
360
  value = 100
449
361
  array = []
450
362
  rc = socket.getsockopt(ZMQ::RECONNECT_IVL, array)
451
- rc.should == 0
452
- array[0].should == value
363
+ expect(rc).to eq(0)
364
+ expect(array[0]).to eq(value)
453
365
  end
454
366
  end # context using option ZMQ::RECONNECT_IVL
455
367
 
@@ -457,19 +369,20 @@ module ZMQ
457
369
  context "using option ZMQ::BACKLOG" do
458
370
  it "should set the maximum number of pending socket connections given a positive value" do
459
371
  value = 200
460
- socket.setsockopt ZMQ::BACKLOG, value
372
+ rc = socket.setsockopt ZMQ::BACKLOG, value
373
+ expect(rc).to eq(0)
461
374
  array = []
462
375
  rc = socket.getsockopt(ZMQ::BACKLOG, array)
463
- rc.should == 0
464
- array[0].should == value
376
+ expect(rc).to eq(0)
377
+ expect(array[0]).to eq(value)
465
378
  end
466
379
 
467
380
  it "should default to a value of 100" do
468
381
  value = 100
469
382
  array = []
470
383
  rc = socket.getsockopt(ZMQ::BACKLOG, array)
471
- rc.should == 0
472
- array[0].should == value
384
+ expect(rc).to eq(0)
385
+ expect(array[0]).to eq(value)
473
386
  end
474
387
  end # context using option ZMQ::BACKLOG
475
388
 
@@ -495,8 +408,8 @@ module ZMQ
495
408
  it "should return an FD as a positive integer" do
496
409
  array = []
497
410
  rc = socket.getsockopt(ZMQ::FD, array)
498
- rc.should == 0
499
- array[0].should > 0
411
+ expect(rc).to eq(0)
412
+ expect(array[0]).to be > 0
500
413
  end
501
414
 
502
415
  it "returns a valid FD that is accepted by the system poll() function" do
@@ -514,14 +427,14 @@ module ZMQ
514
427
 
515
428
  class PollFD < FFI::Struct
516
429
  layout :fd, :int,
517
- :events, :short,
518
- :revents, :short
430
+ :events, :short,
431
+ :revents, :short
519
432
  end
520
433
  end # module LibSocket
521
434
 
522
435
  array = []
523
436
  rc = socket.getsockopt(ZMQ::FD, array)
524
- rc.should be_zero
437
+ expect(rc).to eq(0)
525
438
  fd = array[0]
526
439
 
527
440
  # setup the BSD poll_fd struct
@@ -531,18 +444,18 @@ module ZMQ
531
444
  pollfd[:revents] = 0
532
445
 
533
446
  rc = LibSocket.poll(pollfd, 1, 0)
534
- rc.should be_zero
447
+ expect(rc).to eq(0)
535
448
  end
536
449
  end
537
450
 
538
451
  end # posix platform
539
452
 
540
453
  context "using option ZMQ::EVENTS" do
541
- it "should return a mask of events as a Fixnum" do
454
+ it "should return a mask of events as an Integer" do
542
455
  array = []
543
456
  rc = socket.getsockopt(ZMQ::EVENTS, array)
544
- rc.should == 0
545
- array[0].should be_a(Fixnum)
457
+ expect(rc).to eq(0)
458
+ expect(array[0]).to be_a(Integer)
546
459
  end
547
460
  end
548
461
 
@@ -550,8 +463,8 @@ module ZMQ
550
463
  it "should return the socket type" do
551
464
  array = []
552
465
  rc = socket.getsockopt(ZMQ::TYPE, array)
553
- rc.should == 0
554
- array[0].should == socket_type
466
+ expect(rc).to eq(0)
467
+ expect(array[0]).to eq(socket_type)
555
468
  end
556
469
  end
557
470
  end # context #getsockopt
@@ -566,29 +479,29 @@ module ZMQ
566
479
  it "SUB socket that received a message always has POLLIN set" do
567
480
  events = []
568
481
  rc = @sub.getsockopt(ZMQ::EVENTS, events)
569
- rc.should == 0
570
- events[0].should == ZMQ::POLLIN
482
+ expect(rc).to eq(0)
483
+ expect(events[0]).to eq ZMQ::POLLIN
571
484
  end
572
485
 
573
486
  it "PUB socket always has POLLOUT set" do
574
487
  events = []
575
488
  rc = @pub.getsockopt(ZMQ::EVENTS, events)
576
- rc.should == 0
577
- events[0].should == ZMQ::POLLOUT
489
+ expect(rc).to eq(0)
490
+ expect(events[0]).to eq ZMQ::POLLOUT
578
491
  end
579
492
 
580
493
  it "PUB socket never has POLLIN set" do
581
494
  events = []
582
495
  rc = @pub.getsockopt(ZMQ::EVENTS, events)
583
- rc.should == 0
584
- events[0].should_not == ZMQ::POLLIN
496
+ expect(rc).to eq(0)
497
+ expect(events[0]).not_to eq ZMQ::POLLIN
585
498
  end
586
499
 
587
500
  it "SUB socket never has POLLOUT set" do
588
501
  events = []
589
502
  rc = @sub.getsockopt(ZMQ::EVENTS, events)
590
- rc.should == 0
591
- events[0].should_not == ZMQ::POLLOUT
503
+ expect(rc).to eq(0)
504
+ expect(events[0]).not_to eq ZMQ::POLLOUT
592
505
  end
593
506
  end # shared example for pubsub
594
507
 
@@ -601,7 +514,7 @@ module ZMQ
601
514
  endpoint = "inproc://socket_test"
602
515
  @sub = @ctx.socket ZMQ::SUB
603
516
  rc = @sub.setsockopt ZMQ::SUBSCRIBE, ''
604
- rc.should == 0
517
+ expect(rc).to eq(0)
605
518
 
606
519
  @pub = @ctx.socket ZMQ::PUB
607
520
  @sub.bind(endpoint)
data/spec/spec_helper.rb CHANGED
@@ -1,11 +1,7 @@
1
- # To run these specs using rake, make sure the 'bones' and 'bones-extras'
2
- # gems are installed. Then execute 'rake spec' from the main directory
3
- # to run all specs.
4
1
 
5
2
  require File.expand_path(
6
3
  File.join(File.dirname(__FILE__), %w[.. lib ffi-rzmq]))
7
4
 
8
- require 'thread' # necessary when testing in MRI 1.8 mode
9
5
  Thread.abort_on_exception = true
10
6
 
11
7
  require 'openssl'
@@ -14,12 +10,8 @@ require 'securerandom'
14
10
 
15
11
  # define some version guards so we can turn on/off specs based upon
16
12
  # the version of the 0mq library that is loaded
17
- def version2?
18
- ZMQ::LibZMQ.version2?
19
- end
20
-
21
- def version3?
22
- ZMQ::LibZMQ.version3?
13
+ def version4?
14
+ ZMQ::LibZMQ.version4?
23
15
  end
24
16
 
25
17
  def jruby?
@@ -35,7 +27,7 @@ end
35
27
 
36
28
  module APIHelper
37
29
  def poller_setup
38
- @helper_poller ||= ZMQ::Poller.new
30
+ @helper_poller = ZMQ::Poller.new
39
31
  end
40
32
 
41
33
  def poller_register_socket(socket)
@@ -0,0 +1,41 @@
1
+ # Copied from Debian:
2
+ # https://salsa.debian.org/ruby-team/ruby-ffi-rzmq/commit/15ad9dd6f4c3358acbd7db2c7e288aae2d5efcf8
3
+ #
4
+ # Script should be run from the spec/support directory.
5
+ #
6
+
7
+ require "openssl"
8
+
9
+ key = OpenSSL::PKey::RSA.new 4096
10
+
11
+ open 'private_key.pem', 'w' do |io| io.write key.to_pem end
12
+ open 'public_key.pem', 'w' do |io| io.write key.public_key.to_pem end
13
+
14
+
15
+ name = OpenSSL::X509::Name.parse 'CN=nobody/DC=example'
16
+
17
+ cert = OpenSSL::X509::Certificate.new
18
+ cert.version = 2
19
+ cert.serial = 0
20
+ cert.not_before = Time.now
21
+ cert.not_after = Time.now + 3600*24*365*10
22
+
23
+ cert.public_key = key.public_key
24
+ cert.subject = name
25
+ cert.issuer = name
26
+
27
+ extension_factory = OpenSSL::X509::ExtensionFactory.new
28
+ extension_factory.subject_certificate = cert
29
+ extension_factory.issuer_certificate = cert
30
+
31
+ cert.add_extension \
32
+ extension_factory.create_extension('subjectKeyIdentifier', 'hash')
33
+ cert.sign key, OpenSSL::Digest::SHA1.new
34
+ open 'ca.pem', 'w' do |io|
35
+ io.write cert.to_pem
36
+ end
37
+
38
+ require 'fileutils'
39
+
40
+ FileUtils.cp 'ca.pem', 'test.crt'
41
+ FileUtils.cp 'private_key.pem', 'test.key'