Compare commits

...

3 Commits

Author SHA1 Message Date
Tim Sharpe 52e267fe32 Support for mocking exported resources 2011-08-09 10:03:41 -07:00
Tim Sharpe ac4bc432d0 It works 2011-08-04 18:52:48 -07:00
Tim Sharpe cc385e3e28 WIP 2011-08-04 14:46:47 -07:00
8 changed files with 117 additions and 5 deletions

View File

@ -30,8 +30,10 @@ module RSpec::Puppet
nodename = self.respond_to?(:node) ? node : Puppet[:certname]
facts_val = self.respond_to?(:facts) ? facts : {}
virt_res = self.respond_to?(:virtual_resources) ? virtual_resources : []
exp_res = self.respond_to?(:exported_resources) ? exported_resources : []
build_catalog(nodename, facts_val)
build_catalog(nodename, facts_val, virt_res, exp_res)
end
end
end

View File

@ -37,8 +37,10 @@ module RSpec::Puppet
'fqdn' => nodename,
}
facts_val.merge!(facts) if self.respond_to?(:facts)
virt_res = self.respond_to?(:virtual_resources) ? virtual_resources : []
exp_res = self.respond_to?(:exported_resources) ? exported_resources : []
build_catalog(nodename, facts_val)
build_catalog(nodename, facts_val, virt_res, exp_res)
end
end
end

View File

@ -23,7 +23,7 @@ module RSpec::Puppet
ret = true
resource = catalogue.resource(@referenced_type, @title)
if resource.nil?
if resource.nil? or resource.virtual?
ret = false
else
if @expected_params

View File

@ -1,10 +1,71 @@
class Puppet::Parser::Compiler
def compile
set_node_parameters
create_settings_scope
evaluate_main
evaluate_ast_node
mock_resources.each do |r|
add_resource(topscope, r)
end
evaluate_node_classes
evaluate_generators
finish
fail_on_unevaluated
@catalog
end
end
class Puppet::Parser::Collector
def collect_exported
if @equery =~ /param_values.value = '(.*?)' and param_names.name = '(.*?)'/
param_value = $1
param_name = $2.to_sym
end
mock_resources.select { |r| r[param_name] == param_value }
end
end
module RSpec::Puppet
module Support
def build_catalog nodename, facts_val
module Support
def build_catalog(nodename, facts_val, virt_res, exp_res)
node_obj = Puppet::Node.new(nodename)
node_obj.merge(facts_val)
virt_res = [virt_res] if virt_res.is_a? Hash
exp_res = [exp_res] if exp_res.is_a? Hash
scope = Puppet::Parser::Scope.new
mock_virtual_resources = virt_res.map do |r|
res = Puppet::Parser::Resource.new(r[:type], r[:title], {:virtual => true, :scope => scope})
r[:parameters].keys.each { |k| res[k] = r[:parameters][k] }
res
end
mock_exported_resources = exp_res.map do |r|
res = Puppet::Parser::Resource.new(r[:type], r[:title], :virtual => true, :exported => true, :scope => scope)
r[:parameters].keys.each { |k| res[k] = r[:parameters][k] }
res
end
Puppet::Parser::Compiler.any_instance.stub(:mock_resources).and_return(mock_virtual_resources + mock_exported_resources)
Puppet::Parser::Collector.any_instance.stub(:mock_resources).and_return(mock_exported_resources)
require 'puppet/rails'
Puppet::Rails.stub(:init).and_return(true)
Puppet.features.stub(:rails?).and_return(true)
Puppet.settings.set_value(:storeconfigs, true, :memory, :dont_trigger_handles => true)
# trying to be compatible with 2.7 as well as 2.6
if Puppet::Resource::Catalog.respond_to? :find
Puppet::Resource::Catalog.find(node_obj.name, :use_node => node_obj)

View File

@ -0,0 +1,25 @@
require 'spec_helper'
describe 'exported::realise_file' do
let(:exported_resources) { [
{
:type => 'file',
:title => 'foo',
:parameters => {
:owner => 'root',
:group => 'root',
}
},
{
:type => 'file',
:title => 'foobar',
:parameters => {
:owner => 'daemon',
:group => 'daemon',
}
}
] }
it { should contain_file('foo').with_owner('root').with_group('root') }
it { should_not contain_file('foobar') }
end

View File

@ -0,0 +1,16 @@
require 'spec_helper'
describe 'virtual::realise_file' do
let(:virtual_resources) {
{
:type => 'file',
:title => 'foo',
:parameters => {
:owner => 'root',
:group => 'root',
}
}
}
it { should contain_file('foo').with_owner('root').with_group('root') }
end

View File

@ -0,0 +1,3 @@
class exported::realise_file {
File<<| owner == 'root' |>>
}

View File

@ -0,0 +1,3 @@
class virtual::realise_file {
File<| |>
}