From 4ae3e45af78d230b4a046ada8480e9a7ae2cd3e3 Mon Sep 17 00:00:00 2001 From: Ilya Margolin Date: Tue, 31 Jul 2012 16:00:23 +0200 Subject: [PATCH 1/2] Cache the result of build_catalog --- lib/rspec-puppet/support.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/rspec-puppet/support.rb b/lib/rspec-puppet/support.rb index 452cdca..b6287ff 100644 --- a/lib/rspec-puppet/support.rb +++ b/lib/rspec-puppet/support.rb @@ -1,6 +1,10 @@ module RSpec::Puppet module Support - def build_catalog nodename, facts_val + + @@cache = {} + + protected + def build_catalog_without_cache nodename, facts_val node_obj = Puppet::Node.new(nodename) node_obj.merge(facts_val) @@ -13,6 +17,11 @@ module RSpec::Puppet end end + public + def build_catalog *args + @@cache[args] ||= self.build_catalog_without_cache(*args) + end + def munge_facts(facts) output = {} facts.keys.each { |key| output[key.to_s] = facts[key] } From 0bc21c778d5ed807564d250d7d3459feb293ec62 Mon Sep 17 00:00:00 2001 From: Ilya Margolin Date: Fri, 3 Aug 2012 14:43:59 +0200 Subject: [PATCH 2/2] fix regression, Puppet[:code] should be part of cache key --- lib/rspec-puppet/example/class_example_group.rb | 8 ++++---- lib/rspec-puppet/example/define_example_group.rb | 4 ++-- lib/rspec-puppet/example/host_example_group.rb | 4 ++-- lib/rspec-puppet/support.rb | 4 +++- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/rspec-puppet/example/class_example_group.rb b/lib/rspec-puppet/example/class_example_group.rb index e02d595..449d33c 100644 --- a/lib/rspec-puppet/example/class_example_group.rb +++ b/lib/rspec-puppet/example/class_example_group.rb @@ -34,12 +34,12 @@ module RSpec::Puppet end if !self.respond_to?(:params) || params == {} - Puppet[:code] = import_str + "include #{klass_name}" + code = import_str + "include #{klass_name}" else - Puppet[:code] = import_str + 'class' + " { \"" + klass_name + "\": " + params.keys.map { |r| "#{r.to_s} => #{params[r].inspect}" + code = import_str + 'class' + " { \"" + klass_name + "\": " + params.keys.map { |r| "#{r.to_s} => #{params[r].inspect}" }.join(',' ) + " }" end - Puppet[:code] = pre_cond + "\n" + Puppet[:code] + code = pre_cond + "\n" + code nodename = self.respond_to?(:node) ? node : Puppet[:certname] facts_val = { @@ -49,7 +49,7 @@ module RSpec::Puppet } facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts) - build_catalog(nodename, facts_val) + build_catalog(nodename, facts_val, code) end end end diff --git a/lib/rspec-puppet/example/define_example_group.rb b/lib/rspec-puppet/example/define_example_group.rb index d514cf0..78e2b3c 100644 --- a/lib/rspec-puppet/example/define_example_group.rb +++ b/lib/rspec-puppet/example/define_example_group.rb @@ -41,7 +41,7 @@ module RSpec::Puppet pre_cond = "" end - Puppet[:code] = pre_cond + "\n" + import_str + define_name + " { \"" + title + "\": " + param_str + " }" + code = pre_cond + "\n" + import_str + define_name + " { \"" + title + "\": " + param_str + " }" nodename = self.respond_to?(:node) ? node : Puppet[:certname] facts_val = { @@ -51,7 +51,7 @@ module RSpec::Puppet } facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts) - build_catalog(nodename, facts_val) + build_catalog(nodename, facts_val, code) end end end diff --git a/lib/rspec-puppet/example/host_example_group.rb b/lib/rspec-puppet/example/host_example_group.rb index ace0491..686ce8b 100644 --- a/lib/rspec-puppet/example/host_example_group.rb +++ b/lib/rspec-puppet/example/host_example_group.rb @@ -13,7 +13,7 @@ module RSpec::Puppet Puppet[:manifest] = self.respond_to?(:manifest) ? manifest : RSpec.configuration.manifest Puppet[:templatedir] = self.respond_to?(:template_dir) ? template_dir : RSpec.configuration.template_dir Puppet[:config] = self.respond_to?(:config) ? config : RSpec.configuration.config - Puppet[:code] = "" + code = "" nodename = self.class.top_level_description.downcase @@ -24,7 +24,7 @@ module RSpec::Puppet } facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts) - build_catalog(nodename, facts_val) + build_catalog(nodename, facts_val, code) end end end diff --git a/lib/rspec-puppet/support.rb b/lib/rspec-puppet/support.rb index b6287ff..917a917 100644 --- a/lib/rspec-puppet/support.rb +++ b/lib/rspec-puppet/support.rb @@ -4,7 +4,9 @@ module RSpec::Puppet @@cache = {} protected - def build_catalog_without_cache nodename, facts_val + def build_catalog_without_cache(nodename, facts_val, code) + Puppet[:code] = code + node_obj = Puppet::Node.new(nodename) node_obj.merge(facts_val)