1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
|
#!/usr/bin/env ruby
$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
require 'puppet'
require 'puppet/server'
require 'puppet/client'
require 'puppettest'
class TestMaster < Test::Unit::TestCase
include PuppetTest::ServerTest
def teardown
super
#print "\n\n\n\n" if Puppet[:debug]
end
# run through all of the existing test files and make sure everything
# works
def test_files
count = 0
textfiles { |file|
Puppet.debug("parsing %s" % file)
client = nil
master = nil
# create our master
assert_nothing_raised() {
# this is the default server setup
master = Puppet::Server::Master.new(
:Manifest => file,
:UseNodes => false,
:Local => true
)
}
# and our client
assert_nothing_raised() {
client = Puppet::Client::MasterClient.new(
:Master => master
)
}
# pull our configuration a few times
assert_nothing_raised() {
client.getconfig
stopservices
Puppet::Type.allclear
}
assert_nothing_raised() {
client.getconfig
stopservices
Puppet::Type.allclear
}
assert_nothing_raised() {
client.getconfig
stopservices
Puppet::Type.allclear
}
# only test three files; that's plenty
if count > 3
break
end
count += 1
}
end
def test_defaultmanifest
textfiles { |file|
Puppet[:manifest] = file
client = nil
master = nil
assert_nothing_raised() {
# this is the default server setup
master = Puppet::Server::Master.new(
:Manifest => file,
:UseNodes => false,
:Local => true
)
}
assert_nothing_raised() {
client = Puppet::Client::MasterClient.new(
:Master => master
)
}
# pull our configuration
assert_nothing_raised() {
client.getconfig
stopservices
Puppet::Type.allclear
}
break
}
end
def test_filereread
# Start with a normal setting
Puppet[:filetimeout] = 15
manifest = mktestmanifest()
file2 = @createdfile + "2"
@@tmpfiles << file2
client = master = nil
assert_nothing_raised() {
# this is the default server setup
master = Puppet::Server::Master.new(
:Manifest => manifest,
:UseNodes => false,
:Local => true
)
}
assert_nothing_raised() {
client = Puppet::Client::MasterClient.new(
:Master => master
)
}
# The client doesn't have a config, so it can't be up to date
assert(! client.fresh?, "Client is incorrectly up to date")
Puppet.config.use(:puppet)
assert_nothing_raised {
client.getconfig
client.apply
}
# Now it should be up to date
assert(client.fresh?, "Client is not up to date")
# Cache this value for later
parse1 = master.freshness
# Verify the config got applied
assert(FileTest.exists?(@createdfile),
"Created file %s does not exist" % @createdfile)
Puppet::Type.allclear
sleep 1.5
# Create a new manifest
File.open(manifest, "w") { |f|
f.puts "file { \"%s\": ensure => file }\n" % file2
}
# Verify that the master doesn't immediately reparse the file; we
# want to wait through the timeout
assert_equal(parse1, master.freshness, "Master did not wait through timeout")
assert(client.fresh?, "Client is not up to date")
# Then eliminate it
Puppet[:filetimeout] = 0
# Now make sure the master does reparse
#Puppet.notice "%s vs %s" % [parse1, master.freshness]
assert(parse1 != master.freshness, "Master did not reparse file")
assert(! client.fresh?, "Client is incorrectly up to date")
# Retrieve and apply the new config
assert_nothing_raised {
client.getconfig
client.apply
}
assert(client.fresh?, "Client is not up to date")
assert(FileTest.exists?(file2), "Second file %s does not exist" % file2)
end
def test_addfacts
master = nil
file = mktestmanifest()
# create our master
assert_nothing_raised() {
# this is the default server setup
master = Puppet::Server::Master.new(
:Manifest => file,
:UseNodes => false,
:Local => true
)
}
facts = {}
assert_nothing_raised {
master.addfacts(facts)
}
%w{serverversion servername serverip}.each do |fact|
assert(facts.include?(fact), "Fact %s was not set" % fact)
end
end
# Make sure we're using the hostname as configured with :node_name
def test_hostname_in_getconfig
master = nil
file = tempfile()
#@createdfile = File.join(tmpdir(), self.class.to_s + "manifesttesting" +
# "_" + @method_name)
file_cert = tempfile()
file_fact = tempfile()
certname = "y4yn3ss"
factname = Facter.value("hostname")
File.open(file, "w") { |f|
f.puts %{
node #{certname} { file { "#{file_cert}": ensure => file, mode => 755 } }
node #{factname} { file { "#{file_fact}": ensure => file, mode => 755 } }
}
}
# create our master
assert_nothing_raised() {
# this is the default server setup
master = Puppet::Server::Master.new(
:Manifest => file,
:UseNodes => true,
:Local => true
)
}
result = nil
# Use the hostname from facter
Puppet[:node_name] = 'facter'
assert_nothing_raised {
result = master.getconfig({"hostname" => factname}, "yaml", certname, "127.0.0.1")
}
result = result.flatten
assert(result.find { |obj| obj.name == file_fact },
"Could not find correct file")
assert(!result.find { |obj| obj.name == file_cert },
"Found incorrect file")
# Use the hostname from the cert
Puppet[:node_name] = 'cert'
assert_nothing_raised {
result = master.getconfig({"hostname" => factname}, "yaml", certname, "127.0.0.1")
}
result = result.flatten
assert(!result.find { |obj| obj.name == file_fact },
"Could not find correct file")
assert(result.find { |obj| obj.name == file_cert },
"Found incorrect file")
end
# Make sure we're correctly doing clientname manipulations.
# Testing to make sure we always get a hostname and IP address.
def test_clientname
master = nil
file = tempfile()
File.open(file, "w") { |f|
f.puts %{
node yay { file { "/something": ensure => file, mode => 755 } }
}
}
# create our master
assert_nothing_raised() {
# this is the default server setup
master = Puppet::Server::Master.new(
:Manifest => file,
:UseNodes => true,
:Local => true
)
}
Puppet[:node_name] = "cert"
# First act like we're local
fakename = nil
fakeip = nil
name = ip = nil
facts = Facter.to_hash
assert_nothing_raised do
name, ip = master.clientname(fakename, fakeip, facts)
end
assert(facts["hostname"], "Removed hostname fact")
assert(facts["ipaddress"], "Removed ipaddress fact")
assert_equal(facts["hostname"], name)
assert_equal(facts["ipaddress"], ip)
# Now set them to something real, and make sure we get them back
fakename = "yayness"
fakeip = "192.168.0.1"
facts = Facter.to_hash
assert_nothing_raised do
name, ip = master.clientname(fakename, fakeip, facts)
end
assert(facts["hostname"], "Removed hostname fact")
assert(facts["ipaddress"], "Removed ipaddress fact")
assert_equal(fakename, name)
assert_equal(fakeip, ip)
end
end
# $Id: master.rb 1793 2006-10-16 22:01:40Z luke $
|