издевательство над chef_environment помимо _default выбрасывает 404 друг от друга - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь смоделировать chef_environment, и мне это удалось, если я пытаюсь смоделировать окружение _default chef. но как только я пишу контекстный блок с разными переменными окружения, я получаю ошибку 404

У меня есть среда stg и _default chef. Но я никогда не использовал среду _default, поэтому ее список default_attributes и другие вещи просто пусты. так может ли это быть причиной того, что _default работает, пока все другие envs выдают ошибку?

ниже - мой файл user_rspec.rb: - ​​

 require 'ChefSpec'
 require 'spec_helper'

 describe 'base::users' do
   let(:chef_run) do
     ChefSpec::ServerRunner.new(platform: 'amazon', version: '2017.09') do |node|
       env = Chef::Environment.new
       env.name environment # using a variable here so we can change it in other contexts
       allow(node).to receive(:chef_environment).and_return(env.name)
       allow(Chef::Environment).to receive(:load).and_return(env)
     end.converge(described_recipe)
   end

   context 'When all attributes are default, on an amazon 2017.09 with _default end' do
     let(:environment) { '_default' }

     it 'converges successfully' do
       expect{ chef_run }.to_not raise_error
     end

     it "create devops group" do
         expect(chef_run).to create_users_manage('devops').with(group_id: 3000)
     end

     it "assign sudo permission to devops-trainee on _default env" do
         expect(chef_run).to create_sudo('devops-trainee')
     end

   end

   context 'When all attributes are default, on an amazon 2017.09 with stg env' do
     let(:environment) { 'stg' }

     it "don't assign sudo permission to devops-trainee on stg env" do
         expect(chef_run).not_to create_sudo('devops-trainee')
     end

   end


 end

выход

base::users
  When all attributes are default, on an amazon 2017.09 with _default end
    converges successfully
    create devops group
    assign sudo permission to devops-trainee on _default env
  When all attributes are default, on an amazon 2017.09 with stg env
    don't assign sudo permission to devops-trainee on stg env (FAILED - 1)

Failures:

  1) base::users When all attributes are default, on an amazon 2017.09 with stg env don't assign sudo permission to devops-trainee on stg env
     Failure/Error:
       ChefSpec::ServerRunner.new(platform: 'amazon', version: '2017.09') do |node|
         env = Chef::Environment.new
         env.name environment # using a variable here so we can change it in other contexts
         allow(node).to receive(:chef_environment).and_return(env.name)
         allow(Chef::Environment).to receive(:load).and_return(env)
       end.converge(described_recipe)

     Net::HTTPServerException:
       404 "Not Found "
     # ./cookbooks/base/spec/unit/recipes/users_spec.rb:16:in `block (2 levels) in <top (required)>'
     # ./cookbooks/base/spec/unit/recipes/users_spec.rb:40:in `block (3 levels) in <top (required)>'

Finished in 18.34 seconds (files took 1.36 seconds to load)
4 examples, 1 failure

Failed examples:

rspec ./cookbooks/base/spec/unit/recipes/users_spec.rb:39 # base::users When all attributes are default, on an amazon 2017.09 with stg env don't assign sudo permission to devops-trainee on stg env


ChefSpec Coverage report generated...

  Total Resources:   5
  Touched Resources: 1
  Touch Coverage:    20.0%

1 Ответ

0 голосов
/ 04 сентября 2018

Ну, я нашел проблему в приведенном выше примере.

Я использую ChefSpec :: ServerRunner, а не SoloRunner, и все вышеперечисленное будет работать только в случае сольного бегуна.

Для ServerRunner вы должны сделать следующее:

  let(:chef_run) do
    ChefSpec::ServerRunner.new(platform: 'amazon', version: '2017.09') do |node, server|
      server.create_environment(environment)
      node.chef_environment = environment
    end.converge(described_recipe)
  end
...