2017-06-16 15 views
0

chefspecを使用して単体テストを実行しようとしています。レシピにデータバッグを追加しました。データバッグがなければ、chefspecテストは正常に動作します。以下のエラーを示すデータバッグを追加した後:データバッグを持つchefspecテストを実行できません

1) database::prerequisites installs a package 
    Failure/Error: let(:chef_run) { ChefSpec::ServerRunner.new(platform: 'oracle', version: '7.2').converge(described_recipe) } 
Net::HTTPServerException: 
    404 "Not Found " 
# /tmp/chefspec20170616-8187-olziw2file_cache_path/cookbooks/database/recipes/prerequisites.rb:9:in `from_file' 
# ./prerequisites_spec.rb:4:in `block (2 levels) in <top (required)>' 
# ./prerequisites_spec.rb:25:in `block (2 levels) in <top (required)>' 

私はchefspecでデータバッグを扱う方法を知らない。ワークステーションでchef-clientを使ってレシピを実行するとうまくいきます。シェフスペックのテストは失敗しています。

レシピspecファイル:

require 'chefspec' 

describe 'database::prerequisites' do 
    let(:chef_run) { ChefSpec::ServerRunner.new(platform: 'oracle', version: '7.2').converge(described_recipe) } 



    before(:each) do 
     stub_command("cat /etc/oracle-release | grep 7.*").and_return(true) 
    end 

    before(:each) do 
     stub_command("cat /etc/oracle-release | grep 6.*").and_return(true) 
    end 

    before(:each) do 
     stub_command("cat /etc/selinux/config | grep SELINUX=disabled").and_return(true) 
    end 

    before(:each) do 
     stub_command("sestatus | grep enabled").and_return(true) 
    end 

    it 'installs a package ' do 
    expect(chef_run).to install_package('oracle-rdbms-server-12cR1-preinstall') 
    expect(chef_run).to install_package('net-tools') 
    expect(chef_run).to install_package('xorg-x11-apps') 

    end 

    it 'creates a directory with the default action' do 
    expect(chef_run).to create_directory('/u01/app/oraInventory') 
    expect(chef_run).to create_directory('/oradata') 
    end 

end 

レシピファイル:

my_secret_key = Chef::EncryptedDataBagItem.load_secret("/etc/secret_key") 
passwords = Chef::EncryptedDataBagItem.load("databags", "databag_passwords", my_secret_key) 

あなたがこの問題を解決する方法を提案してくださいでした。私はシェフのワークステーションでのみテストを行っています。

+0

なぜ 'data_bag_item'レシピDSLメソッド([Documentation here](https://docs.chef.io/dsl_recipe.html#data-bag-item))を使用しないのですか? – Tensibai

+0

ありがとうございました。しかし、私は同じエラーが発生しました。シェフのレシピの実行はうまくいった。テストでも同じエラーが発生しています。 –

答えて

0

あなたはhttps://github.com/chefspec/chefspec#dslServerRunnerを使用してこれを実行するか、あなたはRSpecの-モックを使用してload_secretload方法を模擬する方法を示し、テストサーバーでのデータのバッグを作成する必要があります。私は後者をより好む(テストランタイムの点で)より速く、より多くのユニット-yが好きですが、それはあなた次第です。

関連する問題