ffi-rzmq 2.0.0 → 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.
data/spec/socket_spec.rb CHANGED
@@ -16,21 +16,21 @@ module ZMQ
16
16
 
17
17
 
18
18
  it "should raise an error for a nil context" do
19
- 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)
20
20
  end
21
21
 
22
22
  it "works with a Context#pointer as the context_ptr" do
23
- lambda do
23
+ expect do
24
24
  s = Socket.new(@ctx.pointer, ZMQ::REQ)
25
25
  s.close
26
- end.should_not raise_exception
26
+ end.not_to raise_exception
27
27
  end
28
28
 
29
29
  it "works with a Context instance as the context_ptr" do
30
- lambda do
30
+ expect do
31
31
  s = Socket.new(@ctx, ZMQ::SUB)
32
32
  s.close
33
- end.should_not raise_exception
33
+ end.not_to raise_exception
34
34
  end
35
35
 
36
36
 
@@ -38,22 +38,22 @@ module ZMQ
38
38
 
39
39
  it "should not raise an error for a [#{ZMQ::SocketTypeNameMap[socket_type]}] socket type" do
40
40
  sock = nil
41
- 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
42
42
  sock.close
43
43
  end
44
44
  end # each socket_type
45
45
 
46
46
  it "should set the :socket accessor to the raw socket allocated by libzmq" do
47
47
  socket = double('socket')
48
- socket.stub(:null? => false)
49
- 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)
50
50
 
51
51
  sock = Socket.new(@ctx.pointer, ZMQ::REQ)
52
- sock.socket.should == socket
52
+ expect(sock.socket).to eq(socket)
53
53
  end
54
54
 
55
55
  it "should define a finalizer on this object" do
56
- ObjectSpace.should_receive(:define_finalizer).at_least(1)
56
+ expect(ObjectSpace).to receive(:define_finalizer).at_least(1)
57
57
  sock = Socket.new(@ctx.pointer, ZMQ::REQ)
58
58
  sock.close
59
59
  end
@@ -77,7 +77,7 @@ module ZMQ
77
77
  sock = Socket.new @ctx.pointer, ZMQ::REQ
78
78
  raw_socket = sock.socket
79
79
 
80
- LibZMQ.should_receive(:close).with(raw_socket)
80
+ expect(LibZMQ).to receive(:close).with(raw_socket)
81
81
  sock.close
82
82
  sock.close
83
83
  LibZMQ.close raw_socket # *really close it otherwise the context will block indefinitely
@@ -94,7 +94,7 @@ module ZMQ
94
94
  sock = Socket.new @ctx.pointer, ZMQ::REQ
95
95
 
96
96
  sock.identity = ('a' * 256)
97
- sock.identity.should == ''
97
+ expect(sock.identity).to eq('')
98
98
  sock.close
99
99
  end
100
100
 
@@ -102,7 +102,7 @@ module ZMQ
102
102
  sock = Socket.new @ctx.pointer, ZMQ::REQ
103
103
 
104
104
  sock.identity = ''
105
- sock.identity.should == ''
105
+ expect(sock.identity).to eq('')
106
106
  sock.close
107
107
  end
108
108
 
@@ -110,7 +110,7 @@ module ZMQ
110
110
  sock = Socket.new @ctx.pointer, ZMQ::REQ
111
111
 
112
112
  sock.identity = 'a'
113
- sock.identity.should == 'a'
113
+ expect(sock.identity).to eq('a')
114
114
  sock.close
115
115
  end
116
116
 
@@ -118,7 +118,7 @@ module ZMQ
118
118
  sock = Socket.new @ctx.pointer, ZMQ::REQ
119
119
 
120
120
  sock.identity = ('a' * 255)
121
- sock.identity.should == ('a' * 255)
121
+ expect(sock.identity).to eq('a' * 255)
122
122
  sock.close
123
123
  end
124
124
 
@@ -126,7 +126,7 @@ module ZMQ
126
126
  sock = Socket.new @ctx.pointer, ZMQ::REQ
127
127
 
128
128
  sock.identity = 7
129
- sock.identity.should == '7'
129
+ expect(sock.identity).to eq('7')
130
130
  sock.close
131
131
  end
132
132
  end # context identity=
@@ -157,8 +157,8 @@ module ZMQ
157
157
 
158
158
  array = []
159
159
  rc = socket.getsockopt(ZMQ::IDENTITY, array)
