From e82370a26d15181b6c3b17b25c2349752e41ed38 Mon Sep 17 00:00:00 2001 From: Dan Bode Date: Tue, 26 Jul 2011 15:27:42 -0700 Subject: (#8628) Add append_line native type This commit adds a native type that can check if a line exists and append it to a file. This use case seems common enough to warrant its inclusion into stdlib. Reviewed-by: Jeff McCune --- spec/unit/puppet/provider/append_line/ruby_spec.rb | 30 ++++++++++++++++++++++ spec/unit/puppet/type/append_line_spec.rb | 24 +++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 spec/unit/puppet/provider/append_line/ruby_spec.rb create mode 100644 spec/unit/puppet/type/append_line_spec.rb (limited to 'spec/unit') diff --git a/spec/unit/puppet/provider/append_line/ruby_spec.rb b/spec/unit/puppet/provider/append_line/ruby_spec.rb new file mode 100644 index 0000000..ea28c31 --- /dev/null +++ b/spec/unit/puppet/provider/append_line/ruby_spec.rb @@ -0,0 +1,30 @@ +require 'puppet' +require 'tempfile' +provider_class = Puppet::Type.type(:append_line).provider(:ruby) +describe provider_class do + before :each do + tmp = Tempfile.new('tmp') + @tmpfile = tmp.path + tmp.close! + @resource = Puppet::Type::Append_line.new( + {:name => 'foo', :path => @tmpfile, :line => 'foo'} + ) + @provider = provider_class.new(@resource) + end + it 'should detect if the line exists in the file' do + File.open(@tmpfile, 'w') do |fh| + fh.write('foo') + end + @provider.exists?.should be_true + end + it 'should detect if the line does not exist in the file' do + File.open(@tmpfile, 'w') do |fh| + fh.write('foo1') + end + @provider.exists?.should be_nil + end + it 'should append to an existing file when creating' do + @provider.create + File.read(@tmpfile).chomp.should == 'foo' + end +end diff --git a/spec/unit/puppet/type/append_line_spec.rb b/spec/unit/puppet/type/append_line_spec.rb new file mode 100644 index 0000000..d0564c3 --- /dev/null +++ b/spec/unit/puppet/type/append_line_spec.rb @@ -0,0 +1,24 @@ +require 'puppet' +require 'tempfile' +describe Puppet::Type.type(:append_line) do + before :each do + @append_line = Puppet::Type.type(:append_line).new(:name => 'foo', :line => 'line', :path => '/tmp/path') + end + it 'should accept a line and path' do + @append_line[:line] = 'my_line' + @append_line[:line].should == 'my_line' + end + it 'should accept posix filenames' do + @append_line[:path] = '/tmp/path' + @append_line[:path].should == '/tmp/path' + end + it 'should not accept unqualified path' do + expect { @append_line[:path] = 'file' }.should raise_error(Puppet::Error, /File paths must be fully qualified/) + end + it 'should require that a line is specified' do + expect { Puppet::Type.type(:append_line).new(:name => 'foo', :path => '/tmp/file') }.should raise_error(Puppet::Error, /Both line and path are required attributes/) + end + it 'should require that a file is specified' do + expect { Puppet::Type.type(:append_line).new(:name => 'foo', :line => 'path') }.should raise_error(Puppet::Error, /Both line and path are required attributes/) + end +end -- cgit v1.2.3