itchef/cookbooks/cpe_helpers/spec/machine_owner_spec.rb (78 lines of code) (raw):

# Copyright (c) Facebook, Inc. and its affiliates. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # require 'chefspec' require_relative '../libraries/cpe_helpers' require_relative '../../cpe_logger/libraries/cpe_log' describe CPE::Helpers do context 'When on Linux' do before do allow(CPE::Helpers).to receive(:macos?).and_return(false) allow(CPE::Helpers).to receive(:linux?).and_return(true) allow(CPE::Helpers).to receive(:windows?).and_return(false) allow(CPE::Log).to receive(:log) end context 'admin_groups' do it 'returns the right groups if the ID is unquoted' do allow(::File).to receive(:readlines).with('/etc/os-release'). and_return(["ID=fedora\n"]) expect(CPE::Helpers.admin_groups).to eq(['wheel']) end it 'returns the right groups if the ID is quoted' do allow(::File).to receive(:readlines).with('/etc/os-release'). and_return(["ID=\"centos\"\n"]) expect(CPE::Helpers.admin_groups).to eq(['wheel']) end end end context 'admin_users' do it 'handles non-existent groups' do allow(CPE::Helpers).to receive(:admin_groups). and_return(['admin', 'sudo']) allow(::Etc).to receive(:getgrnam).with('admin'). and_raise(ArgumentError) allow(::Etc).to receive(:getgrnam).with('sudo'). and_return(::Etc::Group.new('sudo', 'x', 10, ['alice', 'bob'])) expect(CPE::Helpers.admin_users).to eq(['alice', 'bob']) end end context 'machine_owner' do before do allow(CPE::Helpers).to receive(:macos?).and_return(true) allow(CPE::Helpers).to receive(:linux?).and_return(false) allow(CPE::Helpers).to receive(:windows?).and_return(false) allow(CPE::Log).to receive(:log) end it 'filters out system UIDs and returns lowest user ID' do allow(CPE::Helpers).to receive(:admin_users). and_return(['root', 'bob', 'alice']) allow(::Etc).to receive(:getpwnam).with('root'). and_return(::Etc::Passwd.new( 'root', '*', 0, 0, 'root', '/var/root', '/bin/sh' )) allow(::Etc).to receive(:getpwnam).with('bob'). and_return(::Etc::Passwd.new( 'bob', '*', 501, 80, 'admin', '/Users/admin', '/bin/bash' )) allow(::Etc).to receive(:getpwnam).with('alice'). and_return(::Etc::Passwd.new( 'alice', '*', 500, 80, 'alice', '/Users/alice', '/bin/bash' )) expect(CPE::Helpers.machine_owner).to eq('alice') end it 'filters out system UIDs and admin' do allow(CPE::Helpers).to receive(:admin_users). and_return(['root', 'admin', 'alice']) allow(::Etc).to receive(:getpwnam).with('root'). and_return(::Etc::Passwd.new( 'root', '*', 0, 0, 'root', '/var/root', '/bin/sh' )) allow(::Etc).to receive(:getpwnam).with('admin'). and_return(::Etc::Passwd.new( 'admin', '*', 501, 80, 'admin', '/Users/admin', '/bin/bash' )) allow(::Etc).to receive(:getpwnam).with('alice'). and_return(::Etc::Passwd.new( 'alice', '*', 504, 80, 'alice', '/Users/alice', '/bin/bash' )) expect(CPE::Helpers.machine_owner).to eq('alice') end end end