Sha256: 0e1395cb19ba5a1b1eff35d6c8a96aac63c0d7ae94c2986a5c86ec52c8c3be61

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

require 'rspec'
require 'puppet'

def find_puppet_file(sources)
  Array(sources).each do |source|
    next unless source.start_with?("puppet:///modules")
    elems = source.split("/")
    Puppet[:modulepath].split(":").each do |modulepath|
      filepath = File.join(modulepath, elems[4], "files", *elems[5..-1])
      return filepath if File.exist?(filepath)
    end
  end
  nil
end

RSpec::Matchers.define :puppet_file_contains do |file, expected|
  match do |actual|
    @message = nil
    resource = actual.resource('file', file)
    if not resource then
      @message = "expected 'File[#{file}]' in catalog, not found!"
      next
    end
    source_attr = resource.to_hash[:source]
    if not source_attr then
      @message = "expected source attribute on #{resource}, found: #{resource.to_hash.keys.sort.join(",")}"
      next
    end

    found_file = find_puppet_file(source_attr)
    if found_file.nil? then
      @message = "no files specified in 'source' exist"
      next
    else
      @message = "expected that #{file} (source=#{found_file}) matches #{expected}"
      expected.match(IO.read(found_file)) != nil
    end
  end

  failure_message_for_should do |actual|
    @message
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
jimdo-rspec-puppet-helpers-0.0.5 lib/jimdo-rspec-puppet-helpers.rb