#!/usr/bin/env ruby

$:.unshift("../../../lib") if __FILE__ =~ /\.rb$/

require 'puppettest'
require 'puppettest/fileparsing'
require 'puppet/type/sshkey'

class TestParsedSSHKey < Test::Unit::TestCase
	include PuppetTest
	include PuppetTest::FileParsing

    def setup
        super
        @provider = Puppet.type(:sshkey).provider(:parsed)

        @oldfiletype = @provider.filetype
    end

    def teardown
        Puppet::Util::FileType.filetype(:ram).clear
        @provider.filetype = @oldfiletype
        @provider.clear
        super
    end
    
    def mkkey(name = "host.domain.com")
        if defined? @pcount
            @pcount += 1
        else
            @pcount = 1
        end
        args = {
            :name => name || "/fspuppet%s" % @pcount,
            :key => "thisismykey%s" % @pcount,
            :alias => ["host1.domain.com","192.168.0.1"],
            :type => "dss",
            :ensure => :present
        }

        fakemodel = fakemodel(:sshkey, args[:name])

        key = @provider.new(fakemodel)
        args.each do |p,v|
            key.send(p.to_s + "=", v)
        end

        return key
    end

    def test_keysparse
        fakedata("data/types/sshkey").each { |file|
            fakedataparse(file)
        }
    end
    
    def test_simplekey
        @provider.filetype = :ram
        file = @provider.default_target
        
        key = nil
        assert_nothing_raised do
            key = mkkey
        end
        
        assert(key, "did not create key")
        
        assert_nothing_raised do
            key.flush
        end
        
        assert(key.alias, "No alias set for key")
        
        hash = key.property_hash.dup
        text = @provider.target_object(file).read
        names = [key.name, key.alias].flatten.join(",")
        
        assert_equal("#{names} #{key.type} #{key.key}\n", text)
        
        assert_nothing_raised do
            @provider.prefetch
        end
        
        hash.each do |p, v|
            next unless key.respond_to?(p)
            assert_equal(v, key.send(p), "%s did not match" % p)
        end
        
        assert(key.name !~ /,/, "Aliases were not split out during parsing")
    end

    def test_hooks
        result = nil
        assert_nothing_raised("Could not call post hook") do
            result = @provider.parse_line("one,two type key")
        end
        assert_equal("one", result[:name], "Did not call post hook")
        assert_equal(%w{two}, result[:alias], "Did not call post hook")

        assert_equal("one,two type key",
            @provider.to_line(:record_type => :parsed,
            :name => "one",
            :alias => %w{two},
            :type => "type",
            :key => "key"),
            "Did not use pre-hook when generating line"
        )
    end
end

# $Id: parsed.rb 2281 2007-03-14 17:49:19Z luke $


syntax highlighted by Code2HTML, v. 0.9.1