diff options
| author | lutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-04-07 00:06:03 +0000 |
|---|---|---|
| committer | lutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-04-07 00:06:03 +0000 |
| commit | ae4b12e2cd337007f32c6bdb51924969a1bddc48 (patch) | |
| tree | 7d678c8552457de9b53012a56891301c5605717c /test | |
| parent | 8df6e846490e014f0af5b7182077f3c85830b100 (diff) | |
| download | puppet-ae4b12e2cd337007f32c6bdb51924969a1bddc48.tar.gz puppet-ae4b12e2cd337007f32c6bdb51924969a1bddc48.tar.xz puppet-ae4b12e2cd337007f32c6bdb51924969a1bddc48.zip | |
Revamp the yumrepo type to deal with repositories defined anywhere in yum's
config files. Adds a generic module Puppet::IniConfig for parsing ini-style
files
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1096 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'test')
| -rw-r--r-- | test/other/inifile.rb | 114 | ||||
| -rw-r--r-- | test/types/yumrepo.rb | 73 |
2 files changed, 167 insertions, 20 deletions
diff --git a/test/other/inifile.rb b/test/other/inifile.rb new file mode 100644 index 000000000..eb2fde83d --- /dev/null +++ b/test/other/inifile.rb @@ -0,0 +1,114 @@ +if __FILE__ == $0 + $:.unshift '..' + $:.unshift '../../lib' + $puppetbase = "../.." +end + +require 'puppet' +require 'puppet/inifile' +require 'puppettest' +require 'test/unit' + +class TestFileType < Test::Unit::TestCase + include TestPuppet + + 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=value2") + assert_nothing_raised { + @file.read(fname) + } + s = get_section('main') + assert_entries(s, { 'key1' => 'value1', 'key2' => 'value2' }) + @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 diff --git a/test/types/yumrepo.rb b/test/types/yumrepo.rb index fc39888cb..89bdf9590 100644 --- a/test/types/yumrepo.rb +++ b/test/types/yumrepo.rb @@ -7,48 +7,81 @@ if __FILE__ == $0 end require 'puppettest' -require 'puppet/type/yumrepo' require 'puppet' require 'test/unit' +require 'fileutils' class TestYumRepo < Test::Unit::TestCase include TestPuppet - def test_parse - fakedata("data/types/yumrepos").each { |file| - next unless file =~ /\.repo$/ - repo = make_repo(file) - Puppet.info "Parsing %s" % file - assert_nothing_raised { - repo.retrieve - } - # Lame tests that we actually parsed something in - assert ! repo[:descr].empty? - assert ! repo[:repoid].empty? - } + def setup + super + @yumdir = tempfile() + Dir.mkdir(@yumdir) + @yumconf = File.join(@yumdir, "yum.conf") + File.open(@yumconf, "w") do |f| + f.print "[main]\nreposdir=#{@yumdir} /no/such/dir\n" + end + Puppet.type(:yumrepo).yumconf = @yumconf + end + + # Modify one existing section + def test_modify + copy_datafiles + devel = make_repo("development", { :descr => "New description" }) + devel.retrieve + assert_equal("development", devel[:name]) + assert_equal('Fedora Core $releasever - Development Tree', + devel.state(:descr).is) + assert_equal('New description', + devel.state(:descr).should) + assert_apply(devel) + inifile = Puppet.type(:yumrepo).read() + assert_equal('New description', inifile['development']['name']) + assert_equal('Fedora Core $releasever - $basearch - Base', + inifile['base']['name']) + assert_equal(['base', 'development', 'main'], + all_sections(inifile)) end + # Create a new section def test_create - file = "#{tempfile()}.repo" values = { - :repoid => "base", :descr => "Fedora Core $releasever - $basearch - Base", :baseurl => "http://example.com/yum/$releasever/$basearch/os/", :enabled => "1", :gpgcheck => "1", + :includepkgs => "absent", :gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora" } - repo = make_repo(file, values) + repo = make_repo("base", values) assert_apply(repo) - text = Puppet::FileType.filetype(:flat).new(repo.path).read + inifile = Puppet.type(:yumrepo).read() + sections = all_sections(inifile) + assert_equal(['base', 'main'], sections) + text = inifile["base"].format assert_equal(CREATE_EXP, text) end - def make_repo(file, hash={}) - hash[:repodir] = File::dirname(file) - hash[:name] = File::basename(file, ".repo") + def make_repo(name, hash={}) + hash[:name] = name Puppet.type(:yumrepo).create(hash) end + + def all_sections(inifile) + sections = [] + inifile.each_section { |section| sections << section.name } + return sections.sort + end + + def copy_datafiles + fakedata("data/types/yumrepos").select { |file| + file =~ /\.repo$/ + }.each { |src| + dst = File::join(@yumdir, File::basename(src)) + FileUtils::copy(src, dst) + } + end CREATE_EXP = <<'EOF' [base] |
