diff --git a/benchmarks/virtual_collection/benchmarker.rb b/benchmarks/virtual_collection/benchmarker.rb new file mode 100644 index 000000000..8dabbfe49 --- /dev/null +++ b/benchmarks/virtual_collection/benchmarker.rb @@ -0,0 +1,48 @@ +require 'erb' +require 'ostruct' +require 'fileutils' +require 'json' + +class Benchmarker + include FileUtils + + def initialize(target, size) + @target = target + @size = 200 + end + + def setup + require 'puppet' + config = File.join(@target, 'puppet.conf') + Puppet.initialize_settings(['--config', config]) + end + + def run(args=nil) + env = Puppet.lookup(:environments).get('benchmarking') + node = Puppet::Node.new("testing", :environment => env) + Puppet::Resource::Catalog.indirection.find("testing", :use_node => node) + end + + def generate + environment = File.join(@target, 'environments', 'benchmarking') + templates = File.join('benchmarks', 'virtual_collection') + + mkdir_p(File.join(environment, 'modules')) + mkdir_p(File.join(environment, 'manifests')) + + render(File.join(templates, 'site.pp.erb'), + File.join(environment, 'manifests', 'site.pp'), + :size => @size) + + render(File.join(templates, 'puppet.conf.erb'), + File.join(@target, 'puppet.conf'), + :location => @target) + end + + def render(erb_file, output_file, bindings) + site = ERB.new(File.read(erb_file)) + File.open(output_file, 'w') do |fh| + fh.write(site.result(OpenStruct.new(bindings).instance_eval { binding })) + end + end +end diff --git a/benchmarks/virtual_collection/description b/benchmarks/virtual_collection/description new file mode 100644 index 000000000..c0522e031 --- /dev/null +++ b/benchmarks/virtual_collection/description @@ -0,0 +1,4 @@ +Benchmark scenario: heavy use of virual collection with future parser +Benchmark target: catalog compilation +Parser: Future + diff --git a/benchmarks/virtual_collection/puppet.conf.erb b/benchmarks/virtual_collection/puppet.conf.erb new file mode 100644 index 000000000..618ea6e2f --- /dev/null +++ b/benchmarks/virtual_collection/puppet.conf.erb @@ -0,0 +1,4 @@ +confdir = <%= location %> +vardir = <%= location %> +environmentpath = <%= File.join(location, 'environments') %> +parser = future diff --git a/benchmarks/virtual_collection/site.pp.erb b/benchmarks/virtual_collection/site.pp.erb new file mode 100644 index 000000000..cac5025ed --- /dev/null +++ b/benchmarks/virtual_collection/site.pp.erb @@ -0,0 +1,7 @@ +<% size.times do |i| %> + @notify { "name<%= i %>":} +<% end %> + +<% size.times do |i| %> + Notify <| title == "name<%= i %>" |> +<% end %>