160
- rc.should == 0
161
- array[0].should == identity
160
+ expect(rc).to eq(0)
161
+ expect(array[0]).to eq(identity)
162
162
  end
163
163
  end
164
164
 
@@ -166,7 +166,7 @@ module ZMQ
166
166
  identity = 'a' * 256
167
167
  array = []
168
168
  rc = socket.setsockopt(ZMQ::IDENTITY, identity)
169
- rc.should == -1
169
+ expect(rc).to eq(-1)
170
170
  end
171
171
  end # context using option ZMQ::IDENTITY
172
172
 
@@ -176,28 +176,28 @@ module ZMQ
176
176
  socket.setsockopt ZMQ::IPV4ONLY, value
177
177
  array = []
178
178
  rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
179
- rc.should == 0
180
- array[0].should == value
179
+ expect(rc).to eq(0)
180
+ expect(array[0]).to eq(value)
181
181
  end
182
182
 
183
183
  it "should default to a value of 1" do
184
184
  value = 1
185
185
  array = []
186
186
  rc = socket.getsockopt(ZMQ::IPV4ONLY, array)
187
- rc.should == 0
188
- array[0].should == value
187
+ expect(rc).to eq(0)
188
+ expect(array[0]).to eq(value)
189
189
  end
190
190
 
191
191
  it "returns -1 given a negative value" do
192
192
  value = -1
193
193
  rc = socket.setsockopt ZMQ::IPV4ONLY, value
194
- rc.should == -1
194
+ expect(rc).to eq(-1)
195
195
  end
196
196
 
197
197
  it "returns -1 given a value > 1" do
198
198
  value = 2
199
199
  rc = socket.setsockopt ZMQ::IPV4ONLY, value
200
- rc.should == -1
200
+ expect(rc).to eq(-1)
201
201
  end
202
202
  end # context using option ZMQ::IPV4ONLY
203
203
 
@@ -206,10 +206,10 @@ module ZMQ
206
206
  random_port = bind_to_random_tcp_port(socket, max_tries = 500)
207
207
  array = []
208
208
  rc = socket.getsockopt(ZMQ::LAST_ENDPOINT, array)
