ruby-dbus 0.16.0 → 0.25.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.md +288 -3
- data/README.md +3 -5
- data/Rakefile +27 -12
- data/VERSION +1 -1
- data/doc/Reference.md +109 -10
- data/examples/doc/_extract_examples +7 -0
- data/examples/no-bus/pulseaudio.rb +50 -0
- data/examples/no-introspect/nm-test.rb +2 -0
- data/examples/no-introspect/tracker-test.rb +3 -1
- data/examples/rhythmbox/playpause.rb +2 -1
- data/examples/service/call_service.rb +2 -1
- data/examples/service/complex-property.rb +21 -0
- data/examples/service/service_newapi.rb +3 -3
- data/examples/simple/call_introspect.rb +1 -0
- data/examples/simple/get_id.rb +6 -3
- data/examples/simple/properties.rb +2 -0
- data/examples/utils/listnames.rb +10 -1
- data/examples/utils/notify.rb +1 -0
- data/lib/dbus/api_options.rb +9 -0
- data/lib/dbus/auth.rb +307 -217
- data/lib/dbus/bus.rb +155 -588
- data/lib/dbus/bus_name.rb +12 -8
- data/lib/dbus/connection.rb +363 -0
- data/lib/dbus/core_ext/class/attribute.rb +1 -1
- data/lib/dbus/data.rb +821 -0
- data/lib/dbus/emits_changed_signal.rb +83 -0
- data/lib/dbus/error.rb +4 -2
- data/lib/dbus/introspect.rb +133 -31
- data/lib/dbus/logger.rb +6 -3
- data/lib/dbus/main.rb +66 -0
- data/lib/dbus/marshall.rb +247 -296
- data/lib/dbus/matchrule.rb +16 -16
- data/lib/dbus/message.rb +66 -57
- data/lib/dbus/message_queue.rb +40 -25
- data/lib/dbus/node_tree.rb +105 -0
- data/lib/dbus/object.rb +442 -33
- data/lib/dbus/object_manager.rb +61 -0
- data/lib/dbus/object_path.rb +11 -6
- data/lib/dbus/object_server.rb +149 -0
- data/lib/dbus/org.freedesktop.DBus.xml +97 -0
- data/lib/dbus/platform.rb +26 -0
- data/lib/dbus/proxy_object.rb +30 -11
- data/lib/dbus/proxy_object_factory.rb +13 -7
- data/lib/dbus/proxy_object_interface.rb +63 -30
- data/lib/dbus/proxy_service.rb +107 -0
- data/lib/dbus/raw_message.rb +91 -0
- data/lib/dbus/type.rb +319 -86
- data/lib/dbus/xml.rb +40 -19
- data/lib/dbus.rb +28 -17
- data/ruby-dbus.gemspec +13 -6
- data/spec/async_spec.rb +2 -0
- data/spec/auth_spec.rb +225 -0
- data/spec/binding_spec.rb +2 -0
- data/spec/bus_and_xml_backend_spec.rb +5 -1
- data/spec/bus_connection_spec.rb +93 -0
- data/spec/bus_name_spec.rb +3 -1
- data/spec/bus_spec.rb +2 -0
- data/spec/byte_array_spec.rb +2 -0
- data/spec/client_robustness_spec.rb +4 -2
- data/spec/connection_spec.rb +37 -0
- data/spec/coverage_helper.rb +39 -0
- data/spec/data/marshall.yaml +1667 -0
- data/spec/data_spec.rb +673 -0
- data/spec/dbus_spec.rb +22 -0
- data/spec/emits_changed_signal_spec.rb +58 -0
- data/spec/err_msg_spec.rb +2 -0
- data/spec/introspect_xml_parser_spec.rb +2 -0
- data/spec/introspection_spec.rb +2 -0
- data/spec/main_loop_spec.rb +17 -1
- data/spec/message_spec.rb +21 -0
- data/spec/mock-service/cockpit-dbustests.rb +29 -0
- data/spec/mock-service/com.redhat.Cockpit.DBusTests.xml +180 -0
- data/spec/mock-service/org.ruby.service.service +4 -0
- data/spec/mock-service/org.rubygems.ruby_dbus.DBusTests.service +4 -0
- data/spec/{service_newapi.rb → mock-service/spaghetti-monster.rb} +122 -75
- data/spec/node_spec.rb +65 -0
- data/spec/object_manager_spec.rb +33 -0
- data/spec/object_path_spec.rb +3 -0
- data/spec/object_server_spec.rb +138 -0
- data/spec/object_spec.rb +194 -0
- data/spec/packet_marshaller_spec.rb +41 -0
- data/spec/packet_unmarshaller_spec.rb +248 -0
- data/spec/platform_spec.rb +14 -0
- data/spec/property_spec.rb +214 -12
- data/spec/proxy_object_interface_spec.rb +35 -0
- data/spec/proxy_object_spec.rb +2 -0
- data/spec/{bus_driver_spec.rb → proxy_service_spec.rb} +15 -8
- data/spec/raw_message_spec.rb +32 -0
- data/spec/server_robustness_spec.rb +20 -6
- data/spec/session_bus_spec.rb +36 -1
- data/spec/session_bus_spec_manual.rb +2 -0
- data/spec/signal_spec.rb +16 -3
- data/spec/spec_helper.rb +25 -33
- data/spec/thread_safety_spec.rb +55 -12
- data/spec/tools/dbus-launch-simple +9 -6
- data/spec/tools/dbus-limited-session.conf +32 -0
- data/spec/tools/test_env +26 -6
- data/spec/type_spec.rb +214 -6
- data/spec/value_spec.rb +16 -1
- data/spec/variant_spec.rb +4 -2
- data/spec/zzz_quit_spec.rb +16 -0
- metadata +92 -20
- data/examples/gdbus/gdbus +0 -257
- data/examples/gdbus/gdbus.glade +0 -98
- data/examples/gdbus/launch.sh +0 -4
- data/spec/server_spec.rb +0 -53
- data/spec/tools/test_server +0 -39
data/examples/gdbus/gdbus
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
#
|
|
3
|
-
# This is a quite complex example using internal lower level API.
|
|
4
|
-
# Not a good starting point, but might be usefull if you want to do tricky
|
|
5
|
-
# stuff.
|
|
6
|
-
# -- Arnaud
|
|
7
|
-
|
|
8
|
-
require "dbus"
|
|
9
|
-
require "gtk2"
|
|
10
|
-
|
|
11
|
-
ENABLE_SYSTEM = false
|
|
12
|
-
|
|
13
|
-
class MethodCallWindow
|
|
14
|
-
def initialize(pwindow, intf, meth)
|
|
15
|
-
@intf = intf
|
|
16
|
-
@meth = meth
|
|
17
|
-
@entries = []
|
|
18
|
-
@dialog = Gtk::Dialog.new(meth.name, pwindow,
|
|
19
|
-
Gtk::Dialog::MODAL | Gtk::Dialog::NO_SEPARATOR,
|
|
20
|
-
[Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK],
|
|
21
|
-
[Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL])
|
|
22
|
-
|
|
23
|
-
@meth.params.each do |param|
|
|
24
|
-
shbox = Gtk::HBox.new(true, 0)
|
|
25
|
-
label = Gtk::Label.new("#{param[0]} (#{param[1]})")
|
|
26
|
-
input = Gtk::Entry.new
|
|
27
|
-
@entries << input
|
|
28
|
-
shbox.pack_start(label, true, true, 0)
|
|
29
|
-
shbox.pack_start(input, true, true, 0)
|
|
30
|
-
@dialog.vbox.pack_start(shbox, true, true, 0)
|
|
31
|
-
@dialog.vbox.show_all
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def run
|
|
36
|
-
on_ok if @dialog.run == Gtk::Dialog::RESPONSE_OK
|
|
37
|
-
@dialog.destroy
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def on_ok
|
|
41
|
-
bus = @intf.object.bus
|
|
42
|
-
m = DBus::Message.new(DBus::Message::METHOD_CALL)
|
|
43
|
-
m.path = @intf.object.path
|
|
44
|
-
m.interface = @intf.name
|
|
45
|
-
m.destination = @intf.object.destination
|
|
46
|
-
m.member = @meth.name
|
|
47
|
-
m.sender = bus.unique_name
|
|
48
|
-
@meth.params.each_with_index do |param, idx|
|
|
49
|
-
entry = @entries[idx]
|
|
50
|
-
data = nil
|
|
51
|
-
case param[1]
|
|
52
|
-
when "u", "i"
|
|
53
|
-
data = entry.text.to_i
|
|
54
|
-
when "s"
|
|
55
|
-
data = entry.text
|
|
56
|
-
when /^a/
|
|
57
|
-
begin
|
|
58
|
-
data = eval(entry.text)
|
|
59
|
-
rescue
|
|
60
|
-
puts "Incorrect data: #{data}"
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
m.add_param(param[1], data)
|
|
64
|
-
end
|
|
65
|
-
bus.send_sync_or_async(m) do |retm|
|
|
66
|
-
if retm.is_a?(DBus::Error)
|
|
67
|
-
puts "Error: #{retm.inspect}"
|
|
68
|
-
else
|
|
69
|
-
puts "Method #{m.member} returns: #{retm.params.inspect}"
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
class DBusUI
|
|
76
|
-
def initialize
|
|
77
|
-
@glade = Gtk::Builder.new
|
|
78
|
-
@glade << "gdbus.glade"
|
|
79
|
-
|
|
80
|
-
@sessiontreeview = @glade.get_object("sessiontreeview")
|
|
81
|
-
setup_treeview_renderer(@sessiontreeview, "D-Bus Objects")
|
|
82
|
-
@sessiontreeview.selection.signal_connect("changed") do |selection|
|
|
83
|
-
on_treeview_selection_changed(selection)
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
@systemtreeview = @glade.get_object("systemtreeview")
|
|
87
|
-
setup_treeview_renderer(@systemtreeview, "D-Bus Objects")
|
|
88
|
-
@systemtreeview.selection.signal_connect("changed") do |selection|
|
|
89
|
-
on_treeview_selection_changed(selection)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
@methsigtreeview = @glade.get_object("methsigtreeview")
|
|
93
|
-
# ierk
|
|
94
|
-
setup_methodview_renderer(@methsigtreeview)
|
|
95
|
-
@methsigtreeview.signal_connect("row-activated") do |view, path, column|
|
|
96
|
-
on_method_activated(view, path, column)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
@window = @glade.get_object("window1")
|
|
100
|
-
@window.show_all
|
|
101
|
-
start_buses
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def beautify_method(meth)
|
|
105
|
-
# Damn, this need to be rewritten :p
|
|
106
|
-
s = meth.name + "("
|
|
107
|
-
if meth.is_a?(DBus::Method)
|
|
108
|
-
s += (meth.params.collect { |a| "in #{a[0]}:#{a[1]}" } +
|
|
109
|
-
meth.rets.collect { |a| "out #{a[0]}:#{a[1]}" }).join(", ")
|
|
110
|
-
elsif meth.is_a?(DBus::Signal)
|
|
111
|
-
s += (meth.params.collect { |a| "in #{a[0]}:#{a[1]}" }).join(", ")
|
|
112
|
-
end
|
|
113
|
-
s += ")"
|
|
114
|
-
s
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def on_treeview_selection_changed(selection)
|
|
118
|
-
selected = selection.selected
|
|
119
|
-
model = Gtk::ListStore.new(String, String, DBus::Method,
|
|
120
|
-
DBus::ProxyObjectInterface)
|
|
121
|
-
@methsigtreeview.model = model
|
|
122
|
-
if selected
|
|
123
|
-
if (intf = selected[1])
|
|
124
|
-
intf.methods.keys.sort.each do |mi|
|
|
125
|
-
m = intf.methods[mi]
|
|
126
|
-
subiter = model.append
|
|
127
|
-
subiter[0] = beautify_method(m)
|
|
128
|
-
subiter[1] = "M"
|
|
129
|
-
subiter[2] = m
|
|
130
|
-
subiter[3] = intf
|
|
131
|
-
end
|
|
132
|
-
intf.signals.keys.sort.each do |mi|
|
|
133
|
-
m = intf.signals[mi]
|
|
134
|
-
subiter = model.append
|
|
135
|
-
subiter[0] = beautify_method(m)
|
|
136
|
-
subiter[1] = "S"
|
|
137
|
-
subiter[2] = m
|
|
138
|
-
subiter[3] = intf
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
def on_method_activated(view, path, _column)
|
|
145
|
-
name = view.model.get_iter(path)[0]
|
|
146
|
-
puts "Clicked on: #{name.inspect}"
|
|
147
|
-
type = view.model.get_iter(path)[1]
|
|
148
|
-
if type == "M"
|
|
149
|
-
method = view.model.get_iter(path)[2]
|
|
150
|
-
intf = view.model.get_iter(path)[3]
|
|
151
|
-
MethodCallWindow.new(@window, intf, method).run
|
|
152
|
-
elsif type == "S"
|
|
153
|
-
signal = view.model.get_iter(path)[2]
|
|
154
|
-
intf = view.model.get_iter(path)[3]
|
|
155
|
-
mr = DBus::MatchRule.new.from_signal(intf, signal)
|
|
156
|
-
puts "*** Registering matchrule: #{mr} ***"
|
|
157
|
-
intf.object.bus.add_match(mr) do |sig|
|
|
158
|
-
puts "Got #{sig.member}(#{sig.params.join(",")})"
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
def on_sessiontreeview_row_activated(view, path, _column)
|
|
164
|
-
name = view.model.get_iter(path)[0]
|
|
165
|
-
puts "Clicked on: #{name.inspect}"
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
def on_window_delete_event(_window, _event)
|
|
169
|
-
Gtk.main_quit
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def setup_methodview_renderer(treeview)
|
|
173
|
-
renderer = Gtk::CellRendererText.new
|
|
174
|
-
_col_offset = treeview.insert_column(-1, "T", renderer, "text" => 1)
|
|
175
|
-
col_offset = treeview.insert_column(-1, "Name", renderer, "text" => 0)
|
|
176
|
-
column = treeview.get_column(col_offset - 1)
|
|
177
|
-
column.clickable = true
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def setup_treeview_renderer(treeview, str)
|
|
181
|
-
renderer = Gtk::CellRendererText.new
|
|
182
|
-
col_offset = treeview.insert_column(-1, str, renderer, "text" => 0)
|
|
183
|
-
column = treeview.get_column(col_offset - 1)
|
|
184
|
-
column.clickable = true
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def process_input(bus)
|
|
188
|
-
# THIS is the bad ass loop
|
|
189
|
-
# we should return to the glib main loop from time to time. Anyone with a
|
|
190
|
-
# proper way to handle it ?
|
|
191
|
-
bus.update_buffer
|
|
192
|
-
bus.messages.each do |msg|
|
|
193
|
-
bus.process(msg)
|
|
194
|
-
end
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
def start_buses
|
|
198
|
-
# call glibize to get dbus messages from the glib mainloop
|
|
199
|
-
DBus::SessionBus.instance.glibize
|
|
200
|
-
DBus::SystemBus.instance.glibize if ENABLE_SYSTEM
|
|
201
|
-
|
|
202
|
-
DBus::SessionBus.instance.proxy.ListNames do |_msg, names|
|
|
203
|
-
fill_treeview(DBus::SessionBus.instance, @sessiontreeview, names)
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
return unless ENABLE_SYSTEM
|
|
207
|
-
DBus::SystemBus.instance.proxy.ListNames do |_msg, names|
|
|
208
|
-
fill_treeview(DBus::SystemBus.instance, @systemtreeview, names)
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
def walk_node(model, iter, node)
|
|
213
|
-
node.each_pair do |key, val|
|
|
214
|
-
subiter = model.append(iter)
|
|
215
|
-
subiter[0] = key
|
|
216
|
-
walk_node(model, subiter, val)
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
return if node.object.nil?
|
|
220
|
-
node.object.interfaces.sort.each do |ifname|
|
|
221
|
-
subiter = model.append(iter)
|
|
222
|
-
subiter[0] = ifname
|
|
223
|
-
subiter[1] = node.object[ifname]
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
def introspect_services(model, bus)
|
|
228
|
-
el = @introspect_array.shift
|
|
229
|
-
if el !~ /^:/
|
|
230
|
-
iter = model.append(nil)
|
|
231
|
-
iter[0] = el
|
|
232
|
-
puts "introspecting: #{el}"
|
|
233
|
-
begin
|
|
234
|
-
service = bus.service(el).introspect
|
|
235
|
-
walk_node(model, iter, service.root)
|
|
236
|
-
rescue Exception => e
|
|
237
|
-
puts "DBus Error:"
|
|
238
|
-
puts e.backtrace.join("\n")
|
|
239
|
-
end
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
!@introspect_array.empty?
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
def fill_treeview(bus, treeview, array)
|
|
246
|
-
model = Gtk::TreeStore.new(String, DBus::ProxyObjectInterface)
|
|
247
|
-
treeview.model = model
|
|
248
|
-
@introspect_array = array.sort
|
|
249
|
-
Gtk.idle_add { introspect_services(model, bus) }
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
def main
|
|
253
|
-
Gtk.main
|
|
254
|
-
end
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
DBusUI.new.main
|
data/examples/gdbus/gdbus.glade
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<interface>
|
|
3
|
-
<!-- interface-requires gtk+ 2.6 -->
|
|
4
|
-
<!-- interface-naming-policy toplevel-contextual -->
|
|
5
|
-
<object class="GtkWindow" id="window1">
|
|
6
|
-
<property name="visible">True</property>
|
|
7
|
-
<property name="can_focus">False</property>
|
|
8
|
-
<property name="title" translatable="yes">GD-Bus</property>
|
|
9
|
-
<property name="default_width">500</property>
|
|
10
|
-
<property name="default_height">400</property>
|
|
11
|
-
<signal name="delete-event" handler="on_window_delete_event" swapped="no"/>
|
|
12
|
-
<child>
|
|
13
|
-
<object class="GtkHPaned" id="hpaned1">
|
|
14
|
-
<property name="visible">True</property>
|
|
15
|
-
<property name="can_focus">True</property>
|
|
16
|
-
<child>
|
|
17
|
-
<object class="GtkNotebook" id="notebook1">
|
|
18
|
-
<property name="visible">True</property>
|
|
19
|
-
<property name="can_focus">True</property>
|
|
20
|
-
<child>
|
|
21
|
-
<object class="GtkScrolledWindow" id="scrolledwindow3">
|
|
22
|
-
<property name="visible">True</property>
|
|
23
|
-
<property name="can_focus">True</property>
|
|
24
|
-
<property name="shadow_type">in</property>
|
|
25
|
-
<child>
|
|
26
|
-
<object class="GtkTreeView" id="sessiontreeview">
|
|
27
|
-
<property name="visible">True</property>
|
|
28
|
-
<property name="can_focus">True</property>
|
|
29
|
-
<signal name="row-activated" handler="on_sessiontreeview_row_activated" swapped="no"/>
|
|
30
|
-
</object>
|
|
31
|
-
</child>
|
|
32
|
-
</object>
|
|
33
|
-
</child>
|
|
34
|
-
<child type="tab">
|
|
35
|
-
<object class="GtkLabel" id="label1">
|
|
36
|
-
<property name="visible">True</property>
|
|
37
|
-
<property name="can_focus">False</property>
|
|
38
|
-
<property name="label" translatable="yes">Session</property>
|
|
39
|
-
</object>
|
|
40
|
-
<packing>
|
|
41
|
-
<property name="tab_fill">False</property>
|
|
42
|
-
</packing>
|
|
43
|
-
</child>
|
|
44
|
-
<child>
|
|
45
|
-
<object class="GtkScrolledWindow" id="scrolledwindow5">
|
|
46
|
-
<property name="visible">True</property>
|
|
47
|
-
<property name="can_focus">True</property>
|
|
48
|
-
<property name="shadow_type">in</property>
|
|
49
|
-
<child>
|
|
50
|
-
<object class="GtkTreeView" id="systemtreeview">
|
|
51
|
-
<property name="visible">True</property>
|
|
52
|
-
<property name="can_focus">True</property>
|
|
53
|
-
</object>
|
|
54
|
-
</child>
|
|
55
|
-
</object>
|
|
56
|
-
<packing>
|
|
57
|
-
<property name="position">1</property>
|
|
58
|
-
</packing>
|
|
59
|
-
</child>
|
|
60
|
-
<child type="tab">
|
|
61
|
-
<object class="GtkLabel" id="label2">
|
|
62
|
-
<property name="visible">True</property>
|
|
63
|
-
<property name="can_focus">False</property>
|
|
64
|
-
<property name="label" translatable="yes">System</property>
|
|
65
|
-
</object>
|
|
66
|
-
<packing>
|
|
67
|
-
<property name="position">1</property>
|
|
68
|
-
<property name="tab_fill">False</property>
|
|
69
|
-
</packing>
|
|
70
|
-
</child>
|
|
71
|
-
</object>
|
|
72
|
-
<packing>
|
|
73
|
-
<property name="resize">False</property>
|
|
74
|
-
<property name="shrink">True</property>
|
|
75
|
-
</packing>
|
|
76
|
-
</child>
|
|
77
|
-
<child>
|
|
78
|
-
<object class="GtkScrolledWindow" id="scrolledwindow4">
|
|
79
|
-
<property name="visible">True</property>
|
|
80
|
-
<property name="can_focus">True</property>
|
|
81
|
-
<property name="shadow_type">in</property>
|
|
82
|
-
<child>
|
|
83
|
-
<object class="GtkTreeView" id="methsigtreeview">
|
|
84
|
-
<property name="visible">True</property>
|
|
85
|
-
<property name="can_focus">True</property>
|
|
86
|
-
<signal name="row-activated" handler="on_method_activated" swapped="no"/>
|
|
87
|
-
</object>
|
|
88
|
-
</child>
|
|
89
|
-
</object>
|
|
90
|
-
<packing>
|
|
91
|
-
<property name="resize">False</property>
|
|
92
|
-
<property name="shrink">True</property>
|
|
93
|
-
</packing>
|
|
94
|
-
</child>
|
|
95
|
-
</object>
|
|
96
|
-
</child>
|
|
97
|
-
</object>
|
|
98
|
-
</interface>
|
data/examples/gdbus/launch.sh
DELETED
data/spec/server_spec.rb
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env rspec
|
|
2
|
-
# Test that a server survives various error cases
|
|
3
|
-
require_relative "spec_helper"
|
|
4
|
-
require "dbus"
|
|
5
|
-
|
|
6
|
-
class Foo < DBus::Object
|
|
7
|
-
dbus_interface "org.ruby.ServerTest" do
|
|
8
|
-
dbus_signal :signal_without_arguments
|
|
9
|
-
dbus_signal :signal_with_argument, "epsilon:d"
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
dbus_signal :signal_without_interface
|
|
13
|
-
rescue DBus::Object::UndefinedInterface
|
|
14
|
-
# raised by the preceding signal declaration
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
class Bar < DBus::Object
|
|
18
|
-
dbus_interface "org.ruby.ServerTest" do
|
|
19
|
-
# a valid Ruby symbol but an invalid DBus name; Ticket#38
|
|
20
|
-
dbus_signal :signal_with_a_bang!
|
|
21
|
-
end
|
|
22
|
-
rescue DBus::InvalidMethodName
|
|
23
|
-
# raised by the preceding signal declaration
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
describe "ServerTest" do
|
|
27
|
-
before(:each) do
|
|
28
|
-
@bus = DBus::ASessionBus.new
|
|
29
|
-
@svc = @bus.request_service "org.ruby.server-test"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
after(:each) do
|
|
33
|
-
@bus.proxy.ReleaseName "org.ruby.server-test"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "tests unexporting an object" do
|
|
37
|
-
obj = Foo.new "/org/ruby/Foo"
|
|
38
|
-
@svc.export obj
|
|
39
|
-
expect(@svc.unexport(obj)).to be_a DBus::Object
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "tests unexporting an object not exported" do
|
|
43
|
-
obj = Foo.new "/org/ruby/Foo"
|
|
44
|
-
expect(@svc.unexport(obj)).to be false
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "tests emiting signals" do
|
|
48
|
-
obj = Foo.new "/org/ruby/Foo"
|
|
49
|
-
@svc.export obj
|
|
50
|
-
obj.signal_without_arguments
|
|
51
|
-
obj.signal_with_argument(-0.1)
|
|
52
|
-
end
|
|
53
|
-
end
|
data/spec/tools/test_server
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
#! /bin/sh
|
|
2
|
-
# A wrapper for DBus tests
|
|
3
|
-
# Run a server (directly or by dbus activation) and then the test
|
|
4
|
-
# $0 server [args...] -- test [args...]
|
|
5
|
-
set -o errexit
|
|
6
|
-
|
|
7
|
-
while [ "$1" != "--" ]; do
|
|
8
|
-
SERVER="$SERVER $1"
|
|
9
|
-
shift
|
|
10
|
-
done
|
|
11
|
-
shift # --
|
|
12
|
-
|
|
13
|
-
setup_activation () {
|
|
14
|
-
SDIR=$XDG_DATA_DIRS/dbus-1/services
|
|
15
|
-
mkdir -p $SDIR
|
|
16
|
-
# FIXME Name is hardcoded
|
|
17
|
-
cat <<EOF > $SDIR/test.service
|
|
18
|
-
[D-BUS Service]
|
|
19
|
-
Name=org.ruby.service
|
|
20
|
-
Exec=$SERVER
|
|
21
|
-
EOF
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
run_server () {
|
|
25
|
-
echo -n "Hey, server, get on da bus... "
|
|
26
|
-
# start the server
|
|
27
|
-
$SERVER & sleep 3
|
|
28
|
-
echo "off we go!"
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export XDG_DATA_DIRS=`mktemp -d dbus.activation.XXXXXX`
|
|
32
|
-
RM_FILES="$RM_FILES $XDG_DATA_DIRS"
|
|
33
|
-
setup_activation
|
|
34
|
-
#run_server
|
|
35
|
-
|
|
36
|
-
# Clean up at exit.
|
|
37
|
-
trap "rm -rf \$RM_FILES" EXIT TERM INT
|
|
38
|
-
|
|
39
|
-
"$@"
|