summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorlutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-07 00:06:03 +0000
committerlutter <lutter@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-07 00:06:03 +0000
commitae4b12e2cd337007f32c6bdb51924969a1bddc48 (patch)
tree7d678c8552457de9b53012a56891301c5605717c /test
parent8df6e846490e014f0af5b7182077f3c85830b100 (diff)
downloadpuppet-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.rb114
-rw-r--r--test/types/yumrepo.rb73
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]