aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'overlord/tests')
-rw-r--r--overlord/tests/dtest.py90
-rw-r--r--overlord/tests/external.py136
-rw-r--r--overlord/tests/pylintrc19
-rw-r--r--overlord/tests/testfiles/global-overlays.xml30
-rw-r--r--overlord/tests/testfiles/layman-test.tar.bz2bin0 -> 845 bytes
-rw-r--r--overlord/tests/testfiles/make.conf345
-rw-r--r--overlord/tests/testfiles/overlays_bug_184449.xml19
-rw-r--r--overlord/tests/testfiles/overlays_bug_286290.xml13
-rw-r--r--overlord/tests/testfiles/subpath-1.xml19
-rw-r--r--overlord/tests/testfiles/subpath-2.xml22
10 files changed, 693 insertions, 0 deletions
diff --git a/overlord/tests/dtest.py b/overlord/tests/dtest.py
new file mode 100644
index 0000000..d380b7f
--- /dev/null
+++ b/overlord/tests/dtest.py
@@ -0,0 +1,90 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+#################################################################################
+# overlord DOCTEST AGGREGATOR
+#################################################################################
+# File: dtest.py
+#
+# Combines the doctests that are available for the different modules
+#
+# Copyright:
+# (c) 2005 - 2008 Gunnar Wrobel
+# Distributed under the terms of the GNU General Public License v2
+#
+# Author(s):
+# Gunnar Wrobel <wrobel@gentoo.org>
+#
+'''Aggregates doctests from all modules that provide such tests.'''
+
+__version__ = '$Id: dtest.py 237 2006-09-05 21:18:54Z wrobel $'
+
+#===============================================================================
+#
+# Dependencies
+#
+#-------------------------------------------------------------------------------
+
+import unittest, doctest
+
+# On module creation:
+
+# 1.) Check header section (copyright notice)
+# 2.) Add module doc string
+# 3.) Add version string
+# 4.) Add testing handler at bottom of module
+# 5.) Add module into tests/dtest.py. Check that tests run through
+# 6.) Run pylint over the code. Fix any reasonable complaints.
+# 7.) Whitespace clean the buffer.
+# 8.) Add svn:keywords "Id" to file.
+
+# On module change:
+
+# 1.) Check header section (copyright notice)
+# 5.) Check that tests run through
+# 6.) Run pylint over the code. Fix any reasonable complaints.
+# 7.) Whitespace clean the buffer.
+
+# clean modules : CT
+# not yet clean : UT
+# clean but no testing : CN
+# unclean but no testing: UN
+
+import overlord.action #CT
+import overlord.config #CT
+import overlord.db #CT
+import overlord.dbbase #CT
+import overlord.utils #CT
+import overlord.overlays.overlay #CT
+import overlord.overlays.tar #CT
+
+#===============================================================================
+#
+# Test Suite
+#
+#-------------------------------------------------------------------------------
+
+def test_suite():
+ return unittest.TestSuite((
+ doctest.DocTestSuite(overlord.action),
+ doctest.DocTestSuite(overlord.config),
+ doctest.DocTestSuite(overlord.db),
+ doctest.DocTestSuite(overlord.dbbase),
+ doctest.DocTestSuite(overlord.utils),
+ doctest.DocTestSuite(overlord.overlays.overlay),
+ doctest.DocTestSuite(overlord.overlays.tar),
+ ))
+
+#===============================================================================
+#
+# Run Testing
+#
+#-------------------------------------------------------------------------------
+
+if __name__ == '__main__':
+ # Ignore warnings here. We are just testing
+ from warnings import filterwarnings, resetwarnings
+ filterwarnings('ignore')
+
+ unittest.main(defaultTest='test_suite')
+
+ resetwarnings()
diff --git a/overlord/tests/external.py b/overlord/tests/external.py
new file mode 100644
index 0000000..aa43a3f
--- /dev/null
+++ b/overlord/tests/external.py
@@ -0,0 +1,136 @@
+# -*- coding: utf-8 -*-
+#################################################################################
+# EXTENRAL overlord TESTS
+#################################################################################
+# File: external.py
+#
+# Runs external (non-doctest) test cases.
+#
+# Copyright:
+# (c) 2009 Sebastian Pipping
+# Distributed under the terms of the GNU General Public License v2
+#
+# Author(s):
+# Sebastian Pipping <sebastian@pipping.org>
+#
+'''Runs external (non-doctest) test cases.'''
+
+import unittest
+import os
+import tempfile
+import shutil
+import urllib
+from overlord.dbbase import DbBase
+from warnings import filterwarnings, resetwarnings
+
+HERE = os.path.dirname(os.path.realpath(__file__))
+
+
+class Unicode(unittest.TestCase):
+ def _overlays_bug(self, number):
+ config = {}
+ filename = os.path.join(HERE, 'testfiles', 'overlays_bug_%d.xml' % number)
+ o = DbBase([filename], config)
+ for verbose in (True, False):
+ for t in o.list(verbose=verbose):
+ print t[0]
+ print
+
+ def test_184449(self):
+ self._overlays_bug(184449)
+
+ def test_286290(self):
+ self._overlays_bug(286290)
+
+
+class FormatSubpathCategory(unittest.TestCase):
+ def _run(self, number):
+ config = {}
+ filename1 = os.path.join(HERE, 'testfiles',
+ 'subpath-%d.xml' % number)
+
+ # Read, write, re-read, compare
+ os1 = DbBase([filename1], config)
+ filename2 = os.tmpnam()
+ os1.write(filename2)
+ os2 = DbBase([filename2], config)
+ os.unlink(filename2)
+ self.assertTrue(os1 == os2)
+
+ # Pass original overlays
+ return os1
+
+ def test(self):
+ os1 = self._run(1)
+ os2 = self._run(2)
+
+ # Same content from old/overlord-global.txt
+ # and new/repositories.xml format?
+ self.assertTrue(os1 == os2)
+
+
+# http://bugs.gentoo.org/show_bug.cgi?id=304547
+class TarAddRemoveSync(unittest.TestCase):
+ def test(self):
+ repo_name = 'tar-test-overlay'
+ tar_source_path = os.path.join(HERE, 'testfiles', 'overlord-test.tar.bz2')
+
+ # Duplicate test tarball (so we have it deletable for later)
+ (_, temp_tarball_path) = tempfile.mkstemp()
+ shutil.copyfile(tar_source_path, temp_tarball_path)
+
+ # Write overlay collection XML
+ xml_text = """\
+<?xml version="1.0" encoding="UTF-8"?>
+<repositories xmlns="" version="1.0">
+ <repo quality="experimental" status="unofficial">
+ <name>%(repo_name)s</name>
+ <description>XXXXXXXXXXX</description>
+ <owner>
+ <email>foo@exmaple.org</email>
+ </owner>
+ <source type="tar">file://%(temp_tarball_url)s</source>
+ </repo>
+</repositories>
+""" % { 'temp_tarball_url':urllib.pathname2url(temp_tarball_path),
+ 'repo_name':repo_name}
+ (fd, temp_collection_path) = tempfile.mkstemp()
+ f = os.fdopen(fd, 'w')
+ f.write(xml_text)
+ f.close()
+
+ # Make playground directory
+ temp_dir_path = tempfile.mkdtemp()
+
+ # Make DB from it
+ config = {'tar_command':'/bin/tar'}
+ db = DbBase([temp_collection_path], config)
+
+ specific_overlay_path = os.path.join(temp_dir_path, repo_name)
+ o = db.select('tar-test-overlay')
+
+ # Actual testcase
+ o.add(temp_dir_path)
+ self.assertTrue(os.path.exists(specific_overlay_path))
+ # (1/2) Sync with source available
+ o.sync(temp_dir_path)
+ self.assertTrue(os.path.exists(specific_overlay_path))
+ os.unlink(temp_tarball_path)
+ try:
+ # (2/2) Sync with source _not_ available
+ o.sync(temp_dir_path)
+ except:
+ pass
+ self.assertTrue(os.path.exists(specific_overlay_path))
+ o.delete(temp_dir_path)
+ self.assertFalse(os.path.exists(specific_overlay_path))
+
+ # Cleanup
+ os.unlink(temp_collection_path)
+ os.rmdir(temp_dir_path)
+
+
+if __name__ == '__main__':
+ filterwarnings('ignore')
+ unittest.main()
+ resetwarnings()
diff --git a/overlord/tests/pylintrc b/overlord/tests/pylintrc
new file mode 100644
index 0000000..b05498a
--- /dev/null
+++ b/overlord/tests/pylintrc
@@ -0,0 +1,19 @@
+[MESSAGES CONTROL]
+
+# Disable all messages in the listed categories (IRCWEF).
+disable-msg-cat=IRC
+
+# Disable the message(s) with the given id(s).
+# :W0613: *Unused argument %r*
+# :W0702: *No exception type(s) specified*
+# :W0703: *Catch "Exception"*
+disable-msg=W0613,W0702,W0703
+
+
+[REPORTS]
+
+# Include message's id in output
+include-ids=yes
+
+# Tells whether to display a full report or only the messages
+reports=no
diff --git a/overlord/tests/testfiles/global-overlays.xml b/overlord/tests/testfiles/global-overlays.xml
new file mode 100644
index 0000000..d770692
--- /dev/null
+++ b/overlord/tests/testfiles/global-overlays.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" ?>
+<layman>
+
+ <overlay
+ type = "svn"
+ src = "https://overlays.gentoo.org/svn/dev/wrobel"
+ contact = "nobody@gentoo.org"
+ name = "wrobel"
+ status = "official"
+ priority = "10">
+
+ <description>
+ Test
+ </description>
+
+ </overlay>
+
+ <overlay
+ type = "rsync"
+ src = "rsync://gunnarwrobel.de/wrobel-stable"
+ contact = "nobody@gentoo.org"
+ name = "wrobel-stable">
+
+ <description>
+ A collection of ebuilds from Gunnar Wrobel [wrobel@gentoo.org].
+ </description>
+
+ </overlay>
+
+</layman>
diff --git a/overlord/tests/testfiles/layman-test.tar.bz2 b/overlord/tests/testfiles/layman-test.tar.bz2
new file mode 100644
index 0000000..85ee7fd
--- /dev/null
+++ b/overlord/tests/testfiles/layman-test.tar.bz2
Binary files differ
diff --git a/overlord/tests/testfiles/make.conf b/overlord/tests/testfiles/make.conf
new file mode 100644
index 0000000..9a8aac6
--- /dev/null
+++ b/overlord/tests/testfiles/make.conf
@@ -0,0 +1,345 @@
+# Copyright 1999-2004 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-src/portage/cnf/make.conf.x86,v 1.5.2.5 2005/04/13 15:28:38 jstubbs Exp $
+# Contains local system settings for Portage system
+
+# Please review 'man make.conf' for more information.
+
+# Build-time functionality
+# ========================
+#
+# The USE variable is used to enable optional build-time functionality. For
+# example, quite a few packages have optional X, gtk or GNOME functionality
+# that can only be enabled or disabled at compile-time. Gentoo Linux has a
+# very extensive set of USE variables described in our USE variable HOWTO at
+# http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=1
+#
+# The available list of use flags with descriptions is in your portage tree.
+# Use 'less' to view them: --> less /usr/portage/profiles/use.desc <--
+#
+# 'ufed' is an ncurses/dialog interface available in portage to make handling
+# useflags for you. 'emerge app-portage/ufed'
+#
+# Example:
+
+# Use flags will be handled by polymeraZe
+USE="-*"
+
+# Host Setting
+# ============
+#
+# DO NOT CHANGE THIS SETTING UNLESS YOU ARE USING STAGE1!
+# Change this line as appropriate (i686, i586, i486 or i386).
+# All modern systems (even Athlons) should use "i686-pc-linux-gnu".
+# All K6's are i586.
+CHOST="i686-pc-linux-gnu"
+
+# Host and optimization settings
+# ==============================
+#
+# For optimal performance, enable a CFLAGS setting appropriate for your CPU.
+#
+# Please note that if you experience strange issues with a package, it may be
+# due to gcc's optimizations interacting in a strange way. Please test the
+# package (and in some cases the libraries it uses) at default optimizations
+# before reporting errors to developers.
+#
+# -mcpu=<cpu-type> means optimize code for the particular type of CPU without
+# breaking compatibility with other CPUs.
+#
+# -march=<cpu-type> means to take full advantage of the ABI and instructions
+# for the particular CPU; this will break compatibility with older CPUs (for
+# example, -march=athlon-xp code will not run on a regular Athlon, and
+# -march=i686 code will not run on a Pentium Classic.
+#
+# CPU types supported in gcc-3.2 and higher: athlon-xp, athlon-mp,
+# athlon-tbird, athlon, k6, k6-2, k6-3, i386, i486, i586 (Pentium), i686
+# (PentiumPro), pentium, pentium-mmx, pentiumpro, pentium2 (Celeron),
+# pentium3, and pentium4.
+#
+# Note that Gentoo Linux 1.4 and higher include at least gcc-3.2.
+#
+# CPU types supported in gcc-2.95*: k6, i386, i486, i586 (Pentium), i686
+# (Pentium Pro), pentium, pentiumpro Gentoo Linux 1.2 and below use gcc-2.95*
+#
+# CRITICAL WARNINGS: ****************************************************** #
+# K6 markings are deceptive. Avoid setting -march for them. See Bug #24379. #
+# Pentium-M CPU's should not enable sse2 until at least gcc-3.4. Bug 50616. #
+# ************************************************************************* #
+#
+# Decent examples:
+#
+#CFLAGS="-mcpu=athlon-xp -O3 -pipe"
+
+CFLAGS="-march=athlon-xp -O3 -pipe"
+
+
+# If you set a CFLAGS above, then this line will set your default C++ flags to
+# the same settings.
+CXXFLAGS="${CFLAGS}"
+
+# Advanced Masking
+# ================
+#
+# Gentoo is using a new masking system to allow for easier stability testing
+# on packages. KEYWORDS are used in ebuilds to mask and unmask packages based
+# on the platform they are set for. A special form has been added that
+# indicates packages and revisions that are expected to work, but have not yet
+# been approved for the stable set. '~arch' is a superset of 'arch' which
+# includes the unstable, in testing, packages. Users of the 'x86' architecture
+# would add '~x86' to ACCEPT_KEYWORDS to enable unstable/testing packages.
+# '~ppc', '~sparc' are the unstable KEYWORDS for their respective platforms.
+#
+# Please note that this is not for development, alpha, beta, nor cvs release
+# packages. "Broken" packages will not be added to testing and should not be
+# requested to be added. Alternative routes are available to developers
+# for experimental packages, and it is at their discretion to use them.
+#
+# DO NOT PUT ANYTHING BUT YOUR SPECIFIC ~ARCHITECTURE IN THE LIST.
+# IF YOU ARE UNSURE OF YOUR ARCH, OR THE IMPLICATIONS, DO NOT MODIFY THIS.
+#
+
+ACCEPT_KEYWORDS="x86"
+
+
+# Portage Directories
+# ===================
+#
+# Each of these settings controls an aspect of portage's storage and file
+# system usage. If you change any of these, be sure it is available when
+# you try to use portage. *** DO NOT INCLUDE A TRAILING "/" ***
+#
+# PORTAGE_TMPDIR is the location portage will use for compilations and
+# temporary storage of data. This can get VERY large depending upon
+# the application being installed.
+PORTAGE_TMPDIR=/var/tmp
+#
+# PORTDIR is the location of the portage tree. This is the repository
+# for all profile information as well as all ebuilds. If you change
+# this, you must update your /etc/make.profile symlink accordingly.
+PORTDIR=/usr/portage
+#
+# DISTDIR is where all of the source code tarballs will be placed for
+# emerges. The source code is maintained here unless you delete
+# it. The entire repository of tarballs for gentoo is 9G. This is
+# considerably more than any user will ever download. 2-3G is
+# a large DISTDIR.
+DISTDIR=/usr/distfiles
+#
+# PKGDIR is the location of binary packages that you can have created
+# with '--buildpkg' or '-b' while emerging a package. This can get
+# upto several hundred megs, or even a few gigs.
+#PKGDIR=${PORTDIR}/packages
+#
+# PORT_LOGDIR is the location where portage will store all the logs it
+# creates from each individual merge. They are stored as NNNN-$PF.log
+# in the directory specified. This is disabled until you enable it by
+# providing a directory. Permissions will be modified as needed IF the
+# directory exists, otherwise logging will be disabled. NNNN is the
+# increment at the time the log is created. Logs are thus sequential.
+PORT_LOGDIR=/var/log/services/portage.d
+#
+# PORTDIR_OVERLAY is a directory where local ebuilds may be stored without
+# concern that they will be deleted by rsync updates. Default is not
+# defined.
+PORTDIR_OVERLAY="
+/var/lib/layman/wrobel-stable
+$PORTDIR_OVERLAY
+/usr/local/portage/ebuilds/testing
+/usr/local/portage/ebuilds/stable
+/usr/local/portage/kolab2
+/usr/local/portage/gentoo-webapps-overlay/experimental
+/usr/local/portage/gentoo-webapps-overlay/production-ready"
+
+# Fetching files
+# ==============
+#
+# If you need to set a proxy for wget or lukemftp, add the appropriate "export
+# ftp_proxy=<proxy>" and "export http_proxy=<proxy>" lines to /etc/profile if
+# all users on your system should use them.
+#
+# Portage uses wget by default. Here are some settings for some alternate
+# downloaders -- note that you need to merge these programs first before they
+# will be available.
+#
+# Default fetch command (5 tries, passive ftp for firewall compatibility)
+#FETCHCOMMAND="/usr/bin/wget -t 5 --passive-ftp \${URI} -P \${DISTDIR}"
+#RESUMECOMMAND="/usr/bin/wget -c -t 5 --passive-ftp \${URI} -P \${DISTDIR}"
+#
+# Using wget, ratelimiting downloads
+#FETCHCOMMAND="/usr/bin/wget -t 5 --passive-ftp --limit-rate=200k \${URI} -P \${DISTDIR}"
+#RESUMECOMMAND="/usr/bin/wget -c -t 5 --passive-ftp --limit-rate=200k \${URI} -P \${DISTDIR}"
+#
+# Lukemftp (BSD ftp):
+#FETCHCOMMAND="/usr/bin/lukemftp -s -a -o \${DISTDIR}/\${FILE} \${URI}"
+#RESUMECOMMAND="/usr/bin/lukemftp -s -a -R -o \${DISTDIR}/\${FILE} \${URI}"
+#
+
+FETCHCOMMAND="/usr/bin/getdelta.sh \${URI}"
+
+
+# Portage uses GENTOO_MIRRORS to specify mirrors to use for source retrieval.
+# The list is a space separated list which is read left to right. If you use
+# another mirror we highly recommend leaving the default mirror at the end of
+# the list so that portage will fall back to it if the files cannot be found
+# on your specified mirror. We _HIGHLY_ recommend that you change this setting
+# to a nearby mirror by merging and using the 'mirrorselect' tool.
+
+GENTOO_MIRRORS="http://pandemonium.tiscali.de/pub/gentoo/ ftp://pandemonium.tiscali.de/pub/gentoo/ ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/ http://mir.zyrianes.net/gentoo/ http://ftp.snt.utwente.nl/pub/os/linux/gentoo http://distfiles.gentoo.org http://www.ibiblio.org/pub/Linux/distributions/gentoo"
+
+#
+# Portage uses PORTAGE_BINHOST to specify mirrors for prebuilt-binary packages.
+# The list is a single entry specifying the full address of the directory
+# serving the tbz2's for your system. Running emerge with either '--getbinpkg'
+# or '--getbinpkgonly' will cause portage to retrieve the metadata from all
+# packages in the directory specified, and use that data to determine what will
+# be downloaded and merged. '-g' or '-gK' are the recommend parameters. Please
+# consult the man pages and 'emerge --help' for more information. For FTP, the
+# default connection is passive -- If you require an active connection, affix
+# an asterisk (*) to the end of the host:port string before the path.
+#PORTAGE_BINHOST="http://grp.mirror.site/gentoo/grp/1.4/i686/athlon-xp/"
+# This ftp connection is passive ftp.
+#PORTAGE_BINHOST="ftp://login:pass@grp.mirror.site/pub/grp/i686/athlon-xp/"
+# This ftp connection is active ftp.
+#PORTAGE_BINHOST="ftp://login:pass@grp.mirror.site:21*/pub/grp/i686/athlon-xp/"
+
+# Synchronizing Portage
+# =====================
+#
+# Each of these settings affects how Gentoo synchronizes your Portage tree.
+# Synchronization is handled by rsync and these settings allow some control
+# over how it is done.
+#
+#
+# SYNC is the server used by rsync to retrieve a localized rsync mirror
+# rotation. This allows you to select servers that are geographically
+# close to you, yet still distribute the load over a number of servers.
+# Please do not single out specific rsync mirrors. Doing so places undue
+# stress on particular mirrors. Instead you may use one of the following
+# continent specific rotations:
+#
+# Default: "rsync://rsync.gentoo.org/gentoo-portage"
+# North America: "rsync://rsync.namerica.gentoo.org/gentoo-portage"
+# South America: "rsync://rsync.samerica.gentoo.org/gentoo-portage"
+# Europe: "rsync://rsync.europe.gentoo.org/gentoo-portage"
+# Asia: "rsync://rsync.asia.gentoo.org/gentoo-portage"
+# Australia: "rsync://rsync.au.gentoo.org/gentoo-portage"
+
+SYNC="rsync://rsync.europe.gentoo.org/gentoo-portage"
+
+#
+# RSYNC_RETRIES sets the number of times portage will attempt to retrieve
+# a current portage tree before it exits with an error. This allows
+# for a more successful retrieval without user intervention most times.
+#RSYNC_RETRIES="3"
+#
+# RSYNC_TIMEOUT sets the length of time rsync will wait before it times out
+# on a connection. Most users will benefit from this setting as it will
+# reduce the amount of 'dead air' they experience when they run across
+# the occasional, unreachable mirror. Dialup users might want to set this
+# value up around the 300 second mark.
+#RSYNC_TIMEOUT=180
+
+# Advanced Features
+# =================
+#
+# MAKEOPTS provides extra options that may be passed to 'make' when a
+# program is compiled. Presently the only use is for specifying
+# the number of parallel makes (-j) to perform. The suggested number
+# for parallel makes is CPUs+1.
+MAKEOPTS="-j2"
+#
+# PORTAGE_NICENESS provides a default increment to emerge's niceness level.
+# Note: This is an increment. Running emerge in a niced environment will
+# reduce it further. Default is unset.
+PORTAGE_NICENESS=3
+#
+# AUTOCLEAN enables portage to automatically clean out older or overlapping
+# packages from the system after every successful merge. This is the
+# same as running 'emerge -c' after every merge. Set with: "yes" or "no".
+# This does not affect the unpacked source. See 'noclean' below.
+AUTOCLEAN="yes"
+#
+# PORTAGE_TMPFS is a location where portage may create temporary files.
+# If specified, portage will use this directory whenever possible
+# for all rapid operations such as lockfiles and transient data.
+# It is _highly_ recommended that this be a tmpfs or ramdisk. Do not
+# set this to anything that does not give a significant performance
+# enhancement and proper FS compliance for locks and read/write.
+# /dev/shm is a glibc mandated tmpfs, and should be a reasonable
+# setting for all linux kernel+glibc based systems.
+#PORTAGE_TMPFS="/dev/shm"
+#
+# FEATURES are settings that affect the functionality of portage. Most of
+# these settings are for developer use, but some are available to non-
+# developers as well.
+#
+# 'autoaddcvs' causes portage to automatically try to add files to cvs
+# that will have to be added later. Done at generation times
+# and only has an effect when 'cvs' is also set.
+# 'buildpkg' causes binary packages to be created of all packages that
+# are being merged.
+# 'ccache' enables ccache support via CC.
+# 'collision-protect'
+# prevents packages from overwriting files that are owned by
+# another package or by no package at all.
+# 'cvs' causes portage to enable all cvs features (commits, adds),
+# and to apply all USE flags in SRC_URI for digests -- for
+# developers only.
+# 'digest' causes digests to be generated for all packages being merged.
+# 'distcc' enables distcc support via CC.
+# 'distlocks' enables distfiles locking using fcntl or hardlinks. This
+# is enabled by default. Tools exist to help clean the locks
+# after crashes: /usr/lib/portage/bin/clean_locks.
+# 'fixpackages' allows portage to fix binary packages that are stored in
+# PKGDIR. This can consume a lot of time. 'fixpackages' is
+# also a script that can be run at any given time to force
+# the same actions.
+# 'gpg' enables basic verification of Manifest files using gpg.
+# This features is UNDER DEVELOPMENT and reacts to features
+# of strict and severe. Heavy use of gpg sigs is coming.
+# 'keeptemp' prevents the clean phase from deleting the temp files ($T)
+# from a merge.
+# 'keepwork' prevents the clean phase from deleting the WORKDIR.
+# 'maketest' causes ebuilds to perform testing phases if they are capable
+# of it. Some packages support this automaticaly via makefiles.
+# 'noauto' causes ebuild to perform only the action requested and
+# not any other required actions like clean or unpack -- for
+# debugging purposes only.
+# 'noclean' prevents portage from removing the source and temporary files
+# after a merge -- for debugging purposes only.
+# 'nostrip' prevents the stripping of binaries.
+# 'notitles' disables xterm titlebar updates (which contain status info).
+# 'sandbox' enables sandboxing when running emerge and ebuild.
+# 'strict' causes portage to react strongly to conditions that are
+# potentially dangerous, like missing/incorrect Manifest files.
+# 'userpriv' allows portage to drop root privileges while it is compiling,
+# as a security measure. As a side effect this can remove
+# sandbox access violations for users.
+# 'usersandbox' enables sandboxing while portage is running under userpriv.
+#FEATURES="sandbox buildpkg ccache distcc userpriv usersandbox notitles noclean noauto cvs keeptemp keepwork autoaddcvs"
+FEATURES="sandbox ccache userprivs distlocks cvs"
+#
+# CCACHE_SIZE sets the space use limitations for ccache. The default size is
+# 2G, and will be set if not defined otherwise and ccache is in features.
+# Portage will set the default ccache dir if it is not present in the
+# user's environment, for userpriv it sets: ${PORTAGE_TMPDIR}/ccache
+# (/var/tmp/ccache), and for regular use the default is /root/.ccache.
+# Sizes are specified with 'G' 'M' or 'K'.
+# '2G' for 2 gigabytes, '2048M' for 2048 megabytes (same as 2G).
+CCACHE_SIZE="1G"
+#
+# DISTCC_DIR sets the temporary space used by distcc.
+#DISTCC_DIR="${PORTAGE_TMPDIR}/.distcc"
+#
+# RSYNC_EXCLUDEFROM is a file that portage will pass to rsync when it updates
+# the portage tree. Specific chunks of the tree may be excluded from
+# consideration. This may cause dependency failures if you are not careful.
+# The file format is one pattern per line, blanks and ';' or '#' lines are
+# comments. See 'man rsync' for more details on the exclude-from format.
+#RSYNC_EXCLUDEFROM=/etc/portage/rsync_excludes
+EBEEP_IGNORE=yes
+
+CONFIG_PROTECT_MASK="/usr/X11R6/lib/X11"
+
+
diff --git a/overlord/tests/testfiles/overlays_bug_184449.xml b/overlord/tests/testfiles/overlays_bug_184449.xml
new file mode 100644
index 0000000..c8dff2d
--- /dev/null
+++ b/overlord/tests/testfiles/overlays_bug_184449.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" ?>
+<layman>
+
+ <overlay
+ type = "svn"
+ src = "https://overlays.gentoo.org/svn/dev/wrobel"
+ contact = "nobody@gentoo.org"
+ name = "wrÖbel"
+ status = "official"
+ priority = "10">
+
+ <description>
+ Test ä
+ </description>
+
+ </overlay>
+
+
+</layman>
diff --git a/overlord/tests/testfiles/overlays_bug_286290.xml b/overlord/tests/testfiles/overlays_bug_286290.xml
new file mode 100644
index 0000000..1d4bd1b
--- /dev/null
+++ b/overlord/tests/testfiles/overlays_bug_286290.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layman>
+ <overlay contact="media-video@gentoo.org"
+ name="multimedia"
+ src="git://gitorious.org/gentoo-multimedia/gentoo-multimedia.git"
+ status="official"
+ type="git">
+ <link>http://gitorious.org/gentoo-multimedia</link>
+ <description>Repository for development of (mostly bleeding-edge)
+ multimedia packages for Gentoo Linux. This is the official overlay
+ for Gentoo’s media herds.</description>
+ </overlay>
+</layman>
diff --git a/overlord/tests/testfiles/subpath-1.xml b/overlord/tests/testfiles/subpath-1.xml
new file mode 100644
index 0000000..ddb0e3e
--- /dev/null
+++ b/overlord/tests/testfiles/subpath-1.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layman>
+ <overlay
+ name="b_name"
+ contact="b_owner@example.org"
+ type="tar"
+ src="http://example.org/b.tar.gz"
+ subpath="b_path">
+ <description>b_desc</description>
+ </overlay>
+ <overlay
+ name="c_name"
+ contact="c_owner@example.org"
+ type="cvs"
+ src=":pserver:username@example.org:/usr/local/cvs-repository"
+ subpath="c_path">
+ <description>c_desc</description>
+ </overlay>
+</layman>
diff --git a/overlord/tests/testfiles/subpath-2.xml b/overlord/tests/testfiles/subpath-2.xml
new file mode 100644
index 0000000..aa11497
--- /dev/null
+++ b/overlord/tests/testfiles/subpath-2.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE repositories SYSTEM "/dtd/repositories.dtd">
+<repositories xmlns="" version="1.0">
+ <repo>
+ <name>b_name</name>
+ <description>b_desc</description>
+ <owner>
+ <email>b_owner@example.org</email>
+ </owner>
+ <source type="tar">http://example.org/b.tar.gz</source>
+ <subpath>b_path</subpath>
+ </repo>
+ <repo>
+ <name>c_name</name>
+ <description>c_desc</description>
+ <owner>
+ <email>c_owner@example.org</email>
+ </owner>
+ <source type="cvs">:pserver:username@example.org:/usr/local/cvs-repository</source>
+ <subpath>c_path</subpath>
+ </repo>
+</repositories>