spec/octocatalog-diff/integration/bootstrap_script_spec.rb (115 lines of code) (raw):

# frozen_string_literal: true # Integration tests around specifying a bootstrap script to confirm: # - Bootstrap script failing => failure of octocatalog-diff process # - Bootstrap debugging printed with --debug-bootstrap enabled # - Bootstrap debugging printed when bootstrap script fails require 'fileutils' require_relative 'integration_helper' describe 'bootstrap script integration test' do context 'with --bootstrap-current not specified' do it 'should not run the bootstrap script' do result = OctocatalogDiff::Integration.integration( spec_catalog_old: 'catalog-empty.json', spec_fact_file: 'facts.yaml', argv: [ '--basedir', OctocatalogDiff::Spec.fixture_path('repos/bootstrap'), '--bootstrap-script', 'config/bootstrap.sh', '--to', '.' ] ) expect(result[:exitcode]).to eq(-1) expect(result[:exception].message).to match(/Could not find class (::)?test for rspec-node.xyz.github.net/) end end context 'when a bootstrap script fails' do before(:all) do @repo_dir = Dir.mktmpdir FileUtils.cp_r OctocatalogDiff::Spec.fixture_path('repos/bootstrap'), @repo_dir @result = OctocatalogDiff::Integration.integration( spec_catalog_old: 'catalog-empty.json', spec_fact_file: 'facts.yaml', argv: [ '--basedir', File.join(@repo_dir, 'bootstrap'), '--bootstrap-current', '--bootstrap-script', 'config/broken-bootstrap.sh', '--no-parallel', '--to', '.' ] ) end after(:all) do OctocatalogDiff::Spec.clean_up_tmpdir(@repo_dir) end it 'should exit with error status' do expect(@result[:exitcode]).to eq(-1), OctocatalogDiff::Integration.format_exception(@result) end it 'should print error from bootstrap failing' do expect(@result[:exception].class.to_s).to eq('OctocatalogDiff::Errors::BootstrapError') expect(@result[:exception].message).to match(/bootstrap failed for .+: Fail, stdout\nFail, stderr/) expect(@result[:exception].message).not_to match(/Could not find class (::)?test/) end it 'should print debugging output from bootstrap script' do expect(@result[:logs]).to match(/Bootstrap: Fail, stdout/) expect(@result[:logs]).to match(/Bootstrap: Fail, stderr/) end end context 'when a bootstrap script succeeds' do context 'with bootstrap debugging enabled' do before(:all) do @repo_dir = Dir.mktmpdir FileUtils.cp_r OctocatalogDiff::Spec.fixture_path('repos/bootstrap'), @repo_dir @result = OctocatalogDiff::Integration.integration( spec_catalog_old: 'catalog-empty.json', spec_fact_file: 'facts.yaml', argv: [ '--basedir', File.join(@repo_dir, 'bootstrap'), '--bootstrap-current', '--bootstrap-script', 'config/bootstrap.sh', '--debug-bootstrap', '--no-parallel', '--to', '.' ] ) end after(:all) do OctocatalogDiff::Spec.clean_up_tmpdir(@repo_dir) end it 'should exit with success status' do expect(@result[:exitcode]).to eq(2), OctocatalogDiff::Integration.format_exception(@result) end it 'should contain the added resource' do resource = { diff_type: '+', type: 'File', title: '/tmp/foo' } expect(OctocatalogDiff::Spec.diff_match?(@result[:diffs], resource)).to eq(true) end it 'should print debugging output from bootstrap script' do expect(@result[:logs]).to match(/Bootstrap: Hello, stdout/) expect(@result[:logs]).to match(/Bootstrap: Hello, stderr/) end end context 'with bootstrap debugging disabled' do before(:all) do @repo_dir = Dir.mktmpdir FileUtils.cp_r OctocatalogDiff::Spec.fixture_path('repos/bootstrap'), @repo_dir @result = OctocatalogDiff::Integration.integration( spec_catalog_old: 'catalog-empty.json', spec_fact_file: 'facts.yaml', argv: [ '--basedir', File.join(@repo_dir, 'bootstrap'), '--bootstrap-current', '--bootstrap-script', 'config/bootstrap.sh', '--no-parallel', '--to', '.' ] ) end after(:all) do OctocatalogDiff::Spec.clean_up_tmpdir(@repo_dir) end it 'should exit with success status' do expect(@result[:exitcode]).to eq(2), OctocatalogDiff::Integration.format_exception(@result) end it 'should contain the added resource' do resource = { diff_type: '+', type: 'File', title: '/tmp/foo' } expect(OctocatalogDiff::Spec.diff_match?(@result[:diffs], resource)).to eq(true) end it 'should not print debugging output from bootstrap script' do expect(@result[:logs]).not_to match(/Bootstrap:.*/) end end end end