File: spec_helper.rb

package info (click to toggle)
ruby-ffi-rzmq 2.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 380 kB
  • ctags: 204
  • sloc: ruby: 2,945; makefile: 2
file content (99 lines) | stat: -rw-r--r-- 2,142 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99

require File.expand_path(
File.join(File.dirname(__FILE__), %w[.. lib ffi-rzmq]))

Thread.abort_on_exception = true

require 'openssl'
require 'socket'
require 'securerandom'

# define some version guards so we can turn on/off specs based upon
# the version of the 0mq library that is loaded
def version4?
  ZMQ::LibZMQ.version4?
end

def jruby?
  RUBY_PLATFORM =~ /java/
end


def connect_to_inproc(socket, endpoint)
  begin
    rc = socket.connect(endpoint)
  end until ZMQ::Util.resultcode_ok?(rc)
end

module APIHelper
  def poller_setup
    @helper_poller = ZMQ::Poller.new
  end

  def poller_register_socket(socket)
    @helper_poller.register(socket, ZMQ::POLLIN)
  end

  def poller_deregister_socket(socket)
    @helper_poller.deregister(socket, ZMQ::POLLIN)
  end

  def poll_delivery
    # timeout after 1 second
    @helper_poller.poll(1000)
  end

  def poll_it_for_read(socket, &blk)
    poller_register_socket(socket)
    blk.call
    poll_delivery
    poller_deregister_socket(socket)
  end

  # generate a random port between 10_000 and 65534
  def random_port
    rand(55534) + 10_000
  end

  def bind_to_random_tcp_port(socket, max_tries = 500)
    tries = 0
    rc = -1

    while !ZMQ::Util.resultcode_ok?(rc) && tries < max_tries
      tries += 1
      random = random_port
      rc = socket.bind(local_transport_string(random))
    end

    unless ZMQ::Util.resultcode_ok?(rc)
      raise "Could not bind to random port successfully; retries all failed!"
    end

    random
  end

  def connect_to_random_tcp_port socket, max_tries = 500
    tries = 0
    rc = -1

    while !ZMQ::Util.resultcode_ok?(rc) && tries < max_tries
      tries += 1
      random = random_port
      rc = socket.connect(local_transport_string(random))
    end

    unless ZMQ::Util.resultcode_ok?(rc)
      raise "Could not connect to random port successfully; retries all failed!"
    end

    random
  end

  def local_transport_string(port)
    "tcp://127.0.0.1:#{port}"
  end

  def assert_ok(rc)
    raise "Failed with rc [#{rc}] and errno [#{ZMQ::Util.errno}], msg [#{ZMQ::Util.error_string}]! #{caller(0)}" unless rc >= 0
  end
end