posix_mq 0.5.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +1 -0
- data/.gitignore +1 -0
- data/.manifest +2 -1
- data/.wrongdoc.yml +7 -0
- data/ChangeLog +501 -71
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +30 -44
- data/LATEST +6 -0
- data/NEWS +14 -7
- data/README +2 -0
- data/Rakefile +1 -103
- data/ext/posix_mq/extconf.rb +1 -1
- data/ext/posix_mq/posix_mq.c +145 -79
- data/lib/posix_mq.rb +2 -2
- data/posix_mq.gemspec +11 -22
- data/test/test_posix_mq.rb +58 -13
- metadata +38 -9
- data/local.mk.sample +0 -70
data/lib/posix_mq.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
2
|
class POSIX_MQ
|
3
3
|
|
4
|
-
# version of POSIX_MQ, currently 0.
|
5
|
-
VERSION = '0.
|
4
|
+
# version of POSIX_MQ, currently 0.6.0
|
5
|
+
VERSION = '0.6.0'
|
6
6
|
|
7
7
|
# An analogous Struct to "struct mq_attr" in C.
|
8
8
|
# This may be used in arguments for POSIX_MQ.new and
|
data/posix_mq.gemspec
CHANGED
@@ -1,39 +1,28 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
|
-
|
3
2
|
ENV["VERSION"] or abort "VERSION= must be specified"
|
4
3
|
manifest = File.readlines('.manifest').map! { |x| x.chomp! }
|
5
|
-
|
4
|
+
require 'wrongdoc'
|
5
|
+
extend Wrongdoc::Gemspec
|
6
|
+
name, summary, title = readme_metadata
|
6
7
|
|
7
8
|
Gem::Specification.new do |s|
|
8
9
|
s.name = %q{posix_mq}
|
9
|
-
s.version = ENV["VERSION"]
|
10
|
-
|
10
|
+
s.version = ENV["VERSION"].dup
|
11
11
|
s.authors = ["Ruby POSIX MQ hackers"]
|
12
12
|
s.date = Time.now.utc.strftime('%Y-%m-%d')
|
13
|
-
s.description =
|
13
|
+
s.description = readme_description
|
14
14
|
s.email = %q{ruby.posix.mq@librelist.com}
|
15
15
|
s.executables = %w(posix-mq-rb)
|
16
16
|
s.extensions = %w(ext/posix_mq/extconf.rb)
|
17
|
-
|
18
|
-
s.extra_rdoc_files = File.readlines('.document').map! do |x|
|
19
|
-
x.chomp!
|
20
|
-
if File.directory?(x)
|
21
|
-
manifest.grep(%r{\A#{x}/})
|
22
|
-
elsif File.file?(x)
|
23
|
-
x
|
24
|
-
else
|
25
|
-
nil
|
26
|
-
end
|
27
|
-
end.flatten.compact
|
28
|
-
|
17
|
+
s.extra_rdoc_files = extra_rdoc_files(manifest)
|
29
18
|
s.files = manifest
|
30
|
-
s.homepage =
|
31
|
-
s.summary =
|
32
|
-
s.rdoc_options =
|
19
|
+
s.homepage = Wrongdoc.config[:rdoc_url]
|
20
|
+
s.summary = summary
|
21
|
+
s.rdoc_options = rdoc_options
|
33
22
|
s.require_paths = %w(lib)
|
34
23
|
s.rubyforge_project = %q{qrp}
|
35
|
-
|
36
|
-
s.
|
24
|
+
s.test_files = manifest.grep(%r{\Atest/test_.*\.rb\z})
|
25
|
+
s.add_development_dependency(%q<wrongdoc>, "~> 1.0")
|
37
26
|
|
38
27
|
# s.licenses = %w(LGPLv3) # accessor not compatible with older RubyGems
|
39
28
|
end
|
data/test/test_posix_mq.rb
CHANGED
@@ -3,15 +3,13 @@ require 'test/unit'
|
|
3
3
|
require 'posix_mq'
|
4
4
|
require 'thread'
|
5
5
|
require 'fcntl'
|
6
|
-
require 'set'
|
7
6
|
$stderr.sync = $stdout.sync = true
|
8
7
|
|
9
8
|
class Test_POSIX_MQ < Test::Unit::TestCase
|
10
|
-
METHODS = Set.new(POSIX_MQ.instance_methods.map { |x| x.to_sym })
|
11
9
|
|
12
|
-
|
10
|
+
POSIX_MQ.method_defined?(:to_io) or
|
13
11
|
warn "POSIX_MQ#to_io not supported on this platform: #{RUBY_PLATFORM}"
|
14
|
-
|
12
|
+
POSIX_MQ.method_defined?(:notify) or
|
15
13
|
warn "POSIX_MQ#notify not supported on this platform: #{RUBY_PLATFORM}"
|
16
14
|
|
17
15
|
def setup
|
@@ -27,6 +25,13 @@ class Test_POSIX_MQ < Test::Unit::TestCase
|
|
27
25
|
assert @mq.closed?
|
28
26
|
end
|
29
27
|
|
28
|
+
def test_gc
|
29
|
+
assert_nothing_raised do
|
30
|
+
2025.times { POSIX_MQ.new(@path, :rw) }
|
31
|
+
2025.times { @mq = POSIX_MQ.new(@path, :rw); @mq.to_io }
|
32
|
+
end
|
33
|
+
end unless defined?RUBY_ENGINE && RUBY_ENGINE == "rbx"
|
34
|
+
|
30
35
|
def test_name_clobber_proof
|
31
36
|
@mq = POSIX_MQ.new(@path, :rw)
|
32
37
|
tmp = @mq.name
|
@@ -44,14 +49,40 @@ class Test_POSIX_MQ < Test::Unit::TestCase
|
|
44
49
|
assert_equal @mq.object_id, clone.object_id
|
45
50
|
end
|
46
51
|
|
47
|
-
def
|
52
|
+
def test_timed_receive_float
|
48
53
|
interval = 0.01
|
49
54
|
@mq = POSIX_MQ.new(@path, :rw)
|
50
55
|
assert ! @mq.nonblock?
|
51
56
|
t0 = Time.now
|
52
57
|
assert_raises(Errno::ETIMEDOUT) { @mq.receive "", interval }
|
53
58
|
elapsed = Time.now - t0
|
54
|
-
assert elapsed > interval
|
59
|
+
assert elapsed > interval, elapsed.inspect
|
60
|
+
assert elapsed < 0.02, elapsed.inspect
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_timed_receive_divmod
|
64
|
+
interval = Object.new
|
65
|
+
def interval.divmod(num)
|
66
|
+
num == 1 ? [ 0, 0.01 ] : nil
|
67
|
+
end
|
68
|
+
@mq = POSIX_MQ.new(@path, :rw)
|
69
|
+
assert ! @mq.nonblock?
|
70
|
+
t0 = Time.now
|
71
|
+
assert_raises(Errno::ETIMEDOUT) { @mq.receive "", interval }
|
72
|
+
elapsed = Time.now - t0
|
73
|
+
assert elapsed >= 0.01, elapsed.inspect
|
74
|
+
assert elapsed <= 0.02, elapsed.inspect
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_timed_receive_fixnum
|
78
|
+
interval = 1
|
79
|
+
@mq = POSIX_MQ.new(@path, :rw)
|
80
|
+
assert ! @mq.nonblock?
|
81
|
+
t0 = Time.now
|
82
|
+
assert_raises(Errno::ETIMEDOUT) { @mq.receive "", interval }
|
83
|
+
elapsed = Time.now - t0
|
84
|
+
assert elapsed >= interval, elapsed.inspect
|
85
|
+
assert elapsed < 1.10, elapsed.inspect
|
55
86
|
end
|
56
87
|
|
57
88
|
def test_timed_send
|
@@ -155,7 +186,7 @@ class Test_POSIX_MQ < Test::Unit::TestCase
|
|
155
186
|
@mq = POSIX_MQ.new @path, IO::CREAT|IO::RDWR, 0666
|
156
187
|
assert @mq.to_io.kind_of?(IO)
|
157
188
|
assert_nothing_raised { IO.select([@mq], nil, nil, 0) }
|
158
|
-
end if
|
189
|
+
end if POSIX_MQ.method_defined?(:to_io)
|
159
190
|
|
160
191
|
def test_notify
|
161
192
|
rd, wr = IO.pipe
|
@@ -224,7 +255,7 @@ class Test_POSIX_MQ < Test::Unit::TestCase
|
|
224
255
|
def test_new_sym_w
|
225
256
|
@mq = POSIX_MQ.new @path, :w
|
226
257
|
assert_equal IO::WRONLY, @mq.to_io.fcntl(Fcntl::F_GETFL)
|
227
|
-
end if
|
258
|
+
end if POSIX_MQ.method_defined?(:to_io)
|
228
259
|
|
229
260
|
def test_new_sym_r
|
230
261
|
@mq = POSIX_MQ.new @path, :w
|
@@ -232,7 +263,7 @@ class Test_POSIX_MQ < Test::Unit::TestCase
|
|
232
263
|
assert_nothing_raised { mq = POSIX_MQ.new @path, :r }
|
233
264
|
assert_equal IO::RDONLY, mq.to_io.fcntl(Fcntl::F_GETFL)
|
234
265
|
assert_nil mq.close
|
235
|
-
end if
|
266
|
+
end if POSIX_MQ.method_defined?(:to_io)
|
236
267
|
|
237
268
|
def test_new_path_only
|
238
269
|
@mq = POSIX_MQ.new @path, :w
|
@@ -240,12 +271,12 @@ class Test_POSIX_MQ < Test::Unit::TestCase
|
|
240
271
|
assert_nothing_raised { mq = POSIX_MQ.new @path }
|
241
272
|
assert_equal IO::RDONLY, mq.to_io.fcntl(Fcntl::F_GETFL)
|
242
273
|
assert_nil mq.close
|
243
|
-
end if
|
274
|
+
end if POSIX_MQ.method_defined?(:to_io)
|
244
275
|
|
245
276
|
def test_new_sym_wr
|
246
277
|
@mq = POSIX_MQ.new @path, :rw
|
247
278
|
assert_equal IO::RDWR, @mq.to_io.fcntl(Fcntl::F_GETFL)
|
248
|
-
end if
|
279
|
+
end if POSIX_MQ.method_defined?(:to_io)
|
249
280
|
|
250
281
|
def test_new_attr
|
251
282
|
mq_attr = POSIX_MQ::Attr.new(IO::NONBLOCK, 1, 1, 0)
|
@@ -280,7 +311,7 @@ class Test_POSIX_MQ < Test::Unit::TestCase
|
|
280
311
|
assert_nothing_raised { @mq.notify { |mq| q << "hi" } }
|
281
312
|
assert_nothing_raised { Process.waitpid2(fork { @mq << "bye" }) }
|
282
313
|
assert_equal "hi", q.pop
|
283
|
-
end if
|
314
|
+
end if POSIX_MQ.method_defined?(:notify)
|
284
315
|
|
285
316
|
def test_notify_thread
|
286
317
|
q = Queue.new
|
@@ -290,5 +321,19 @@ class Test_POSIX_MQ < Test::Unit::TestCase
|
|
290
321
|
x = q.pop
|
291
322
|
assert x.instance_of?(Thread)
|
292
323
|
assert Thread.current != x
|
293
|
-
end if
|
324
|
+
end if POSIX_MQ.method_defined?(:notify)
|
325
|
+
|
326
|
+
def test_bad_open_mode
|
327
|
+
assert_raises(ArgumentError) { mq = POSIX_MQ.new(@path, "rw") }
|
328
|
+
end
|
329
|
+
|
330
|
+
def test_bad_open_attr
|
331
|
+
assert_raises(TypeError) { POSIX_MQ.new(@path, :rw, 0666, [0, 1, 1, 0]) }
|
332
|
+
end
|
333
|
+
|
334
|
+
def test_bad_setattr
|
335
|
+
@mq = POSIX_MQ.new @path, IO::CREAT|IO::WRONLY, 0666
|
336
|
+
assert_raises(TypeError) { @mq.attr = {} }
|
337
|
+
assert_raises(TypeError) { @mq.attr = Struct.new(:a,:b,:c,:d).new }
|
338
|
+
end
|
294
339
|
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: posix_mq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 7
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 6
|
9
|
+
- 0
|
10
|
+
version: 0.6.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Ruby POSIX MQ hackers
|
@@ -9,10 +15,24 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-12-25 00:00:00 +00:00
|
13
19
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: wrongdoc
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
version: "1.0"
|
34
|
+
type: :development
|
35
|
+
version_requirements: *id001
|
16
36
|
description: |-
|
17
37
|
POSIX message queues allow local processes to exchange data in the form
|
18
38
|
of messages. This API is distinct from that provided by System V
|
@@ -29,10 +49,12 @@ extra_rdoc_files:
|
|
29
49
|
- ChangeLog
|
30
50
|
- lib/posix_mq.rb
|
31
51
|
- ext/posix_mq/posix_mq.c
|
52
|
+
- LATEST
|
32
53
|
files:
|
33
54
|
- .document
|
34
55
|
- .gitignore
|
35
56
|
- .manifest
|
57
|
+
- .wrongdoc.yml
|
36
58
|
- COPYING
|
37
59
|
- ChangeLog
|
38
60
|
- Documentation/.gitignore
|
@@ -41,6 +63,7 @@ files:
|
|
41
63
|
- GIT-VERSION-FILE
|
42
64
|
- GIT-VERSION-GEN
|
43
65
|
- GNUmakefile
|
66
|
+
- LATEST
|
44
67
|
- LICENSE
|
45
68
|
- NEWS
|
46
69
|
- README
|
@@ -49,7 +72,6 @@ files:
|
|
49
72
|
- ext/posix_mq/extconf.rb
|
50
73
|
- ext/posix_mq/posix_mq.c
|
51
74
|
- lib/posix_mq.rb
|
52
|
-
- local.mk.sample
|
53
75
|
- man/man1/posix-mq-rb.1
|
54
76
|
- posix_mq.gemspec
|
55
77
|
- setup.rb
|
@@ -60,27 +82,34 @@ licenses: []
|
|
60
82
|
|
61
83
|
post_install_message:
|
62
84
|
rdoc_options:
|
63
|
-
- -Na
|
64
85
|
- -t
|
65
86
|
- posix_mq - POSIX Message Queues for Ruby
|
87
|
+
- -W
|
88
|
+
- http://git.bogomips.org/cgit/ruby_posix_mq.git/tree/%s
|
66
89
|
require_paths:
|
67
90
|
- lib
|
68
91
|
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
69
93
|
requirements:
|
70
94
|
- - ">="
|
71
95
|
- !ruby/object:Gem::Version
|
96
|
+
hash: 3
|
97
|
+
segments:
|
98
|
+
- 0
|
72
99
|
version: "0"
|
73
|
-
version:
|
74
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
75
102
|
requirements:
|
76
103
|
- - ">="
|
77
104
|
- !ruby/object:Gem::Version
|
105
|
+
hash: 3
|
106
|
+
segments:
|
107
|
+
- 0
|
78
108
|
version: "0"
|
79
|
-
version:
|
80
109
|
requirements: []
|
81
110
|
|
82
111
|
rubyforge_project: qrp
|
83
|
-
rubygems_version: 1.3.
|
112
|
+
rubygems_version: 1.3.7
|
84
113
|
signing_key:
|
85
114
|
specification_version: 3
|
86
115
|
summary: POSIX Message Queues for Ruby
|
data/local.mk.sample
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
# this is a sample local.mk file, feel free to modify it for your needs
|
2
|
-
# GNUmakefile will source local.mk in the top-level source tree
|
3
|
-
# if it is present.
|
4
|
-
#
|
5
|
-
# This is depends on a bunch of GNU-isms from bash, touch.
|
6
|
-
|
7
|
-
RSYNC = rsync
|
8
|
-
DLEXT := so
|
9
|
-
gems :=
|
10
|
-
|
11
|
-
# Avoid loading rubygems to speed up tests because gmake is
|
12
|
-
# fork+exec heavy with Ruby.
|
13
|
-
prefix = $(HOME)
|
14
|
-
ifeq ($(r19),)
|
15
|
-
RUBY := $(prefix)/bin/ruby
|
16
|
-
gem_paths := $(addprefix $(prefix)/lib/ruby/gems/1.8/gems/,$(gems))
|
17
|
-
else
|
18
|
-
prefix := $(prefix)/ruby-1.9
|
19
|
-
export PATH := $(prefix)/bin:$(PATH)
|
20
|
-
RUBY := $(prefix)/bin/ruby --disable-gems
|
21
|
-
gem_paths := $(addprefix $(prefix)/lib/ruby/gems/1.9.1/gems/,$(gems))
|
22
|
-
endif
|
23
|
-
|
24
|
-
ifdef gem_paths
|
25
|
-
sp :=
|
26
|
-
sp +=
|
27
|
-
export RUBYLIB := $(subst $(sp),:,$(addsuffix /lib,$(gem_paths)))
|
28
|
-
endif
|
29
|
-
|
30
|
-
# pipefail is THE reason to use bash (v3+) or never revisions of ksh93
|
31
|
-
# SHELL := /bin/bash -e -o pipefail
|
32
|
-
SHELL := /bin/ksh93 -e -o pipefail
|
33
|
-
|
34
|
-
# trace execution of tests
|
35
|
-
# TRACER = strace -f -o $(t_pfx).strace -s 100000
|
36
|
-
TRACER = /usr/bin/time -v -o $(t_pfx).time
|
37
|
-
|
38
|
-
full-test: test-18 test-19
|
39
|
-
test-18:
|
40
|
-
$(MAKE) test 2>&1 | sed -e 's!^!1.8 !'
|
41
|
-
test-19:
|
42
|
-
$(MAKE) test r19=t 2>&1 | sed -e 's!^!1.9 !'
|
43
|
-
|
44
|
-
latest: NEWS
|
45
|
-
@awk 'BEGIN{RS="=== ";ORS=""}NR==2{sub(/\n$$/,"");print RS""$$0 }' $<
|
46
|
-
|
47
|
-
# publishes docs to http://bogomips.org/ruby_posix_mq/
|
48
|
-
publish_doc:
|
49
|
-
-git set-file-times
|
50
|
-
$(RM) -r doc ChangeLog NEWS
|
51
|
-
$(MAKE) doc LOG_VERSION=$(shell git tag -l | tail -1)
|
52
|
-
$(MAKE) -s latest > doc/LATEST
|
53
|
-
find doc/images doc/js -type f | \
|
54
|
-
TZ=UTC xargs touch -d '1970-01-01 00:00:00' doc/rdoc.css
|
55
|
-
$(MAKE) doc_gz
|
56
|
-
chmod 644 $$(find doc -type f)
|
57
|
-
$(RSYNC) -av doc/ dcvr:/srv/bogomips/ruby_posix_mq/
|
58
|
-
git ls-files | xargs touch
|
59
|
-
|
60
|
-
# Create gzip variants of the same timestamp as the original so nginx
|
61
|
-
# "gzip_static on" can serve the gzipped versions directly.
|
62
|
-
doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
|
63
|
-
doc_gz:
|
64
|
-
touch doc/NEWS.atom.xml -d "$$(awk 'NR==1{print $$4,$$5,$$6}' NEWS)"
|
65
|
-
for i in $(docs); do \
|
66
|
-
gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
|
67
|
-
|
68
|
-
# launches any of the following shells with RUBYLIB set
|
69
|
-
irb sh bash ksh:
|
70
|
-
$@
|