ruby-dbus 0.10.0 → 0.11.0
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.
- checksums.yaml +4 -4
- data/NEWS +8 -0
- data/README.md +41 -4
- data/Rakefile +15 -16
- data/VERSION +1 -1
- data/lib/dbus.rb +18 -14
- data/lib/dbus/bus.rb +32 -168
- data/lib/dbus/error.rb +4 -2
- data/lib/dbus/export.rb +3 -2
- data/lib/dbus/introspect.rb +0 -294
- data/lib/dbus/marshall.rb +1 -1
- data/lib/dbus/message.rb +8 -0
- data/lib/dbus/message_queue.rb +166 -0
- data/lib/dbus/proxy_object.rb +149 -0
- data/lib/dbus/proxy_object_factory.rb +41 -0
- data/lib/dbus/proxy_object_interface.rb +128 -0
- data/ruby-dbus.gemspec +1 -0
- data/test/{async_test.rb → async_spec.rb} +10 -11
- data/test/{binding_test.rb → binding_spec.rb} +23 -25
- data/test/bus_and_xml_backend_spec.rb +39 -0
- data/test/bus_driver_spec.rb +20 -0
- data/test/{bus_test.rb → bus_spec.rb} +8 -7
- data/test/byte_array_spec.rb +38 -0
- data/test/err_msg_spec.rb +42 -0
- data/test/{introspect_xml_parser_test.rb → introspect_xml_parser_spec.rb} +5 -6
- data/test/introspection_spec.rb +32 -0
- data/test/{main_loop_test.rb → main_loop_spec.rb} +10 -7
- data/test/property_spec.rb +53 -0
- data/test/server_robustness_spec.rb +66 -0
- data/test/{server_test.rb → server_spec.rb} +10 -11
- data/test/service_newapi.rb +1 -1
- data/test/session_bus_spec_manual.rb +15 -0
- data/test/{signal_test.rb → signal_spec.rb} +13 -14
- data/test/spec_helper.rb +33 -0
- data/test/{thread_safety_test.rb → thread_safety_spec.rb} +5 -6
- data/test/type_spec.rb +19 -0
- data/test/{value_test.rb → value_spec.rb} +23 -24
- data/test/variant_spec.rb +66 -0
- metadata +40 -22
- data/test/bus_and_xml_backend_test.rb +0 -43
- data/test/bus_driver_test.rb +0 -19
- data/test/byte_array_test.rb +0 -42
- data/test/err_msg_test.rb +0 -59
- data/test/introspection_test.rb +0 -32
- data/test/property_test.rb +0 -65
- data/test/server_robustness_test.rb +0 -73
- data/test/session_bus_test_manual.rb +0 -17
- data/test/test_helper.rb +0 -14
- data/test/type_test.rb +0 -23
- data/test/variant_test.rb +0 -67
data/test/bus_driver_test.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Test the methods of the bus driver
|
3
|
-
require File.expand_path("../test_helper", __FILE__)
|
4
|
-
require "test/unit"
|
5
|
-
require "dbus"
|
6
|
-
|
7
|
-
class BusDriverTest < Test::Unit::TestCase
|
8
|
-
def setup
|
9
|
-
@bus = DBus::ASessionBus.new
|
10
|
-
@svc = @bus.service("org.ruby.service")
|
11
|
-
@svc.object("/").introspect
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_exists
|
15
|
-
assert @svc.exists?, "could not find the service"
|
16
|
-
nonsvc = @bus.service "org.ruby.nosuchservice"
|
17
|
-
assert ! nonsvc.exists?, "found a service that should not exist"
|
18
|
-
end
|
19
|
-
end
|
data/test/byte_array_test.rb
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
3
|
-
require "test/unit"
|
4
|
-
require "dbus"
|
5
|
-
|
6
|
-
class ByteArrayTest < Test::Unit::TestCase
|
7
|
-
def setup
|
8
|
-
@bus = DBus::ASessionBus.new
|
9
|
-
@svc = @bus.service("org.ruby.service")
|
10
|
-
@obj = @svc.object("/org/ruby/MyInstance")
|
11
|
-
@obj.introspect
|
12
|
-
@obj.default_iface = "org.ruby.SampleInterface"
|
13
|
-
end
|
14
|
-
|
15
|
-
|
16
|
-
def test_passing_byte_array
|
17
|
-
data = [0, 77, 255]
|
18
|
-
result = @obj.mirror_byte_array(data).first
|
19
|
-
assert_equal data, result
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_passing_byte_array_from_string
|
23
|
-
data = "AAA"
|
24
|
-
result = @obj.mirror_byte_array(data).first
|
25
|
-
assert_equal [65, 65, 65], result
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_passing_byte_array_from_hash
|
29
|
-
# Hash is an Enumerable, but is caught earlier
|
30
|
-
data = { "this will" => "fail" }
|
31
|
-
assert_raises DBus::TypeException do
|
32
|
-
@obj.mirror_byte_array(data).first
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_passing_byte_array_from_nonenumerable
|
37
|
-
data = Time.now
|
38
|
-
assert_raises DBus::TypeException do
|
39
|
-
@obj.mirror_byte_array(data).first
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
data/test/err_msg_test.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# should report it missing on org.ruby.SampleInterface
|
3
|
-
# (on object...) instead of on DBus::Proxy::ObjectInterface
|
4
|
-
require File.expand_path("../test_helper", __FILE__)
|
5
|
-
require "test/unit"
|
6
|
-
require "dbus"
|
7
|
-
|
8
|
-
class ErrMsgTest < Test::Unit::TestCase
|
9
|
-
def setup
|
10
|
-
session_bus = DBus::ASessionBus.new
|
11
|
-
svc = session_bus.service("org.ruby.service")
|
12
|
-
@obj = svc.object("/org/ruby/MyInstance")
|
13
|
-
@obj.introspect # necessary
|
14
|
-
@obj.default_iface = "org.ruby.SampleInterface"
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_report_dbus_interface
|
18
|
-
begin
|
19
|
-
@obj.NoSuchMethod
|
20
|
-
# a specific exception...
|
21
|
-
rescue NameError => e
|
22
|
-
# mentioning DBus and the interface
|
23
|
-
assert_match(/DBus interface.*#{@obj.default_iface}/, e.to_s)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_report_short_struct
|
28
|
-
begin
|
29
|
-
@obj.test_variant ["(ss)", ["too few"] ]
|
30
|
-
rescue DBus::TypeException => e
|
31
|
-
assert_match(/1 elements but type info for 2/, e.to_s)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_report_long_struct
|
36
|
-
begin
|
37
|
-
@obj.test_variant ["(ss)", ["a", "b", "too many"] ]
|
38
|
-
rescue DBus::TypeException => e
|
39
|
-
assert_match(/3 elements but type info for 2/, e.to_s)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_report_nil
|
44
|
-
nils = [
|
45
|
-
["(s)", [nil] ], # would get disconnected
|
46
|
-
["i", nil ],
|
47
|
-
["a{ss}", {"foo" => nil} ],
|
48
|
-
]
|
49
|
-
nils.each do |has_nil|
|
50
|
-
begin
|
51
|
-
@obj.test_variant has_nil
|
52
|
-
rescue DBus::TypeException => e
|
53
|
-
# TODO want backtrace from the perspective of the caller:
|
54
|
-
# rescue/reraise in send_sync?
|
55
|
-
assert_match(/Cannot send nil/, e.to_s)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
data/test/introspection_test.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
3
|
-
require "test/unit"
|
4
|
-
require "dbus"
|
5
|
-
|
6
|
-
class IntrospectionTest < Test::Unit::TestCase
|
7
|
-
def setup
|
8
|
-
session_bus = DBus::ASessionBus.new
|
9
|
-
svc = session_bus.service("org.ruby.service")
|
10
|
-
@obj = svc.object("/org/ruby/MyInstance")
|
11
|
-
@obj.introspect
|
12
|
-
@obj.default_iface = "org.ruby.SampleInterface"
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_wrong_number_of_arguments
|
16
|
-
assert_raise(ArgumentError) { @obj.test_variant "too","many","args" }
|
17
|
-
assert_raise(ArgumentError) { @obj.test_variant } # not enough
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_shortcut_methods
|
21
|
-
@obj.default_iface = nil
|
22
|
-
assert_equal(["varargs"], @obj.bounce_variant("varargs"))
|
23
|
-
# test for a duplicated method name
|
24
|
-
assert_raise(NoMethodError) { @obj.the_answer }
|
25
|
-
# ensure istance methods of ProxyObject aren't overwritten by remote
|
26
|
-
# methods
|
27
|
-
assert_nothing_raised { @obj.interfaces }
|
28
|
-
|
29
|
-
@obj.default_iface = "org.ruby.SampleInterface"
|
30
|
-
assert_equal [42], @obj.the_answer
|
31
|
-
end
|
32
|
-
end
|
data/test/property_test.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
3
|
-
require "test/unit"
|
4
|
-
require "dbus"
|
5
|
-
|
6
|
-
class PropertyTest < Test::Unit::TestCase
|
7
|
-
def setup
|
8
|
-
session_bus = DBus::ASessionBus.new
|
9
|
-
svc = session_bus.service("org.ruby.service")
|
10
|
-
@obj = svc.object("/org/ruby/MyInstance")
|
11
|
-
@obj.introspect
|
12
|
-
@iface = @obj["org.ruby.SampleInterface"]
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_property_reading
|
16
|
-
assert_equal "READ ME", @iface["ReadMe"]
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_property_nonreading
|
20
|
-
e = assert_raises DBus::Error do
|
21
|
-
@iface["WriteMe"]
|
22
|
-
end
|
23
|
-
assert_match(/not readable/, e.to_s)
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_property_writing
|
27
|
-
@iface["ReadOrWriteMe"] = "VALUE"
|
28
|
-
assert_equal "VALUE", @iface["ReadOrWriteMe"]
|
29
|
-
end
|
30
|
-
|
31
|
-
# https://github.com/mvidner/ruby-dbus/pull/19
|
32
|
-
def test_service_select_timeout
|
33
|
-
@iface["ReadOrWriteMe"] = "VALUE"
|
34
|
-
assert_equal "VALUE", @iface["ReadOrWriteMe"]
|
35
|
-
# wait for the service to become idle
|
36
|
-
sleep 6
|
37
|
-
assert_equal "VALUE", @iface["ReadOrWriteMe"], "Property value changed; perhaps the service died and got restarted"
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_property_nonwriting
|
41
|
-
e = assert_raises DBus::Error do
|
42
|
-
@iface["ReadMe"] = "WROTE"
|
43
|
-
end
|
44
|
-
assert_match(/not writable/, e.to_s)
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_get_all
|
48
|
-
all = @iface.all_properties
|
49
|
-
assert_equal ["ReadMe", "ReadOrWriteMe"], all.keys.sort
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_unknown_property_reading
|
53
|
-
e = assert_raises DBus::Error do
|
54
|
-
@iface["Spoon"]
|
55
|
-
end
|
56
|
-
assert_match(/not found/, e.to_s)
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_unknown_property_writing
|
60
|
-
e = assert_raises DBus::Error do
|
61
|
-
@iface["Spoon"] = "FORK"
|
62
|
-
end
|
63
|
-
assert_match(/not found/, e.to_s)
|
64
|
-
end
|
65
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Test that a server survives various error cases
|
3
|
-
require File.expand_path("../test_helper", __FILE__)
|
4
|
-
require "test/unit"
|
5
|
-
require "dbus"
|
6
|
-
|
7
|
-
class ServerRobustnessTest < Test::Unit::TestCase
|
8
|
-
def setup
|
9
|
-
@bus = DBus::ASessionBus.new
|
10
|
-
@svc = @bus.service("org.ruby.service")
|
11
|
-
end
|
12
|
-
|
13
|
-
# https://trac.luon.net/ruby-dbus/ticket/31
|
14
|
-
# the server should not crash
|
15
|
-
def test_no_such_path_with_introspection
|
16
|
-
obj = @svc.object "/org/ruby/NotMyInstance"
|
17
|
-
obj.introspect
|
18
|
-
assert false, "should have raised"
|
19
|
-
rescue DBus::Error => e
|
20
|
-
assert_no_match(/timeout/, e.to_s)
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_no_such_path_without_introspection
|
24
|
-
obj = @svc.object "/org/ruby/NotMyInstance"
|
25
|
-
ifc = DBus::ProxyObjectInterface.new(obj, "org.ruby.SampleInterface")
|
26
|
-
ifc.define_method("the_answer", "out n:i")
|
27
|
-
ifc.the_answer
|
28
|
-
assert false, "should have raised"
|
29
|
-
rescue DBus::Error => e
|
30
|
-
assert_no_match(/timeout/, e.to_s)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_a_method_that_raises
|
34
|
-
obj = @svc.object "/org/ruby/MyInstance"
|
35
|
-
obj.introspect
|
36
|
-
obj.default_iface = "org.ruby.SampleInterface"
|
37
|
-
obj.will_raise
|
38
|
-
assert false, "should have raised"
|
39
|
-
rescue DBus::Error => e
|
40
|
-
assert_no_match(/timeout/, e.to_s)
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_a_method_that_raises_name_error
|
44
|
-
obj = @svc.object "/org/ruby/MyInstance"
|
45
|
-
obj.introspect
|
46
|
-
obj.default_iface = "org.ruby.SampleInterface"
|
47
|
-
obj.will_raise_name_error
|
48
|
-
assert false, "should have raised"
|
49
|
-
rescue DBus::Error => e
|
50
|
-
assert_no_match(/timeout/, e.to_s)
|
51
|
-
end
|
52
|
-
|
53
|
-
# https://trac.luon.net/ruby-dbus/ticket/31#comment:3
|
54
|
-
def test_no_such_method_without_introspection
|
55
|
-
obj = @svc.object "/org/ruby/MyInstance"
|
56
|
-
ifc = DBus::ProxyObjectInterface.new(obj, "org.ruby.SampleInterface")
|
57
|
-
ifc.define_method("not_the_answer", "out n:i")
|
58
|
-
ifc.not_the_answer
|
59
|
-
assert false, "should have raised"
|
60
|
-
rescue DBus::Error => e
|
61
|
-
assert_no_match(/timeout/, e.to_s)
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_no_such_interface_without_introspection
|
65
|
-
obj = @svc.object "/org/ruby/MyInstance"
|
66
|
-
ifc = DBus::ProxyObjectInterface.new(obj, "org.ruby.NoSuchInterface")
|
67
|
-
ifc.define_method("the_answer", "out n:i")
|
68
|
-
ifc.the_answer
|
69
|
-
assert false, "should have raised"
|
70
|
-
rescue DBus::Error => e
|
71
|
-
assert_no_match(/timeout/, e.to_s)
|
72
|
-
end
|
73
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require File.expand_path("../test_helper", __FILE__)
|
3
|
-
require "test/unit"
|
4
|
-
require "dbus"
|
5
|
-
|
6
|
-
class SessionBusAddressTest < Test::Unit::TestCase
|
7
|
-
def setup
|
8
|
-
# test getting the session bus address even if unset in ENV (Issue#4)
|
9
|
-
ENV.delete "DBUS_SESSION_BUS_ADDRESS"
|
10
|
-
@bus = DBus::ASessionBus.new
|
11
|
-
@svc = @bus.service("org.freedesktop.DBus")
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_connection
|
15
|
-
assert @svc.exists?
|
16
|
-
end
|
17
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
if ENV["COVERAGE"]
|
2
|
-
coverage = ENV["COVERAGE"] == "true"
|
3
|
-
else
|
4
|
-
# heuristics: enable for interactive builds but not in Travis or OBS
|
5
|
-
coverage = !!ENV["DISPLAY"]
|
6
|
-
end
|
7
|
-
|
8
|
-
if coverage && RUBY_VERSION >= "1.9" # SimpleCov does not work with 1.8
|
9
|
-
require 'simplecov'
|
10
|
-
SimpleCov.root File.expand_path("../..", __FILE__)
|
11
|
-
SimpleCov.start
|
12
|
-
end
|
13
|
-
|
14
|
-
$:.unshift File.expand_path("../../lib", __FILE__)
|
data/test/type_test.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Test the type class
|
3
|
-
require File.expand_path("../test_helper", __FILE__)
|
4
|
-
require "test/unit"
|
5
|
-
require "dbus"
|
6
|
-
|
7
|
-
class TypeTest < Test::Unit::TestCase
|
8
|
-
def test_costants_are_defined
|
9
|
-
assert_equal DBus::Type::BYTE, ?y
|
10
|
-
assert_equal DBus::Type::BOOLEAN, ?b
|
11
|
-
#etc..
|
12
|
-
end
|
13
|
-
|
14
|
-
def test_parsing
|
15
|
-
%w{i ai a(ii) aai}.each do |s|
|
16
|
-
assert_equal s, DBus::type(s).to_s
|
17
|
-
end
|
18
|
-
|
19
|
-
%w{aa (ii ii) hrmp}.each do |s|
|
20
|
-
assert_raise(DBus::Type::SignatureException) { DBus::type(s) }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/test/variant_test.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Test marshalling variants according to ruby types
|
3
|
-
require File.expand_path("../test_helper", __FILE__)
|
4
|
-
require "test/unit"
|
5
|
-
require "dbus"
|
6
|
-
|
7
|
-
class VariantTest < Test::Unit::TestCase
|
8
|
-
def setup
|
9
|
-
@bus = DBus::ASessionBus.new
|
10
|
-
@svc = @bus.service("org.ruby.service")
|
11
|
-
end
|
12
|
-
|
13
|
-
def make_variant(a)
|
14
|
-
DBus::PacketMarshaller.make_variant(a)
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_make_variant_scalar
|
18
|
-
# special case: do not fail immediately, marshaller will do that
|
19
|
-
assert_equal ["b", nil], make_variant(nil)
|
20
|
-
|
21
|
-
assert_equal ["b", true], make_variant(true)
|
22
|
-
# Integers
|
23
|
-
# no byte
|
24
|
-
assert_equal ["i", 42], make_variant(42)
|
25
|
-
# 3_000_000_000 can be u or x.
|
26
|
-
# less specific test: just run it thru a loopback
|
27
|
-
assert_equal ["x", 3_000_000_000], make_variant(3_000_000_000)
|
28
|
-
assert_equal ["x", 5_000_000_000], make_variant(5_000_000_000)
|
29
|
-
|
30
|
-
assert_equal ["d", 3.14], make_variant(3.14)
|
31
|
-
|
32
|
-
assert_equal ["s", "foo"], make_variant("foo")
|
33
|
-
assert_equal ["s", "bar"], make_variant(:bar)
|
34
|
-
|
35
|
-
# left: strruct, array, dict
|
36
|
-
# object path: detect exported objects?, signature
|
37
|
-
|
38
|
-
# # by Ruby types
|
39
|
-
# class Foo
|
40
|
-
# end
|
41
|
-
# make_variant(Foo.new)
|
42
|
-
# if we don;t understand a class, the error should be informative -> new exception
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_make_variant_array
|
46
|
-
ai = [1, 2, 3]
|
47
|
-
# as = ["one", "two", "three"]
|
48
|
-
# which?
|
49
|
-
# assert_equal ["ai", [1, 2, 3]], make_variant(ai)
|
50
|
-
assert_equal ["av", [["i", 1],
|
51
|
-
["i", 2],
|
52
|
-
["i", 3]]], make_variant(ai)
|
53
|
-
a0 = []
|
54
|
-
assert_equal ["av", []], make_variant(a0)
|
55
|
-
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_make_variant_hash
|
59
|
-
h = {"k1" => "v1", "k2" => "v2"}
|
60
|
-
assert_equal ["a{sv}", {
|
61
|
-
"k1" => ["s", "v1"],
|
62
|
-
"k2" => ["s", "v2"],
|
63
|
-
}], make_variant(h)
|
64
|
-
h0 = {}
|
65
|
-
assert_equal ["a{sv}", {}], make_variant(h0)
|
66
|
-
end
|
67
|
-
end
|