#!/usr/bin/env ruby
#
# Created by Luke A. Kanies on 2006-12-21.
# Copyright (c) 2006. All rights reserved.
$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
require 'puppettest'
class TestPropertyChange < Test::Unit::TestCase
include PuppetTest
class FakeProperty < Puppet::Type::Property
attr_accessor :is, :should, :parent
attr_reader :noop
def change_to_s
"fake change"
end
def insync?
@is == @should
end
def log(msg)
Puppet::Util::Log.create(
:level => :info,
:source => self,
:message => msg
)
end
def noop
if defined? @noop
@noop
else
false
end
end
def path
"fakechange"
end
def should_to_s
@should.to_s
end
def sync
if insync?
return nil
else
@is = @should
return :fake_change
end
end
def to_s
path
end
end
def mkchange
property = FakeProperty.new :parent => "fakeparent"
property.is = :start
property.should = :finish
property.parent = :parent
change = nil
assert_nothing_raised do
change = Puppet::PropertyChange.new(property)
end
change.transaction = :trans
assert_equal(:start, change.is, "@is did not get copied")
assert_equal(:finish, change.should, "@should did not get copied")
assert_equal(%w{fakechange change}, change.path, "path did not get set correctly")
assert(! change.changed?, "change defaulted to already changed")
return change
end
def test_go
change = mkchange
coll = logcollector()
events = nil
# First make sure we get an immediate return
assert_nothing_raised do
events = change.go
end
assert_instance_of(Array, events, "events were not returned in an array")
assert_instance_of(Puppet::Event, events[0], "event array did not contain events")
event = events.shift
{:event => :fake_change, :transaction => :trans, :source => :parent}.each do |method, val|
assert_equal(val, event.send(method), "Event did not set %s correctly" % method)
end
# Disabled, because it fails when running the whole suite at once.
#assert(coll.detect { |l| l.message == "fake change" }, "Did not log change")
assert_equal(change.property.is, change.property.should, "did not call sync method")
# Now make sure that proxy sources can be set.
assert_nothing_raised do
change.proxy = :other
end
# Reset, so we change again
change.property.is = :start
change.is = :start
assert_nothing_raised do
events = change.go
end
assert_instance_of(Array, events, "events were not returned in an array")
assert_instance_of(Puppet::Event, events[0], "event array did not contain events")
event = events.shift
{:event => :fake_change, :transaction => :trans, :source => :other}.each do |method, val|
assert_equal(val, event.send(method), "Event did not set %s correctly" % method)
end
#assert(coll.detect { |l| l.message == "fake change" }, "Did not log change")
assert_equal(change.property.is, change.property.should, "did not call sync method")
end
# Related to #542. Make sure changes in noop mode produce the :noop event.
def test_noop_event
change = mkchange
assert(! change.skip?, "Change is already being skipped")
Puppet[:noop] = true
change.property.noop = true
p change.property.noop
assert(change.noop, "did not set noop")
assert(change.skip?, "setting noop did not mark change for skipping")
event = nil
assert_nothing_raised("Could not generate noop event") do
event = change.forward
end
assert_equal(1, event.length, "got wrong number of events")
assert_equal(:noop, event[0].event, "did not generate noop mode when in noop")
end
end
# $Id: propertychange.rb 2286 2007-03-17 23:16:37Z luke $
syntax highlighted by Code2HTML, v. 0.9.1