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
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
# Test the bus class
|
3
|
+
require_relative "spec_helper"
|
4
|
+
|
5
|
+
require 'rubygems'
|
6
|
+
require 'nokogiri'
|
7
|
+
require "dbus"
|
8
|
+
|
9
|
+
describe "BusAndXmlBackendTest" do
|
10
|
+
before(:each) do
|
11
|
+
@bus = DBus::ASessionBus.new
|
12
|
+
end
|
13
|
+
|
14
|
+
it "tests introspection reading rexml" do
|
15
|
+
DBus::IntrospectXMLParser.backend = DBus::IntrospectXMLParser::REXMLParser
|
16
|
+
@svc = @bus.service("org.ruby.service")
|
17
|
+
obj = @svc.object("/org/ruby/MyInstance")
|
18
|
+
obj.default_iface = 'org.ruby.SampleInterface'
|
19
|
+
obj.introspect
|
20
|
+
# "should respond to :the_answer"
|
21
|
+
expect(obj.the_answer[0]).to eq(42)
|
22
|
+
# "should work with multiple interfaces"
|
23
|
+
expect(obj["org.ruby.AnotherInterface"].Reverse('foo')[0]).to eq("oof")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "tests introspection reading nokogiri" do
|
27
|
+
# peek inside the object to see if a cleanup step worked or not
|
28
|
+
DBus::IntrospectXMLParser.backend = DBus::IntrospectXMLParser::NokogiriParser
|
29
|
+
@svc = @bus.service("org.ruby.service")
|
30
|
+
obj = @svc.object("/org/ruby/MyInstance")
|
31
|
+
obj.default_iface = 'org.ruby.SampleInterface'
|
32
|
+
obj.introspect
|
33
|
+
# "should respond to :the_answer"
|
34
|
+
expect(obj.the_answer[0]).to eq(42)
|
35
|
+
# "should work with multiple interfaces"
|
36
|
+
expect(obj["org.ruby.AnotherInterface"].Reverse('foo')[0]).to eq("oof")
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
require_relative "spec_helper"
|
3
|
+
require "dbus"
|
4
|
+
|
5
|
+
describe DBus::Service do
|
6
|
+
let(:bus) { DBus::ASessionBus.new }
|
7
|
+
|
8
|
+
describe "#exists?" do
|
9
|
+
it "is true for an existing service" do
|
10
|
+
svc = bus.service("org.ruby.service")
|
11
|
+
svc.object("/").introspect # must activate the service first :-/
|
12
|
+
expect(svc.exists?).to be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "is false for a nonexisting service" do
|
16
|
+
svc = bus.service("org.ruby.nosuchservice")
|
17
|
+
expect(svc.exists?).to be_false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,19 +1,20 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env rspec
|
2
2
|
# Test the bus class
|
3
|
-
|
4
|
-
|
3
|
+
require_relative "spec_helper"
|
4
|
+
|
5
5
|
require "dbus"
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
describe "BusTest" do
|
8
|
+
before(:each) do
|
9
9
|
@bus = DBus::ASessionBus.new
|
10
10
|
@svc = @bus.service("org.ruby.service")
|
11
11
|
@svc.object("/").introspect
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
it "tests introspection not leaking" do
|
15
15
|
# peek inside the object to see if a cleanup step worked or not
|
16
16
|
some_hash = @bus.instance_eval { @method_call_replies || Hash.new }
|
17
|
-
|
17
|
+
# fail: "there are leftover method handlers"
|
18
|
+
expect(some_hash.size).to eq(0)
|
18
19
|
end
|
19
20
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
require_relative "spec_helper"
|
3
|
+
|
4
|
+
require "dbus"
|
5
|
+
|
6
|
+
describe "ByteArrayTest" do
|
7
|
+
before(:each) do
|
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
|
+
it "tests passing byte array" do
|
17
|
+
data = [0, 77, 255]
|
18
|
+
result = @obj.mirror_byte_array(data).first
|
19
|
+
expect(result).to eq(data)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "tests passing byte array from string" do
|
23
|
+
data = "AAA"
|
24
|
+
result = @obj.mirror_byte_array(data).first
|
25
|
+
expect(result).to eq([65, 65, 65])
|
26
|
+
end
|
27
|
+
|
28
|
+
it "tests passing byte array from hash" do
|
29
|
+
# Hash is an Enumerable, but is caught earlier
|
30
|
+
data = { "this will" => "fail" }
|
31
|
+
expect { @obj.mirror_byte_array(data).first }.to raise_error(DBus::TypeException)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "tests passing byte array from nonenumerable" do
|
35
|
+
data = Time.now
|
36
|
+
expect { @obj.mirror_byte_array(data).first }.to raise_error(DBus::TypeException)
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
# should report it missing on org.ruby.SampleInterface
|
3
|
+
# (on object...) instead of on DBus::Proxy::ObjectInterface
|
4
|
+
require_relative "spec_helper"
|
5
|
+
require "dbus"
|
6
|
+
|
7
|
+
describe "ErrMsgTest" do
|
8
|
+
before(:each) do
|
9
|
+
session_bus = DBus::ASessionBus.new
|
10
|
+
svc = session_bus.service("org.ruby.service")
|
11
|
+
@obj = svc.object("/org/ruby/MyInstance")
|
12
|
+
@obj.introspect # necessary
|
13
|
+
@obj.default_iface = "org.ruby.SampleInterface"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "tests report dbus interface" do
|
17
|
+
# a specific exception...
|
18
|
+
# mentioning DBus and the interface
|
19
|
+
expect { @obj.NoSuchMethod }.to raise_error(NameError, /DBus interface.*#{@obj.default_iface}/)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "tests report short struct" do
|
23
|
+
expect { @obj.test_variant ["(ss)", ["too few"] ] }.to raise_error(DBus::TypeException, /1 elements but type info for 2/)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "tests report long struct" do
|
27
|
+
expect { @obj.test_variant ["(ss)", ["a", "b", "too many"] ] }.to raise_error(DBus::TypeException, /3 elements but type info for 2/)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "tests report nil" do
|
31
|
+
nils = [
|
32
|
+
["(s)", [nil] ], # would get disconnected
|
33
|
+
["i", nil ],
|
34
|
+
["a{ss}", {"foo" => nil} ],
|
35
|
+
]
|
36
|
+
nils.each do |has_nil|
|
37
|
+
# TODO want backtrace from the perspective of the caller:
|
38
|
+
# rescue/reraise in send_sync?
|
39
|
+
expect { @obj.test_variant has_nil }.to raise_error(DBus::TypeException, /Cannot send nil/)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,10 +1,9 @@
|
|
1
|
-
#!/usr/bin/env
|
2
|
-
|
3
|
-
require "test/unit"
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
require_relative "spec_helper"
|
4
3
|
require "dbus"
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
describe "IntrospectXMLParserTest" do
|
6
|
+
it "tests split interfaces" do
|
8
7
|
xml = <<EOS
|
9
8
|
<node>
|
10
9
|
<interface name="org.example.Foo">
|
@@ -22,6 +21,6 @@ EOS
|
|
22
21
|
interfaces, _ = DBus::IntrospectXMLParser.new(xml).parse
|
23
22
|
|
24
23
|
foo = interfaces.find {|i| i.name == "org.example.Foo" }
|
25
|
-
|
24
|
+
expect(foo.methods.keys.size).to eq(2)
|
26
25
|
end
|
27
26
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
require_relative "spec_helper"
|
3
|
+
require "dbus"
|
4
|
+
|
5
|
+
describe "IntrospectionTest" do
|
6
|
+
before(:each) do
|
7
|
+
session_bus = DBus::ASessionBus.new
|
8
|
+
svc = session_bus.service("org.ruby.service")
|
9
|
+
@obj = svc.object("/org/ruby/MyInstance")
|
10
|
+
@obj.introspect
|
11
|
+
@obj.default_iface = "org.ruby.SampleInterface"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "tests wrong number of arguments" do
|
15
|
+
expect { @obj.test_variant "too","many","args" }.to raise_error(ArgumentError)
|
16
|
+
# not enough
|
17
|
+
expect { @obj.test_variant }.to raise_error(ArgumentError)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "tests shortcut methods" do
|
21
|
+
@obj.default_iface = nil
|
22
|
+
expect(@obj.bounce_variant("varargs")).to eq(["varargs"])
|
23
|
+
# test for a duplicated method name
|
24
|
+
expect { @obj.the_answer }.to raise_error(NoMethodError)
|
25
|
+
# ensure istance methods of ProxyObject aren't overwritten by remote
|
26
|
+
# methods
|
27
|
+
expect { @obj.interfaces }.not_to raise_error
|
28
|
+
|
29
|
+
@obj.default_iface = "org.ruby.SampleInterface"
|
30
|
+
expect(@obj.the_answer).to eq([42])
|
31
|
+
end
|
32
|
+
end
|
@@ -1,11 +1,10 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env rspec
|
2
2
|
# Test the main loop
|
3
|
-
|
4
|
-
require "test/unit"
|
3
|
+
require_relative "spec_helper"
|
5
4
|
require "dbus"
|
6
5
|
|
7
|
-
|
8
|
-
|
6
|
+
describe "MainLoopTest" do
|
7
|
+
before(:each) do
|
9
8
|
@session_bus = DBus::ASessionBus.new
|
10
9
|
svc = @session_bus.service("org.ruby.service")
|
11
10
|
@obj = svc.object("/org/ruby/MyInstance")
|
@@ -40,7 +39,7 @@ class MainLoopTest < Test::Unit::TestCase
|
|
40
39
|
end
|
41
40
|
end
|
42
41
|
|
43
|
-
def test_loop_quit(delay
|
42
|
+
def test_loop_quit(delay)
|
44
43
|
@obj.on_signal "LongTaskEnd" do
|
45
44
|
DBus.logger.debug "Telling loop to quit"
|
46
45
|
@loop.quit
|
@@ -72,8 +71,12 @@ class MainLoopTest < Test::Unit::TestCase
|
|
72
71
|
@obj.on_signal "LongTaskEnd"
|
73
72
|
end
|
74
73
|
|
74
|
+
it "tests loop quit" do
|
75
|
+
test_loop_quit 1
|
76
|
+
end
|
77
|
+
|
75
78
|
# https://bugzilla.novell.com/show_bug.cgi?id=537401
|
76
|
-
|
79
|
+
it "tests loop drained socket" do
|
77
80
|
test_loop_quit 0
|
78
81
|
end
|
79
82
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
require_relative "spec_helper"
|
3
|
+
require "dbus"
|
4
|
+
|
5
|
+
describe "PropertyTest" do
|
6
|
+
before(:each) do
|
7
|
+
session_bus = DBus::ASessionBus.new
|
8
|
+
svc = session_bus.service("org.ruby.service")
|
9
|
+
@obj = svc.object("/org/ruby/MyInstance")
|
10
|
+
@obj.introspect
|
11
|
+
@iface = @obj["org.ruby.SampleInterface"]
|
12
|
+
end
|
13
|
+
|
14
|
+
it "tests property reading" do
|
15
|
+
expect(@iface["ReadMe"]).to eq("READ ME")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "tests property nonreading" do
|
19
|
+
expect { @iface["WriteMe"] }.to raise_error(DBus::Error, /not readable/)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "tests property writing" do
|
23
|
+
@iface["ReadOrWriteMe"] = "VALUE"
|
24
|
+
expect(@iface["ReadOrWriteMe"]).to eq("VALUE")
|
25
|
+
end
|
26
|
+
|
27
|
+
# https://github.com/mvidner/ruby-dbus/pull/19
|
28
|
+
it "tests service select timeout" do
|
29
|
+
@iface["ReadOrWriteMe"] = "VALUE"
|
30
|
+
expect(@iface["ReadOrWriteMe"]).to eq("VALUE")
|
31
|
+
# wait for the service to become idle
|
32
|
+
sleep 6
|
33
|
+
# fail: "Property value changed; perhaps the service died and got restarted"
|
34
|
+
expect(@iface["ReadOrWriteMe"]).to eq("VALUE")
|
35
|
+
end
|
36
|
+
|
37
|
+
it "tests property nonwriting" do
|
38
|
+
expect { @iface["ReadMe"] = "WROTE" }.to raise_error(DBus::Error, /not writable/)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "tests get all" do
|
42
|
+
all = @iface.all_properties
|
43
|
+
expect(all.keys.sort).to eq(["ReadMe", "ReadOrWriteMe"])
|
44
|
+
end
|
45
|
+
|
46
|
+
it "tests unknown property reading" do
|
47
|
+
expect { @iface["Spoon"] }.to raise_error(DBus::Error, /not found/)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "tests unknown property writing" do
|
51
|
+
expect { @iface["Spoon"] = "FPRK" }.to raise_error(DBus::Error, /not found/)
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
# Test that a server survives various error cases
|
3
|
+
require_relative "spec_helper"
|
4
|
+
require "dbus"
|
5
|
+
|
6
|
+
describe "ServerRobustnessTest" do
|
7
|
+
before(:each) do
|
8
|
+
@bus = DBus::ASessionBus.new
|
9
|
+
@svc = @bus.service("org.ruby.service")
|
10
|
+
end
|
11
|
+
|
12
|
+
# https://trac.luon.net/ruby-dbus/ticket/31
|
13
|
+
# the server should not crash
|
14
|
+
it "tests no such path with introspection" do
|
15
|
+
obj = @svc.object "/org/ruby/NotMyInstance"
|
16
|
+
expect { obj.introspect }.to raise_error(DBus::Error) do |e|
|
17
|
+
expect(e).to_not match(/timeout/)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it "tests no such path without introspection" do
|
22
|
+
obj = @svc.object "/org/ruby/NotMyInstance"
|
23
|
+
ifc = DBus::ProxyObjectInterface.new(obj, "org.ruby.SampleInterface")
|
24
|
+
ifc.define_method("the_answer", "out n:i")
|
25
|
+
expect { ifc.the_answer }.to raise_error(DBus::Error) do |e|
|
26
|
+
expect(e).to_not match(/timeout/)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it "tests a method that raises" do
|
31
|
+
obj = @svc.object "/org/ruby/MyInstance"
|
32
|
+
obj.introspect
|
33
|
+
obj.default_iface = "org.ruby.SampleInterface"
|
34
|
+
expect { obj.will_raise }.to raise_error(DBus::Error) do |e|
|
35
|
+
expect(e).to_not match(/timeout/)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "tests a method that raises name error" do
|
40
|
+
obj = @svc.object "/org/ruby/MyInstance"
|
41
|
+
obj.introspect
|
42
|
+
obj.default_iface = "org.ruby.SampleInterface"
|
43
|
+
expect { obj.will_raise_name_error }.to raise_error(DBus::Error) do |e|
|
44
|
+
expect(e).to_not match(/timeout/)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# https://trac.luon.net/ruby-dbus/ticket/31#comment:3
|
49
|
+
it "tests no such method without introspection" do
|
50
|
+
obj = @svc.object "/org/ruby/MyInstance"
|
51
|
+
ifc = DBus::ProxyObjectInterface.new(obj, "org.ruby.SampleInterface")
|
52
|
+
ifc.define_method("not_the_answer", "out n:i")
|
53
|
+
expect { ifc.not_the_answer }.to raise_error(DBus::Error) do |e|
|
54
|
+
expect(e).to_not match(/timeout/)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "tests no such interface without introspection" do
|
59
|
+
obj = @svc.object "/org/ruby/MyInstance"
|
60
|
+
ifc = DBus::ProxyObjectInterface.new(obj, "org.ruby.NoSuchInterface")
|
61
|
+
ifc.define_method("the_answer", "out n:i")
|
62
|
+
expect { ifc.the_answer }.to raise_error(DBus::Error) do |e|
|
63
|
+
expect(e).to_not match(/timeout/)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
|
-
#!/usr/bin/env
|
1
|
+
#!/usr/bin/env rspec
|
2
2
|
# Test that a server survives various error cases
|
3
|
-
|
4
|
-
require "test/unit"
|
3
|
+
require_relative "spec_helper"
|
5
4
|
require "dbus"
|
6
5
|
|
7
6
|
class Foo < DBus::Object
|
@@ -24,28 +23,28 @@ rescue DBus::InvalidMethodName
|
|
24
23
|
# raised by the preceding signal declaration
|
25
24
|
end
|
26
25
|
|
27
|
-
|
28
|
-
|
26
|
+
describe "ServerTest" do
|
27
|
+
before(:each) do
|
29
28
|
@bus = DBus::ASessionBus.new
|
30
29
|
@svc = @bus.request_service "org.ruby.server-test"
|
31
30
|
end
|
32
31
|
|
33
|
-
|
32
|
+
after(:each) do
|
34
33
|
@bus.proxy.ReleaseName "org.ruby.server-test"
|
35
34
|
end
|
36
35
|
|
37
|
-
|
36
|
+
it "tests unexporting an object" do
|
38
37
|
obj = Foo.new "/org/ruby/Foo"
|
39
38
|
@svc.export obj
|
40
|
-
|
39
|
+
expect(@svc.unexport(obj)).to be_true
|
41
40
|
end
|
42
41
|
|
43
|
-
|
42
|
+
it "tests unexporting an object not exported" do
|
44
43
|
obj = Foo.new "/org/ruby/Foo"
|
45
|
-
|
44
|
+
expect(@svc.unexport(obj)).to be_false
|
46
45
|
end
|
47
46
|
|
48
|
-
|
47
|
+
it "tests emiting signals" do
|
49
48
|
obj = Foo.new "/org/ruby/Foo"
|
50
49
|
@svc.export obj
|
51
50
|
obj.signal_without_arguments
|
data/test/service_newapi.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
|
-
|
4
|
+
require_relative "spec_helper"
|
5
5
|
SimpleCov.command_name "Service Tests" if Object.const_defined? "SimpleCov"
|
6
6
|
# find the library without external help
|
7
7
|
$:.unshift File.expand_path("../../lib", __FILE__)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env rspec
|
2
|
+
require_relative "spec_helper"
|
3
|
+
require "dbus"
|
4
|
+
|
5
|
+
describe DBus::ASessionBus do
|
6
|
+
context "when DBUS_SESSION_BUS_ADDRESS is unset in ENV (Issue#4)" do
|
7
|
+
ENV.delete "DBUS_SESSION_BUS_ADDRESS"
|
8
|
+
|
9
|
+
it "can connect" do
|
10
|
+
bus = DBus::ASessionBus.new
|
11
|
+
svc = bus.service("org.freedesktop.DBus")
|
12
|
+
expect(svc.exists?).to be_true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|