Merged from trunk 6229:6234 (probably not prefix aware)
authorFabian Groffen <grobian@gentoo.org>
Sat, 17 Mar 2007 14:49:53 +0000 (14:49 -0000)
committerFabian Groffen <grobian@gentoo.org>
Sat, 17 Mar 2007 14:49:53 +0000 (14:49 -0000)
start of framework for programs in portage bin (SpankMan)

Close /dev/null when finished.

Make paths independent of cwd.

Add "bin" to testDirs.

Call the base class destructor if it exists.

svn path=/main/branches/prefix/; revision=6238

pym/portage/tests/__init__.py
pym/portage/tests/bin/__init__.py [new file with mode: 0644]
pym/portage/tests/bin/setup_env.py [new file with mode: 0644]
pym/portage/tests/bin/test_dobin.py [new file with mode: 0644]
pym/portage/tests/bin/test_dodir.py [new file with mode: 0644]

index b7640ab2cb187083ce4dd5dbb0453dde97b42a8d..60a19de6c4ad88cb5ed56745b1c7642dff68803b 100644 (file)
@@ -7,7 +7,7 @@ import os, sys, time, unittest
 import portage.tests
 
 def main():
-       testDirs = ["util","versions", "dep", "xpak", "env/config"]
+       testDirs = ["bin", "util","versions", "dep", "xpak", "env/config"]
        suite = unittest.TestSuite()
        basedir = os.path.dirname(__file__)
        for mydir in testDirs:
diff --git a/pym/portage/tests/bin/__init__.py b/pym/portage/tests/bin/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/pym/portage/tests/bin/setup_env.py b/pym/portage/tests/bin/setup_env.py
new file mode 100644 (file)
index 0000000..e0a89f1
--- /dev/null
@@ -0,0 +1,69 @@
+# setup_env.py -- Make sure bin subdir has sane env for testing
+# Copyright 2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id: test_dep_getcpv.py 6182 2007-03-06 07:35:22Z antarus $
+
+import os, shutil, sys
+from os.path import dirname, abspath, join
+from portage.tests import TestCase
+from portage.process import spawn
+
+bindir = join(dirname(dirname(abspath(__file__))), "..", "..", "..", "bin")
+basedir = join(dirname(dirname(abspath(__file__))), "bin", "root")
+os.environ["D"] = os.path.join(basedir, "image")
+os.environ["T"] = os.path.join(basedir, "temp")
+os.environ["S"] = os.path.join(basedir, "workdir")
+os.environ["PF"] = "portage-tests-0.09-r1"
+os.environ["PATH"] = bindir + ":" + os.environ["PATH"]
+
+def binTestsCleanup():
+       if os.access(basedir, os.W_OK):
+               shutil.rmtree(basedir)
+def binTestsInit():
+       binTestsCleanup()
+       os.mkdir(basedir)
+       os.mkdir(os.environ["D"])
+       os.mkdir(os.environ["T"])
+       os.mkdir(os.environ["S"])
+       os.chdir(os.environ["S"])
+
+class BinTestCase(TestCase):
+       def __init__(self, methodName):
+               TestCase.__init__(self, methodName)
+               binTestsInit()
+       def __del__(self):
+               binTestsCleanup()
+               if hasattr(TestCase, "__del__"):
+                       TestCase.__del__(self)
+
+def _exists_in_D(path):
+       # Note: do not use os.path.join() here, we assume D to end in /
+       return os.access(os.environ["D"] + path, os.W_OK)
+def exists_in_D(path):
+       if not _exists_in_D(path):
+               raise TestCase.failureException
+def xexists_in_D(path):
+       if _exists_in_D(path):
+               raise TestCase.failureException
+
+def portage_func(func, args, exit_status=0):
+       # we don't care about the output of the programs,
+       # just their exit value and the state of $D
+       f = open('/dev/null', 'w')
+       fd_pipes = {0:0,1:f.fileno(),2:f.fileno()}
+       spawn(func+" "+args, env=os.environ, fd_pipes=fd_pipes)
+       f.close()
+
+def create_portage_wrapper(bin):
+       def derived_func(*args):
+               newargs = list(args)
+               newargs.insert(0, bin)
+               return portage_func(*newargs)
+       return derived_func
+
+for bin in os.listdir(bindir):
+       if bin.startswith("do") or \
+          bin.startswith("new") or \
+          bin.startswith("prep") or \
+          bin in ["ecompress","ecompressdir","fowners","fperms"]:
+               setattr(sys.modules[__name__], bin, create_portage_wrapper(bin))
diff --git a/pym/portage/tests/bin/test_dobin.py b/pym/portage/tests/bin/test_dobin.py
new file mode 100644 (file)
index 0000000..074c894
--- /dev/null
@@ -0,0 +1,13 @@
+# test_dobin.py -- Portage Unit Testing Functionality
+# Copyright 2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id: test_dep_getcpv.py 6182 2007-03-06 07:35:22Z antarus $
+
+from setup_env import *
+
+class DoBin(BinTestCase):
+       def testBasic(self):
+               dobin("does-not-exist", 1)
+               xexists_in_D("does-not-exist")
+               xexists_in_D("/bin/does-not-exist")
+               xexists_in_D("/usr/bin/does-not-exist")
diff --git a/pym/portage/tests/bin/test_dodir.py b/pym/portage/tests/bin/test_dodir.py
new file mode 100644 (file)
index 0000000..a6ec5e1
--- /dev/null
@@ -0,0 +1,13 @@
+# test_dodir.py -- Portage Unit Testing Functionality
+# Copyright 2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id: test_dep_getcpv.py 6182 2007-03-06 07:35:22Z antarus $
+
+from setup_env import *
+
+class DoDir(BinTestCase):
+       def testBasic(self):
+               dodir("usr /usr")
+               exists_in_D("/usr")
+               dodir("/var/lib/moocow")
+               exists_in_D("/var/lib/moocow")