209
- ZMQ::Util.resultcode_ok?(rc).should == true
209
+ expect(ZMQ::Util.resultcode_ok?(rc)).to eq(true)
210
210
  endpoint_regex = %r{\Atcp://(.*):(\d+)\0\z}
211
- array[0].should =~ endpoint_regex
212
- Integer(array[0][endpoint_regex, 2]).should == random_port
211
+ expect(array[0]).to match(endpoint_regex)
212
+ expect(Integer(array[0][endpoint_regex, 2])).to eq(random_port)
213
213
  end
214
214
  end
215
215
 
@@ -217,12 +217,12 @@ module ZMQ
217
217
  if ZMQ::SUB == socket_type
218
218
  it "returns 0 for a SUB socket" do
219
219
  rc = socket.setsockopt(ZMQ::SUBSCRIBE, "topic.string")
220
- rc.should == 0
220
+ expect(rc).to eq(0)
221
221
  end
222
222
  else
223
223
  it "returns -1 for non-SUB sockets" do
224
224
  rc = socket.setsockopt(ZMQ::SUBSCRIBE, "topic.string")
225
- rc.should == -1
225
+ expect(rc).to eq(-1)
226
226
  end
227
227
  end
228
228
  end # context using option ZMQ::SUBSCRIBE
@@ -233,13 +233,13 @@ module ZMQ
233
233
  it "returns 0 given a topic string that was previously subscribed" do
234
234
  socket.setsockopt ZMQ::SUBSCRIBE, "topic.string"
235
235
  rc = socket.setsockopt(ZMQ::UNSUBSCRIBE, "topic.string")
236
- rc.should == 0
236
+ expect(rc).to eq(0)
237
237
  end
238
238
 
239
239
  else
240
240
  it "returns -1 for non-SUB sockets" do
241
241
  rc = socket.setsockopt(ZMQ::UNSUBSCRIBE, "topic.string")
242
- rc.should == -1
242
+ expect(rc).to eq(-1)
243
243
  end
244
244
  end
245
245
  end # context using option ZMQ::UNSUBSCRIBE
@@ -251,8 +251,8 @@ module ZMQ
251
251
  socket.setsockopt ZMQ::AFFINITY, affinity
252
252
  array = []
253
253
  rc = socket.getsockopt(ZMQ::AFFINITY, array)
254
- rc.should == 0
255
- array[0].should == affinity
254
+ expect(rc).to eq(0)
255
+ expect(array[0]).to eq(affinity)
256
256
  end
257
257
  end # context using option ZMQ::AFFINITY
258
258
 
@@ -263,14 +263,14 @@ module ZMQ
263
263
  socket.setsockopt ZMQ::RATE, rate
264
264
  array = []
265
265
  rc = socket.getsockopt(ZMQ::RATE, array)
266
- rc.should == 0
267
- array[0].should == rate
266
+ expect(rc).to eq(0)
267
+ expect(array[0]).to eq(rate)
268
268
  end
269
269
 
270
270
  it "returns -1 given a negative value" do
271
271
  rate = -200
272
272
  rc = socket.setsockopt ZMQ::RATE, rate
273
- rc.should == -1
273
+ expect(rc).to eq(-1)
274
274
  end
275
275
  end # context using option ZMQ::RATE
276
276
 
@@ -281,14 +281,14 @@ module ZMQ
281
281
  socket.setsockopt ZMQ::RECOVERY_IVL, rate
282
282
  array = []
283
283
  rc = socket.getsockopt(ZMQ::RECOVERY_IVL, array)
284
- rc.should == 0
285
- array[0].should == rate
284
+ expect(rc).to eq(0)
285
+ expect(array[0]).to eq(rate)
286
286
  end
287
287
 
288
288
  it "returns -1 given a negative value" do
289
289
  rate = -200
290
290
  rc = socket.setsockopt ZMQ::RECOVERY_IVL, rate
291
- rc.should == -1
291
+ expect(rc).to eq(-1)
292
292
  end
293
293
  end # context using option ZMQ::RECOVERY_IVL
294
294
 
@@ -299,8 +299,8 @@ module ZMQ
299
299
  socket.setsockopt ZMQ::SNDBUF, size
300
300
  array = []
301
301
  rc = socket.getsockopt(ZMQ::SNDBUF, array)
302
- rc.should == 0
303
- array[0].should == size
302
+ expect(rc).to eq(0)
303
+ expect(array[0]).to eq(size)
304
304
  end
305
305
  end # context using option ZMQ::SNDBUF
306
306
 
@@ -311,8 +311,8 @@ module ZMQ
311
311
  socket.setsockopt ZMQ::RCVBUF, size
312
312
  array = []
313
313
  rc = socket.getsockopt(ZMQ::RCVBUF, array)
314
- rc.should == 0
315
- array[0].should == size
314
+ expect(rc).to eq(0)
315
+ expect(array[0]).to eq(size)
316
316
  end
317
317
  end # context using option ZMQ::RCVBUF
318
318
 
@@ -323,8 +323,8 @@ module ZMQ
323
323
  socket.setsockopt ZMQ::LINGER, value
324
324
  array = []
325
325
  rc = socket.getsockopt(ZMQ::LINGER, array)
326
- rc.should == 0
327
- array[0].should == value
326
+ expect(rc).to eq(0)
327
+ expect(array[0]).to eq(value)
328
328
  end
329
329
 
330
330
  it "should set the socket message linger option to 0 for dropping packets" do
@@ -332,16 +332,16 @@ module ZMQ
332
332
  socket.setsockopt ZMQ::LINGER, value
333
333
  array = []
334
334
  rc = socket.getsockopt(ZMQ::LINGER, array)
335
- rc.should == 0
336
- array[0].should == value
335
+ expect(rc).to eq(0)
336
+ expect(array[0]).to eq(value)
337
337
  end
338
338
 
339
339
  it "should default to a value of 0" do
340
340
  value = [SUB, XSUB].include?(socket_type) ? 0 : -1
341
341
  array = []
342
342
  rc = socket.getsockopt(ZMQ::LINGER, array)
343
- rc.should == 0
344
- array[0].should == value
343
+ expect(rc).to eq(0)
344
+ expect(array[0]).to eq(value)
345
345
  end
346
346
  end # context using option ZMQ::LINGER
347
347
 
@@ -352,16 +352,16 @@ module ZMQ
352
352
  socket.setsockopt ZMQ::RECONNECT_IVL, value
353
353
  array = []
354
354
  rc = socket.getsockopt(ZMQ::RECONNECT_IVL, array)
355
- rc.should == 0
356
- array[0].should == value
355
+ expect(rc).to eq(0)
356
+ expect(array[0]).to eq(value)
357
357
  end
358
358
 
359
359
  it "should default to a value of 100" do
360
360
  value = 100
361
361
  array = []
362
362
  rc = socket.getsockopt(ZMQ::RECONNECT_IVL, array)
363
- rc.should == 0
364
- array[0].should == value
363
+ expect(rc).to eq(0)
364
+ expect(array[0]).to eq(value)
365
365
  end
366
366
  end # context using option ZMQ::RECONNECT_IVL
367
367
 
@@ -370,19 +370,19 @@ module ZMQ
370
370
  it "should set the maximum number of pending socket connections given a positive value" do
371
371
  value = 200
372
372
  rc = socket.setsockopt ZMQ::BACKLOG, value
373
- rc.should == 0
373
+ expect(rc).to eq(0)
374
374
  array = []
375
375
  rc = socket.getsockopt(ZMQ::BACKLOG, array)
376
- rc.should == 0
377
- array[0].should == value
376
+ expect(rc).to eq(0)
377
+ expect(array[0]).to eq(value)
378
378
  end
379
379
 
380
380
  it "should default to a value of 100" do
381
381
  value = 100
382
382
  array = []
383
383
  rc = socket.getsockopt(ZMQ::BACKLOG, array)
384
- rc.should == 0
385
- array[0].should == value
384
+ expect(rc).to eq(0)
385
+ expect(array[0]).to eq(value)
386
386
  end
387
387
  end # context using option ZMQ::BACKLOG
388
388
 
@@ -408,8 +408,8 @@ module ZMQ
408
408
  it "should return an FD as a positive integer" do
409
409
  array = []
410
410
  rc = socket.getsockopt(ZMQ::FD, array)
411
- rc.should == 0
412
- array[0].should > 0
411
+ expect(rc).to eq(0)
412
+ expect(array[0]).to be > 0
413
413
  end
414
414
 
415
415
  it "returns a valid FD that is accepted by the system poll() function" do
@@ -434,7 +434,7 @@ module ZMQ
434
434
 
435
435
  array = []
436
436
  rc = socket.getsockopt(ZMQ::FD, array)
437
- rc.should be_zero
437
+ expect(rc).to eq(0)
438
438
  fd = array[0]
439
439
 
440
440
  # setup the BSD poll_fd struct
@@ -444,18 +444,18 @@ module ZMQ
444
444
  pollfd[:revents] = 0
445
445
 
446
446
  rc = LibSocket.poll(pollfd, 1, 0)
447
- rc.should be_zero
447
+ expect(rc).to eq(0)
448
448
  end
449
449
  end
450
450
 
451
451
  end # posix platform
452
452
 
453
453
  context "using option ZMQ::EVENTS" do
454
- it "should return a mask of events as a Fixnum" do
454
+ it "should return a mask of events as an Integer" do
455
455
  array = []
456
456
  rc = socket.getsockopt(ZMQ::EVENTS, array)
457
- rc.should == 0
458
- array[0].should be_a(Fixnum)
457
+ expect(rc).to eq(0)
458
+ expect(array[0]).to be_a(Integer)
459
459
  end
460
460
  end
461
461
 
@@ -463,8 +463,8 @@ module ZMQ
463
463
  it "should return the socket type" do
464
464
  array = []
465
465
  rc = socket.getsockopt(ZMQ::TYPE, array)
466
- rc.should == 0
467
- array[0].should == socket_type
466
+ expect(rc).to eq(0)
467
+ expect(array[0]).to eq(socket_type)
468
468
  end
469
469
  end
470
470
  end # context #getsockopt
@@ -479,29 +479,29 @@ module ZMQ
479
479
  it "SUB socket that received a message always has POLLIN set" do
480
480
  events = []
481
481
  rc = @sub.getsockopt(ZMQ::EVENTS, events)
482
- rc.should == 0
483
- events[0].should == ZMQ::POLLIN
482
+ expect(rc).to eq(0)
483
+ expect(events[0]).to eq ZMQ::POLLIN
484
484
  end
485
485
 
486
486
  it "PUB socket always has POLLOUT set" do
487
487
  events = []
488
488
  rc = @pub.getsockopt(ZMQ::EVENTS, events)
489
- rc.should == 0
490
- events[0].should == ZMQ::POLLOUT
489
+ expect(rc).to eq(0)
490
+ expect(events[0]).to eq ZMQ::POLLOUT
491
491
  end
492
492
 
493
493
  it "PUB socket never has POLLIN set" do
494
494
  events = []
495
495
  rc = @pub.getsockopt(ZMQ::EVENTS, events)
496
- rc.should == 0
497
- events[0].should_not == ZMQ::POLLIN
496
+ expect(rc).to eq(0)
497
+ expect(events[0]).not_to eq ZMQ::POLLIN
498
498
  end
499
499
 
500
500
  it "SUB socket never has POLLOUT set" do
501
501
  events = []
502
502
  rc = @sub.getsockopt(ZMQ::EVENTS, events)
503
- rc.should == 0
504
- events[0].should_not == ZMQ::POLLOUT
503
+ expect(rc).to eq(0)
504
+ expect(events[0]).not_to eq ZMQ::POLLOUT
505
505
  end
506
506
  end # shared example for pubsub
507
507
 
@@ -514,7 +514,7 @@ module ZMQ
514
514
  endpoint = "inproc://socket_test"
515
515
  @sub = @ctx.socket ZMQ::SUB
516
516
  rc = @sub.setsockopt ZMQ::SUBSCRIBE, ''
517
- rc.should == 0
517
+ expect(rc).to eq(0)
518
518
 
519
519
  @pub = @ctx.socket ZMQ::PUB
520
520
  @sub.bind(endpoint)
@@ -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'
@@ -1,15 +1,28 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIICRzCCAbCgAwIBAgIJAIhPfXaKAijbMA0GCSqGSIb3DQEBBQUAMCIxCzAJBgNV
3
- BAYTAlhZMRMwEQYDVQQIEwpOZXJ2ZXJsYW5kMB4XDTEyMDgyODE2NDIzMloXDTEz
4
- MDgyODE2NDIzMlowIjELMAkGA1UEBhMCWFkxEzARBgNVBAgTCk5lcnZlcmxhbmQw
5
- gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPTe1/MFg4gGjB5Kx/XzP5HQys2k
6
- R+X7+h+cG7jz9p8mNiW/G54WQX7z4EzLrSFrNdXhe6NRXzqcVtyNl9NPh4QpPpOi
7
- ddOjNWworai6d7NShK4gFzL62qY5gSsZ4TYLxfSDEy6Zggy0fFFu8C7iHJVo/1kY
8
- A1OxikDkbfHX0rW3AgMBAAGjgYQwgYEwHQYDVR0OBBYEFEbSBVWuzrSmust9Sa6J
9
- sm7Tg40KMFIGA1UdIwRLMEmAFEbSBVWuzrSmust9Sa6Jsm7Tg40KoSakJDAiMQsw
10
- CQYDVQQGEwJYWTETMBEGA1UECBMKTmVydmVybGFuZIIJAIhPfXaKAijbMAwGA1Ud
11
- EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAS0+17FjKmjCPHfJApTZgVXGD/LHC
12
- Bdzo+bl/hWpMyF27CUJxdZOMRpHqpE/Qv77jG/tfHnuArYPwDcB8AIErmvhNKCZx
13
- GLm19kTd4K1Y5JcAqkOHBma1e1V/g4ryWvUtpQkqD6tQxX0ctlBmXXK/Jsj/wG0W
14
- NNCQq2S19aNZcGo=
2
+ MIIE1DCCArygAwIBAgIBADANBgkqhkiG9w0BAQUFADAcMRowGAYDVQQDDBFub2Jv
3
+ ZHkvREM9ZXhhbXBsZTAeFw0xOTAxMDUxNjAxMThaFw0yOTAxMDIxNjAxMThaMBwx
4
+ GjAYBgNVBAMMEW5vYm9keS9EQz1leGFtcGxlMIICIjANBgkqhkiG9w0BAQEFAAOC
5
+ Ag8AMIICCgKCAgEA5oQhrlSbC9UjEihMsnoF4JFk38HVOkiVRRtLr+UWBYEXI5Xt
6
+ aKXoz1OFgZuVUQWuNrZ7HKaSGzZUSlp1AKx9svLzlCrDP4q/s31ZYE3fnAOvbEVH
7
+ +Xfns1gLYhSZEbYIzv5waW3hFLXQmZMSgvU6XB2cO7vZivTzjhvhPwkkIY5G23Ta
8
+ 20hemZKd7cKI+ricyTeg7eQ3QoNmCbSDvcAz/CiePX4qYwKfE6wBEcKRPB2F2LfW
9
+ U3V8oNdAY2otSXOKLvxXgqsMaUUo/+TZAdOAdCG1bhInV2z30KbtjYuoldN6Qpml
10
+ v+jmzlTkEIg2JO0VwkSrkI3F7UBz/sNFj1xYx8KY76KsfFQ7TyCMMuJJ8WC58Q9J
11
+ +tz/tx2uLxWU/hFjc7OPJ2lL4pNxAi3r6D5KYHQOplLGGB9x5F2ulkjo0Ea4CUR5
12
+ 2yh8mxHSTrETjLzV+Z6bjbqL178Kfelvpd0ZjuqvrUBXDdj6t+VglICw78bX+GQR
13
+ QpCzl4n65A1WZYJSQzccGKlipgfypEMalv3QLZxyJe1w8xtkuB+rBGb3m5c6xSok
14
+ K4q11szlBS7lN439oY5NEKULRUyMqt++0y/l7bWsGmJpl5I03HA044cYXGm4WwCE
15
+ Ldp+geNAF6DP1vIcrvCJSzJZX78NaxSHQ8WFvTt+W9WnMnmiQnAjBk8TP88CAwEA
16
+ AaMhMB8wHQYDVR0OBBYEFFY+V2zaAFjUn9dZHWzXOzmR6GoIMA0GCSqGSIb3DQEB
17
+ BQUAA4ICAQBO2snAHYhn0lwSpp6rql1VUJexndMhTdDMpYV+VAyqGsVsmq3iD2aC
18
+ O9CWtyGRfiK3AsxjCIQjP/n19YzYoxs6/eSCWnpMd4WlL+W2Nkgj/2fUdvV3qM7Y
19
+ dv+jd5ov1Dxoz/nUbhxXozMd7V7k0EdqpjObp8sED/eO3niuSfbGO6Ef2DwjqOWK
20
+ ukLMO7l67sAcHH1tW8fbvSPpVZ8NJdJx6Q5C+/lTDpDQP7OlRjXe5T7h4fl1OOEZ
21
+ hCpW+Hq3Jf/uqH9zbjynVncqgd6PkO2BCuD9P+aDBZ6no5+3jebTlx+OHndrgXgH
22
+ 9QN0ifiQGMcBYh4Iv0JQgSiW8dGzYuP8BsxJ3fOWGW9wZAelvI3lS9Yii6GVH44D
23
+ QdhQlYwpoiZq1A2kOzsKy86nejRpeQg965ddNLw1yNMJO9yL1FtmwEiF9VLvhdTd
24
+ gh92imoxNtOyBiGvqn537+ZrQmQPU8OM0zySI9+mhC6E7ASTVquGUC5bCHSjavVR
25
+ AaeQoXQp0NwqoO6Qw9QIAVRaW0cPw3lnIZLGk++XHuWkrgkqdQMcKit80oiGZ+Bq
26
+ usfXTVeXMoYjw2MJ+RRxkePD4FXCulErG10Dqga36zMTrq1UqbVDVMjkO2OAbypW
27
+ Z5PCmTr1vgYgzSHr/bx833wWP/8KyClU78YF4nZSmAgywXfSjo2rpA==
15
28
  -----END CERTIFICATE-----
@@ -1,15 +1,51 @@
1
1
  -----BEGIN RSA PRIVATE KEY-----
2
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- j/XwOPp7WiWl9dgJ25wQrkYOrYMkZ9SqHO0SSxeSo2yT
2
+ MIIJKgIBAAKCAgEA5oQhrlSbC9UjEihMsnoF4JFk38HVOkiVRRtLr+UWBYEXI5Xt
3
+ aKXoz1OFgZuVUQWuNrZ7HKaSGzZUSlp1AKx9svLzlCrDP4q/s31ZYE3fnAOvbEVH
4
+ +Xfns1gLYhSZEbYIzv5waW3hFLXQmZMSgvU6XB2cO7vZivTzjhvhPwkkIY5G23Ta
5
+ 20hemZKd7cKI+ricyTeg7eQ3QoNmCbSDvcAz/CiePX4qYwKfE6wBEcKRPB2F2LfW
6
+ U3V8oNdAY2otSXOKLvxXgqsMaUUo/+TZAdOAdCG1bhInV2z30KbtjYuoldN6Qpml
7
+ v+jmzlTkEIg2JO0VwkSrkI3F7UBz/sNFj1xYx8KY76KsfFQ7TyCMMuJJ8WC58Q9J
8
+ +tz/tx2uLxWU/hFjc7OPJ2lL4pNxAi3r6D5KYHQOplLGGB9x5F2ulkjo0Ea4CUR5
9
+ 2yh8mxHSTrETjLzV+Z6bjbqL178Kfelvpd0ZjuqvrUBXDdj6t+VglICw78bX+GQR
10
+ QpCzl4n65A1WZYJSQzccGKlipgfypEMalv3QLZxyJe1w8xtkuB+rBGb3m5c6xSok
11
+ K4q11szlBS7lN439oY5NEKULRUyMqt++0y/l7bWsGmJpl5I03HA044cYXGm4WwCE
12
+ Ldp+geNAF6DP1vIcrvCJSzJZX78NaxSHQ8WFvTt+W9WnMnmiQnAjBk8TP88CAwEA
13
+ AQKCAgEArLya2J4ByW4f571XK+8QdGW/Z4VCmXhGkxCPOPG7/MftZPc2flLFEIeP
14
+ 5b2GuL4+/DTmMGQJ3GZr54O9ZZHcZ7pzGLaqtPTuDjyCOw5f3/NLAyEvfBuD/vqd
15
+ HRQ+V+1G0IYOCpMSNYjBFjQFjSjiYKC3sHNl4yEHWZg+xBO/hX2uT0lTrzqd2Qrr
16
+ WX2LVAX/RzFuYJXBaxA36FHi3tAmpHBzk7T1YlhWiFE+Q+a/GoMtB2dLLiM+DvD+
17
+ CQFJil8QT4E8umge1svCm28LxriM63lPEXp9DKBVW3+bR5Q98ngUh8/HSvXl7vvi
18
+ IxlPKYCX64m13o6+oLjJs0D04SbcRvi+G8zAbBgvtUTDfceTFM0DtKhmNGrC0Zp+
19
+ 0kc7iUGuwTS+nS1/KXWTrHb5NwPnazeaqsqaf+5Y7JEei62Zqj4eTc2cx+8RrDl5
20
+ aae97/lHBh478wBblwueu6XkcLLKvkPWDAZcehd/8TiUHu3QbdVJ6b/pJ+aRBZi7
21
+ dmDzXmrHoVkesHQNn7bD3bCVgmCKne71U4m33YhxGejzA0ujKkkrL2m/OgOM5oWE
22
+ koxW+DPVxp0HGsPIPJwMc7aK6XDjvlJ3zl+YwE6INrLTb/NL1jCGTOJlNANliCXZ
23
+ /QhTKZDgBZQ/WoMr5WPIrLH8D9WY6KwfFr/pZ/NgWzExGBXkTfECggEBAPgT9wsI
24
+ ug8GTQkLL6ta8c+RFTIXJNlRujEm9Sr9upSSSpzawjLTr5rJt2WYEBbhpx8qwc8k
25
+ LMFK8BwAXKuh33yfYWWgcpq7mi/mywnpDztcYyhhSFFNaVLpYQn8sPm3f/TcU9sp
26
+ aKA0VqWPlpr4KDoFxlQ3HS7LUVaorKKnRdIK87dy+ibYzLgflHsi6M/mzBidjLgT
27
+ pBf76pnpUM0at2ckj7r2tox6t/eTBvAhM328H6ZsP7meZuNVbSqHECZ9TmpVTGMC
28
+ YRmoNJGpA00+DNyFILQ3puxou46gauB/XHvQstRqJd09N5DT/ie7JAP5XyrDqBlR
29
+ 3ELyM/xw/CjCUNUCggEBAO3gmT74EOru23kYA4WUYz7WLOFynYtfWzy9ihlkamEI
30
+ ZqeBpOGVLV5xYZnKF15pgqznTLtnEHJ3l1f28yBUe/YpkQH1pKsanW1NJ4F4Ht3R
31
+ yo/yeWQ0imNMz2hWHcqwEUg6SsQZvZjOAfTxfanB2gE7/9JuK1jqaR30IVqj82u6
32
+ 60i9DhtLKT4fv/M84V5f/X6EbFd9kbxDD3bH3J9Nd5U3s/xIzfX9bpOKJRtiQJ8Y
33
+ yGY6KhMUNSklJLvDBtss7fRDlgFIypyT18z6hLoxVfDIW7VYuQ2VRX6YrLU4dVp2
34
+ ciA+zelJW/ymfs/UxzlNkqLa/E2KOfd3JpQ+HGuqQBMCggEBANOl7OnMCzkQTh7+
35
+ HTBbidxl0iiHGFgUYv7WVurTyCBDY0bJWE+WzMYJfN8/SdLLuBJeHzXDji9m6M1q
36
+ /aUsmIgxTh4vMjeTAKwHgog0/1rMqohj3xgGLGqhU7n6jV6vUIqugxiDDpFHtfjQ
37
+ NVSHjYJbNObakpo+umltxMOMZIQb9ew4OvVzl80qnDomAWyGYvBJUiomD6Sqt2+S
38
+ X+5s8bYcukdvfzUA6f1dwdiS6uRF4NbSmdeaLfucAWP8ESpVU9ZiaaY6/G6wVBFF
39
+ mdyHqN9m8QzwQgiGHiZD9IsN/fBgkIGrAhzrwoFcbASno8WENs48WSko7vtqujGQ
40
+ j4GSrvUCggEBAOJ5/+1PyOukVhjIoDHBwWvGBhzvPse/FeKSorTiQdX4ZaP9brnH
41
+ idZtJHuDSRR+aAeugAO8cJBLBDCf0YJqbUtE7+ZptUmioVe7KW2+q8SNRMogFSsu
42
+ SsOYEbBIrTyYvRuDREPILhcZrAtFEFtbUO/z6/CxK1wQcdwu3sKpbcyXvgMW3CNo
43
+ P/AB0oMG55su0O5vrabuyp3vSv3P82FIJB5RVm9P8afOjkSyNfoIZXYT5lhN8FkR
44
+ 2DtAPeT2HcT21ebFoj++ygihScjCizOqXSRN3eKegjFIeU26llRDWJe0RZwlr234
45
+ hjfZXMsKzlLkZEPhMm2wuNe+/WAOcoifIzkCggEAHfwLXoJ0k3nlL/O1r6uKpWv8
46
+ heI+wAbcwfkUBBvJNA3QVmrgmpTaLFoV+neaXuK4FsniFNWw0Bh2Ap+4NsrMX/rb
47
+ 5Movo/ejwdCgDBCxguVUy2bglY0Zgph16AMHCK8O6qPbI/rTITu2zz61deI2hvpe
48
+ 3qJHfeBHSQ4m6DoRFQ7LCdIKy15Vo3Gj43opUJhKy1OBATJAOVytP+7TtlFQOCq6
49
+ 8x05z8O/HGQd069dbt8R8TJYg66ocDW7KmtFZnCr6Wp/I0uqFzG3ySbAbR7FpXQm
50
+ u2wiNaNCr9HpKYIWX/PkHOadFak95KlBiFoAVwMDKQp27RmgPnGHdQGCXvUppg==
15
51
  -----END RSA PRIVATE KEY-----
data/spec/util_spec.rb ADDED
@@ -0,0 +1,29 @@
1
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
2
+
3
+ module ZMQ
4
+ describe Util do
5
+
6
+ if LibZMQ.version4?
7
+ describe "curve_keypair" do
8
+
9
+ it "returns a set of public and private keys (libsodium linked)" do
10
+ expect(ZMQ::Util).to receive(:curve_keypair).and_return([0, 1])
11
+ public_key, private_key = ZMQ::Util.curve_keypair
12
+
13
+ expect(public_key).not_to eq private_key
14
+ expect(public_key).not_to be_nil
15
+ expect(private_key).not_to be_nil
16
+ end
17
+
18
+ it "raises if zmq does not support CURVE (libsodium not linked)" do
19
+ expect do
20
+ allow(LibZMQ).to receive(:zmq_curve_keypair).and_return(-1)
21
+ ZMQ::Util.curve_keypair
22
+ end.to raise_exception(ZMQ::NotSupportedError)
23
+ end
24
+
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ #/bin/bash
2
+ set -ev
3
+
4
+ bundle install
5
+
6
+ sudo apt-get -qq update
7
+ sudo apt-get install libtool pkg-config build-essential autoconf automake wget
8
+
9
+ git clone https://github.com/jedisct1/libsodium --branch stable
10
+ cd libsodium
11
+ ./autogen.sh
12
+ ./configure && make check
13
+ sudo make install
14
+ cd ..
15
+
16
+ VERSION="4.2.2"
17
+ BASE="zeromq-${VERSION}"
18
+ TARBALL="${BASE}.tar.gz"
19
+ wget https://github.com/zeromq/libzmq/releases/download/v$VERSION/$TARBALL
20
+ tar -xvf $TARBALL
21
+ cd $BASE
22
+ ./autogen.sh
23
+ ./configure && make check
24
+ sudo make install
25
+ sudo ldconfig
26
+
27
+ bundle exec rake spec