spec/lib/gdk/diagnostic/loopback_persistence_spec.rb (81 lines of code) (raw):
# frozen_string_literal: true
RSpec.describe GDK::Diagnostic::LoopbackPersistence do
include ShelloutHelper
subject(:diagnostic) { described_class.new }
let(:platform) { 'linux' }
before do
sh = gdk_shellout_double(success?: true, run: output)
allow_gdk_shellout_command(%w[ifconfig lo0]).and_return(sh)
allow(GDK::Machine).to receive(:platform).and_return(platform)
end
context 'on linux' do
it 'passes by default' do
expect(diagnostic.success?).to be(true)
end
context 'when listen_address is 172.16.123.1' do
before do
stub_gdk_yaml <<~YAML
listen_address: 172.16.123.1
YAML
end
it 'passes' do
expect(diagnostic.success?).to be(true)
end
end
end
context 'on macos' do
let(:team_member) { true }
let(:platform) { 'darwin' }
let(:root_uid) { 42 }
let(:wheel_gid) { 43 }
before do
allow(Process::UID).to receive(:from_name).with('root').and_return(root_uid)
allow(Process::GID).to receive(:from_name).with('wheel').and_return(wheel_gid)
end
it 'passes by default' do
expect(diagnostic.success?).to be(true)
end
context 'when listen_address is 172.16.123.1 and loopback is configured' do
let(:output) do
<<~OUTPUT
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 172.16.123.1 netmask 0xffff0000
nd6 options=201<PERFORMNUD,DAD>
OUTPUT
end
before do
stub_gdk_yaml <<~YAML
listen_address: 172.16.123.1
YAML
allow(File).to receive(:lstat).and_return(launchdaemon_lstat)
end
context 'when daemon plist file has good owner and permission' do
let(:launchdaemon_lstat) do
instance_double(File::Stat, uid: root_uid, gid: wheel_gid, mode: 0o644)
end
it 'succeeds' do
expect(diagnostic.success?).to be(true)
end
end
context 'when daemon plist file has wrong owner' do
let(:launchdaemon_lstat) do
instance_double(File::Stat, uid: root_uid + 1, gid: wheel_gid - 1, mode: 0o644)
end
it 'fails' do
expect(diagnostic.success?).to be(false)
end
end
context 'when daemon plist file has wrong permissions' do
let(:launchdaemon_lstat) do
instance_double(File::Stat, uid: root_uid, gid: wheel_gid, mode: 0o666)
end
it 'fails' do
expect(diagnostic.success?).to be(false)
end
end
end
end
end