cookbooks/aws-parallelcluster-platform/spec/unit/resources/enroot_spec.rb (173 lines of code) (raw):

require 'spec_helper' package_version = '3.4.1' class ConvergeEnroot def self.setup(chef_run) chef_run.converge_dsl('aws-parallelcluster-platform') do enroot 'setup' do action :setup end end end end describe 'aws-parallelcluster-platform::enroot:package_version' do for_all_oses do |platform, version| context "on #{platform}#{version}" do cached(:chef_run) do allow_any_instance_of(Object).to receive(:nvidia_enabled?).and_return(false) runner = runner(platform: platform, version: version, step_into: ['enroot']) ConvergeEnroot.setup(runner) end cached(:resource) do chef_run.find_resource('enroot', 'setup') end it 'returns the expected enroot version' do expected_enroot_version = "3.4.1" expect(resource.package_version).to eq(expected_enroot_version) end end end end describe 'aws-parallelcluster-platform::enroot:enroot_installed' do for_all_oses do |platform, version| context "on #{platform}#{version}" do binary = '/usr/bin/enroot' [true, false].each do |binary_exist| context "when binary #{binary} does #{'not ' unless binary_exist}exist" do cached(:chef_run) do allow(File).to receive(:exist?).with(binary).and_return(binary_exist) runner = runner(platform: platform, version: version, step_into: ['enroot']) ConvergeEnroot.setup(runner) end cached(:resource) do chef_run.find_resource('enroot', 'setup') end expected_result = binary_exist it "returns #{expected_result}" do expect(resource.enroot_installed).to eq(expected_result) end end end end end end describe 'aws-parallelcluster-platform::enroot:arch_suffix' do for_all_oses do |platform, version| context "on #{platform}#{version} - arm" do cached(:chef_run) do allow_any_instance_of(Object).to receive(:nvidia_enabled?).and_return(false) runner = runner(platform: platform, version: version, step_into: ['enroot']) ConvergeEnroot.setup(runner) end cached(:resource) do chef_run.find_resource('enroot', 'setup') end context 'on arm instance' do cached(:expected_arch) do case platform when 'amazon', 'redhat', 'rocky' 'aarch64' else 'arm64' end end it 'returns arch value for arm architecture' do allow_any_instance_of(Object).to receive(:arm_instance?).and_return(true) expect(resource.arch_suffix).to eq(expected_arch) end end context 'not on arm instance' do cached(:expected_arch) do platform == 'ubuntu' ? 'amd64' : 'x86_64' end it 'returns arch value for arm architecture' do allow_any_instance_of(Object).to receive(:arm_instance?).and_return(false) expect(resource.arch_suffix).to eq(expected_arch) end end end end end describe 'aws-parallelcluster-platform::enroot:setup' do for_all_oses do |platform, version| context "on #{platform}#{version}" do cached(:cluster_examples_dir) { '/path/to/cluster/examples/dir' } cached(:enroot_persistent_dir) { '/path/to/enroot/persistent/dir' } cached(:enroot_temporary_dir) { '/path/to/enroot/temporary/dir' } context "when enroot is already installed" do let(:chef_run) do stubs_for_resource('enroot') do |res| allow(res).to receive(:enroot_installed).and_return(true) end runner(platform: platform, version: version, step_into: ['enroot']) do |node| node.override['cluster']['enroot']['version'] = package_version node.override['cluster']['examples_dir'] = cluster_examples_dir end end before do ConvergeEnroot.setup(chef_run) end it 'does not install Enroot' do is_expected.not_to run_bash('Install enroot') end it 'does not create the Enroot configuration' do is_expected.not_to create_template("#{cluster_examples_dir}/enroot/enroot.conf") end end let(:chef_run) do stubs_for_resource('enroot') do |res| allow(res).to receive(:enroot_installed).and_return(false) end runner(platform: platform, version: version, step_into: ['enroot']) do |node| node.override['cluster']['enroot']['version'] = package_version node.override['cluster']['examples_dir'] = cluster_examples_dir node.override['cluster']['enroot']['persistent_dir'] = enroot_persistent_dir node.override['cluster']['enroot']['temporary_dir'] = enroot_temporary_dir end end before do ConvergeEnroot.setup(chef_run) end it 'installs Enroot' do is_expected.not_to run_bash('Install enroot') end it 'creates the Enroot example configuration' do is_expected.to create_template("#{cluster_examples_dir}/enroot/enroot.conf").with( source: 'enroot/enroot.conf.erb', owner: 'root', group: 'root', mode: '0644' ) end context 'when nvidia is enabled' do before do stubs_for_provider('enroot') do |resource| allow(resource).to receive(:nvidia_enabled?).and_return(true) end end context 'and enroot is installed' do before do ConvergeEnroot.setup(chef_run) end it 'installs Enroot' do is_expected.to run_bash('Install enroot') end end end context 'when nvidia is not enabled' do before do stubs_for_provider('enroot') do |resource| allow(resource).to receive(:nvidia_enabled?).and_return(false) end end context 'and enroot is installed' do before do ConvergeEnroot.setup(chef_run) end it 'does not install Enroot' do is_expected.not_to run_bash('Install enroot') end end end end end end