def test_message(level, message)
    Facter.on_message do |lvl, msg|
        raise 'nope' unless level == lvl
        raise 'nope' unless message = msg
    end

    begin
        Facter.debug message if level == :debug
        Facter.warn message if level == :warn
    rescue Exception => ex
        Facter.on_message
    end
end

test_message(:debug, "debug message")
test_message(:warn, "warning message")