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
|
#!/usr/bin/env rspec
# frozen_string_literal: true
require_relative "spec_helper"
require "dbus"
describe DBus::BusConnection do
let(:bus) { DBus::ASessionBus.new }
# deprecated method
describe "#request_service", tag_bus: true, tag_deprecated: true do
context "when the name request succeeds" do
# Formerly it returned Service, now ObjectServer takes its role.
# Replacement: server = bus.object_server; bus.request_name(name)
it "returns something which can export objects" do
name = "org.rubygems.ruby_dbus.RequestServiceTest"
server = bus.request_service(name)
expect(server).to respond_to(:export)
bus.proxy.ReleaseName(name)
end
end
context "when the name is taken already", tag_service: true do
it "raises NameRequestError... too late" do
name = "org.ruby.service"
expect do
bus.request_service(name)
_unrelated_call = bus.proxy.GetId.first
end.to raise_error(DBus::Connection::NameRequestError)
# The call fails but it means we did not get the name RIGHT AWAY
# but we are still queued to get it as soon as the current owner
# gives it up.
# So even now we have to the bus to remove us from the queue
bus.proxy.ReleaseName(name)
end
end
# This only works with our special bus setup
context "when we're not allowed to own the name", tag_limited_bus: true do
it "raises an error... too late" do
name = "org.rubygems.ruby_dbus.NobodyCanOwnThisName"
expect do
bus.request_service(name)
_unrelated_call = bus.proxy.GetId.first
end.to raise_error(DBus::Error, /not allowed to own the service/)
end
end
end
describe "#request_name", tag_bus: true do
context "when the name request succeeds" do
it "returns a success code" do
name = "org.rubygems.ruby_dbus.RequestNameTest"
expect(bus.request_name(name)).to eq DBus::Connection::REQUEST_NAME_REPLY_PRIMARY_OWNER
# second time, considered also a success
expect(bus.request_name(name)).to eq DBus::Connection::REQUEST_NAME_REPLY_ALREADY_OWNER
bus.release_name(name)
end
end
context "when the name is taken already", tag_service: true do
it "raises NameRequestError" do
name = "org.ruby.service"
expect do
bus.request_name(name)
end.to raise_error(DBus::Connection::NameRequestError)
end
end
context "when the name is taken already but we request queuing", tag_service: true do
it "raises NameRequestError but we are queued" do
name = "org.ruby.service"
owning = nil
# TODO: we do not expect the handlers to run
bus.on_name_acquired { owning = true }
bus.on_name_lost { owning = false }
expect do
bus.request_name(name, queue: true)
end.to raise_error(DBus::Connection::NameRequestError)
expect(bus.release_name(name)).to eq DBus::BusConnection::RELEASE_NAME_REPLY_RELEASED
end
end
context "when we're not allowed to own the name", tag_limited_bus: true do
it "raises an error" do
name = "org.rubygems.ruby_dbus.NobodyCanOwnThisName"
expect do
bus.request_name(name)
end.to raise_error(DBus::Error, /not allowed to own the service/)
end
end
end
end
|