File: session_bus_spec.rb

package info (click to toggle)
ruby-dbus 0.25.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 776 kB
  • sloc: ruby: 6,584; xml: 225; sh: 38; makefile: 8
file content (104 lines) | stat: -rwxr-xr-x 3,883 bytes parent folder | download
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
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/env rspec
# frozen_string_literal: true

require_relative "spec_helper"
require "dbus"

describe DBus::ASystemBus do
  describe "#initialize" do
    it "will use DBUS_SYSTEM_BUS_ADDRESS or the well known address" do
      expect(ENV)
        .to receive(:[])
        .with("DBUS_SYSTEM_BUS_ADDRESS")
        .and_return(nil)
      expect(DBus::MessageQueue)
        .to receive(:new)
        .with("unix:path=/var/run/dbus/system_bus_socket")
      expect_any_instance_of(described_class).to receive(:send_hello)

      described_class.new
    end
  end
end

describe DBus::ASessionBus do
  subject(:dbus_session_bus_address) { "unix:abstract=/tmp/dbus-foo,guid=123" }

  describe "#session_bus_address" do
    around(:each) do |example|
      @original_dbus_session_bus_address = ENV["DBUS_SESSION_BUS_ADDRESS"]
      example.call
      ENV["DBUS_SESSION_BUS_ADDRESS"] = @original_dbus_session_bus_address
    end

    it "returns DBUS_SESSION_BUS_ADDRESS as it is" do
      ENV["DBUS_SESSION_BUS_ADDRESS"] = dbus_session_bus_address
      expect(DBus::ASessionBus.session_bus_address).to eq(dbus_session_bus_address)
    end

    it "uses launchd on macOS when ENV and file fail" do
      ENV["DBUS_SESSION_BUS_ADDRESS"] = nil
      expect(described_class).to receive(:address_from_file).and_return(nil)
      expect(DBus::Platform).to receive(:macos?).and_return(true)

      expect(described_class.session_bus_address).to start_with "launchd:"
    end

    it "raises a readable exception when all addresses fail" do
      ENV["DBUS_SESSION_BUS_ADDRESS"] = nil
      expect(described_class).to receive(:address_from_file).and_return(nil)
      expect(DBus::Platform).to receive(:macos?).and_return(false)

      expect { described_class.session_bus_address }.to raise_error(NotImplementedError, /Cannot find session bus/)
    end
  end

  describe "#address_from_file" do
    let(:session_bus_file_path) { %r{\.dbus/session-bus/baz-\d} }

    before do
      # mocks of files for address_from_file method
      machine_id_path = File.expand_path("/etc/machine-id", __dir__)
      expect(Dir).to receive(:[]).with(any_args) { [machine_id_path] }
      expect(File).to receive(:read).with(machine_id_path) { "baz" }
      expect(File).to receive(:exist?).with(session_bus_file_path) { true }
    end

    around(:each) do |example|
      with_env("DISPLAY", ":0.0") do
        example.call
      end
    end

    context "when DBUS_SESSION_BUS_ADDRESS from file is surrounded by quotation marks" do
      it "returns session bus address without single quotation marks" do
        expect(File).to receive(:open).with(session_bus_file_path) { <<-TEXT.gsub(/^\s*/, "") }
          DBUS_SESSION_BUS_ADDRESS='#{dbus_session_bus_address}'
          DBUS_SESSION_BUS_PID=12345
          DBUS_SESSION_BUS_WINDOWID=12345678
        TEXT
        expect(DBus::ASessionBus.address_from_file).to eq(dbus_session_bus_address)
      end

      it "returns session bus address without double quotation marks" do
        expect(File).to receive(:open).with(session_bus_file_path) { <<-TEXT.gsub(/^\s*/, "") }
          DBUS_SESSION_BUS_ADDRESS="#{dbus_session_bus_address}"
          DBUS_SESSION_BUS_PID=12345
          DBUS_SESSION_BUS_WINDOWID=12345678
        TEXT
        expect(DBus::ASessionBus.address_from_file).to eq(dbus_session_bus_address)
      end
    end

    context "when DBUS_SESSION_BUS_ADDRESS from file is not surrounded by any quotation marks" do
      it "returns session bus address as it is" do
        expect(File).to receive(:open).with(session_bus_file_path) { <<-TEXT.gsub(/^\s*/, "") }
          DBUS_SESSION_BUS_ADDRESS=#{dbus_session_bus_address}
          DBUS_SESSION_BUS_PID=12345
          DBUS_SESSION_BUS_WINDOWID=12345678
        TEXT
        expect(DBus::ASessionBus.address_from_file).to eq(dbus_session_bus_address)
      end
    end
  end
end