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

require 'spec_helper' class ConvergeArmPl def self.setup(chef_run) chef_run.converge_dsl('aws-parallelcluster-platform') do arm_pl 'setup' do action :setup end end end end describe 'arm_pl:setup' do for_all_oses do |platform, version| context "on #{platform}#{version} x86" do cached(:aws_region) { 'test_region' } cached(:aws_domain) { 'test_domain' } cached(:armpl_major_minor_version) do '24.10' end cached(:armpl_platform) do case platform when 'centos' 'RHEL-7' when 'ubuntu' "Ubuntu-#{version}" when 'amazon' if version == '2' "AmazonLinux-2" elsif version == '2023' 'RHEL-9' end else "RHEL-#{version}" end end cached(:gcc_major_minor_version) do case "#{platform}#{version}" when 'amazon2023', 'ubuntu24.04', 'ubuntu22.04', 'redhat9', 'rocky9' '11.3' else '9.3' end end cached(:gcc_patch_version) { '0' } cached(:sources_dir) { 'sources_test_dir' } cached(:modulefile_dir) { platform == 'ubuntu' ? '/usr/share/modules/modulefiles' : '/usr/share/Modules/modulefiles' } cached(:package_manager) { platform == 'ubuntu' ? 'deb' : 'rpm' } cached(:armpl_version) { "#{armpl_major_minor_version}" } cached(:armpl_tarball_name) { "arm-performance-libraries_#{armpl_version}_#{package_manager}_gcc.tar" } cached(:armpl_url) { "https://bucket.s3.amazonaws.com/archives/armpl/#{armpl_platform}/#{armpl_tarball_name}" } cached(:armpl_installer) { "#{sources_dir}/#{armpl_tarball_name}" } cached(:armpl_name) { "arm-performance-libraries_#{armpl_version}_#{package_manager}" } cached(:gcc_version) { "#{gcc_major_minor_version}.#{gcc_patch_version}" } cached(:gcc_url) { "https://bucket.s3.amazonaws.com/archives/dependencies/gcc/gcc-#{gcc_version}.tar.gz" } cached(:gcc_tarball) { "#{sources_dir}/gcc-#{gcc_version}.tar.gz" } cached(:gcc_modulefile) { "/opt/arm/armpl/#{armpl_version}/modulefiles/armpl/gcc-#{gcc_major_minor_version}" } context "when arm_pl is not supported" do cached(:chef_run) do runner = runner(platform: platform, version: version, step_into: ['arm_pl']) do |node| node.override['conditions']['arm_pl_supported'] = false node.override['cluster']['artifacts_s3_url'] = "https://bucket.s3.amazonaws.com/archives" end ConvergeArmPl.setup(runner) end it "doesn't set up arm_pl" do is_expected.not_to run_bash("install arm performance library") end end # not_if { ::File.exist?("/opt/arm/armpl/#{armpl_version}") } context "when arm_pl is supported" do cached(:chef_run) do runner = runner(platform: platform, version: version, step_into: ['arm_pl']) do |node| node.override['conditions']['arm_pl_supported'] = true node.override['cluster']['sources_dir'] = sources_dir node.override['cluster']['region'] = aws_region node.override['cluster']['artifacts_s3_url'] = "https://bucket.s3.amazonaws.com/archives" end allow_any_instance_of(Object).to receive(:aws_domain).and_return(aws_domain) ConvergeArmPl.setup(runner) end cached(:node) { chef_run.node } it 'sets up arm_pl' do is_expected.to setup_arm_pl('setup') end it 'creates sources directory' do is_expected.to create_directory(sources_dir).with_recursive(true) end it 'sets up environment modules' do is_expected.to setup_modules('Prerequisite: Environment modules') end it 'sets up build tools' do is_expected.to setup_build_tools('Prerequisite: build tools') end it 'installs utility packages' do is_expected.to install_package(%w(wget bzip2)) end it 'installs prereuisites' do if platform == 'centos' is_expected.to install_package('centos-release-scl-rh') is_expected.to install_package('devtoolset-8-binutils') end end it 'download ArmPL tarball' do is_expected.to create_remote_file(armpl_installer).with( source: armpl_url, mode: '0644', retries: 3, retry_delay: 5 ) end it 'installs arm performance library' do is_expected.to run_bash('install arm performance library') .with_cwd(sources_dir) .with_creates("/opt/arm/armpl/#{armpl_version}") end it 'creates armpl module directory' do is_expected.to create_directory("#{modulefile_dir}/armpl") end it 'creates arm performance library modulefile configuration' do armpl_license_dir = "/opt/arm/armpl/#{armpl_version}/arm-performance-libraries_#{armpl_version}_gcc/license_terms" is_expected.to create_template("#{modulefile_dir}/armpl/#{armpl_version}").with( source: 'arm_pl/armpl_modulefile.erb', user: 'root', group: 'root', mode: '0755', variables: { armpl_version: armpl_version, armpl_license_dir: armpl_license_dir, gcc_major_minor_version: gcc_major_minor_version, } ) end it 'downloads gcc tarball' do is_expected.to create_if_missing_remote_file(gcc_tarball).with( source: gcc_url, mode: '0644', retries: 5, retry_delay: 10, ssl_verify_mode: :verify_none ) end it 'installs gcc' do is_expected.to run_bash('make install').with( user: 'root', group: 'root', cwd: sources_dir, retries: 5, retry_delay: 10, creates: '/opt/arm/armpl/gcc' ) end it 'created gcc modulefile configuration' do is_expected.to create_template(gcc_modulefile).with( source: 'arm_pl/gcc_modulefile.erb', user: 'root', group: 'root', mode: '0755', variables: { gcc_version: gcc_version } ) end it 'sets node attributes' do expect(node['cluster']['armpl']['version']).to eq(armpl_version) expect(node['cluster']['armpl']['gcc']['major_minor_version']).to eq(gcc_major_minor_version) expect(node['cluster']['armpl']['gcc']['patch_version']).to eq(gcc_patch_version) expect(node['cluster']['armpl']['gcc']['version']).to eq(gcc_version) is_expected.to write_node_attributes("dump node attributes") end end end end end