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
|
#!/usr/bin/env ruby
$:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
require 'puppet'
require 'puppet/inifile'
require 'puppettest'
class TestFileType < Test::Unit::TestCase
include PuppetTest
def setup
super
@file = Puppet::IniConfig::File.new
end
def teardown
@file = nil
super
end
def test_simple
fname = mkfile("[main]\nkey1=value1\n# Comment\nkey2=value=2")
assert_nothing_raised {
@file.read(fname)
}
s = get_section('main')
assert_entries(s, { 'key1' => 'value1', 'key2' => 'value=2' })
@file['main']['key2'] = 'newvalue2'
@file['main']['key3'] = 'newvalue3'
text = s.format
assert_equal("[main]\nkey1=value1\n# Comment\nkey2=newvalue2\nkey3=newvalue3\n",
s.format)
end
def test_multi
fmain = mkfile("[main]\nkey1=main.value1\n# Comment\nkey2=main.value2")
fsub = mkfile("[sub1]\nkey1=sub1 value1\n\n" +
"[sub2]\nkey1=sub2.value1")
main_mtime = File::stat(fmain).mtime
assert_nothing_raised {
@file.read(fmain)
@file.read(fsub)
}
main = get_section('main')
assert_entries(main,
{ 'key1' => 'main.value1', 'key2' => 'main.value2' })
sub1 = get_section('sub1')
assert_entries(sub1, { 'key1' => 'sub1 value1' })
sub2 = get_section('sub2')
assert_entries(sub2, { 'key1' => 'sub2.value1' })
[main, sub1, sub2].each { |s| assert( !s.dirty? ) }
sub1['key1'] = 'sub1 newvalue1'
sub2['key2'] = 'sub2 newvalue2'
assert(! main.dirty?)
[sub1, sub2].each { |s| assert( s.dirty? ) }
@file.store
[main, sub1, sub2].each { |s| assert( !s.dirty? ) }
assert( File.exists?(fmain) )
assert( File.exists?(fsub) )
assert_equal(main_mtime, File::stat(fmain).mtime)
subtext = File.read(fsub)
assert_equal("[sub1]\nkey1=sub1 newvalue1\n\n" +
"[sub2]\nkey1=sub2.value1\nkey2=sub2 newvalue2\n",
subtext)
end
def test_format_nil
fname = mkfile("[main]\nkey1=value1\n# Comment\nkey2=value2\n" +
"# Comment2\n")
assert_nothing_raised {
@file.read(fname)
}
s = get_section('main')
s['key2'] = nil
s['key3'] = nil
text = s.format
assert_equal("[main]\nkey1=value1\n# Comment\n# Comment2\n",
s.format)
end
def test_whitespace
fname = mkfile("[main]\n key1=v1\nkey2 =v2\n")
assert_nothing_raised {
@file.read(fname)
}
s = get_section('main')
assert_equal('v1', s['key1'])
assert_equal('v2', s['key2'])
end
def assert_entries(section, hash)
hash.each do |k, v|
assert_equal(v, section[k],
"Expected <#{v}> for #{section.name}[#{k}] " +
"but got <#{section[k]}>")
end
end
def get_section(name)
result = @file[name]
assert_not_nil(result)
return result
end
def mkfile(content)
file = tempfile()
File.open(file, "w") { |f| f.print(content) }
return file
end
end
|