public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-portage-dev@lists.gentoo.org
Cc: "Michał Górny" <mgorny@gentoo.org>
Subject: [gentoo-portage-dev] [PATCH 4/6] tests: Fix running on installed copy of Portage
Date: Thu, 21 Aug 2014 22:19:42 +0200	[thread overview]
Message-ID: <1408652384-1954-5-git-send-email-mgorny@gentoo.org> (raw)
In-Reply-To: <1408652384-1954-1-git-send-email-mgorny@gentoo.org>

---
 pym/portage/tests/__init__.py                    | 20 ++++++++++++++++++
 pym/portage/tests/dbapi/test_portdb_cache.py     |  5 ++---
 pym/portage/tests/emerge/test_emerge_slot_abi.py |  7 +++----
 pym/portage/tests/emerge/test_simple.py          | 26 ++++++++++++------------
 pym/portage/tests/lint/test_compile_modules.py   | 10 +++++----
 pym/portage/tests/lint/test_import_modules.py    |  8 ++++++--
 pym/portage/tests/repoman/test_simple.py         |  8 +++++---
 pym/portage/tests/resolver/ResolverPlayground.py |  8 +++++---
 pym/portage/tests/util/test_getconfig.py         |  5 ++---
 9 files changed, 62 insertions(+), 35 deletions(-)

diff --git a/pym/portage/tests/__init__.py b/pym/portage/tests/__init__.py
index 697b800..708dd59 100644
--- a/pym/portage/tests/__init__.py
+++ b/pym/portage/tests/__init__.py
@@ -25,8 +25,24 @@ import portage
 from portage import os
 from portage import _encodings
 from portage import _unicode_decode
+from portage.const import (EPREFIX, GLOBAL_CONFIG_PATH, PORTAGE_BASE_PATH,
+	PORTAGE_BIN_PATH)
 from portage.util._argparse import ArgumentParser
 
+
+if portage._not_installed:
+	cnf_path = os.path.join(PORTAGE_BASE_PATH, 'cnf')
+	cnf_etc_path = cnf_path
+	cnf_bindir = PORTAGE_BIN_PATH
+	cnf_sbindir = cnf_bindir
+else:
+	cnf_path = os.path.join(EPREFIX or '/', GLOBAL_CONFIG_PATH)
+	cnf_etc_path = os.path.join(EPREFIX or '/', 'etc')
+	cnf_eprefix = EPREFIX
+	cnf_bindir = os.path.join(EPREFIX or '/', 'usr', 'bin')
+	cnf_sbindir = os.path.join(EPREFIX or '/', 'usr', 'sbin')
+
+
 def main():
 	suite = unittest.TestSuite()
 	basedir = os.path.dirname(os.path.realpath(__file__))
@@ -178,6 +194,10 @@ class TestCase(unittest.TestCase):
 		unittest.TestCase.__init__(self, *pargs, **kwargs)
 		self.todo = False
 		self.portage_skip = None
+		self.cnf_path = cnf_path
+		self.cnf_etc_path = cnf_etc_path
+		self.bindir = cnf_bindir
+		self.sbindir = cnf_sbindir
 
 	def defaultTestResult(self):
 		return TextTestResult()
diff --git a/pym/portage/tests/dbapi/test_portdb_cache.py b/pym/portage/tests/dbapi/test_portdb_cache.py
index 94af96e..25e65f6 100644
--- a/pym/portage/tests/dbapi/test_portdb_cache.py
+++ b/pym/portage/tests/dbapi/test_portdb_cache.py
@@ -8,8 +8,7 @@ import textwrap
 import portage
 from portage import os
 from portage import _unicode_decode
-from portage.const import (BASH_BINARY, PORTAGE_BIN_PATH,
-	PORTAGE_PYM_PATH, USER_CONFIG_PATH)
+from portage.const import (BASH_BINARY, PORTAGE_PYM_PATH, USER_CONFIG_PATH)
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import ResolverPlayground
 from portage.util import ensure_dirs
@@ -38,7 +37,7 @@ class PortdbCacheTestCase(TestCase):
 
 		portage_python = portage._python_interpreter
 		egencache_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "egencache"),
+			os.path.join(self.bindir, "egencache"),
 			"--repo", "test_repo",
 			"--repositories-configuration", settings.repositories.config_string())
 		python_cmd = (portage_python, "-b", "-Wd", "-c")
diff --git a/pym/portage/tests/emerge/test_emerge_slot_abi.py b/pym/portage/tests/emerge/test_emerge_slot_abi.py
index fd7ec0e..d1f2d92 100644
--- a/pym/portage/tests/emerge/test_emerge_slot_abi.py
+++ b/pym/portage/tests/emerge/test_emerge_slot_abi.py
@@ -7,8 +7,7 @@ import sys
 import portage
 from portage import os
 from portage import _unicode_decode
-from portage.const import (BASH_BINARY, PORTAGE_BIN_PATH,
-	PORTAGE_PYM_PATH, USER_CONFIG_PATH)
+from portage.const import (BASH_BINARY, PORTAGE_PYM_PATH, USER_CONFIG_PATH)
 from portage.process import find_binary
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import ResolverPlayground
@@ -70,9 +69,9 @@ class SlotAbiEmergeTestCase(TestCase):
 
 		portage_python = portage._python_interpreter
 		ebuild_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "ebuild"))
+			os.path.join(self.bindir, "ebuild"))
 		emerge_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "emerge"))
+			os.path.join(self.bindir, "emerge"))
 
 		test_ebuild = portdb.findname("dev-libs/dbus-glib-0.98")
 		self.assertFalse(test_ebuild is None)
diff --git a/pym/portage/tests/emerge/test_simple.py b/pym/portage/tests/emerge/test_simple.py
index bf0af8b..9c1b1bf 100644
--- a/pym/portage/tests/emerge/test_simple.py
+++ b/pym/portage/tests/emerge/test_simple.py
@@ -8,7 +8,7 @@ import portage
 from portage import os
 from portage import _unicode_decode
 from portage.const import (BASH_BINARY, PORTAGE_BASE_PATH,
-	PORTAGE_BIN_PATH, PORTAGE_PYM_PATH, USER_CONFIG_PATH)
+	PORTAGE_PYM_PATH, USER_CONFIG_PATH)
 from portage.process import find_binary
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import ResolverPlayground
@@ -175,29 +175,29 @@ pkg_preinst() {
 
 		portage_python = portage._python_interpreter
 		dispatch_conf_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "dispatch-conf"))
+			os.path.join(self.sbindir, "dispatch-conf"))
 		ebuild_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "ebuild"))
+			os.path.join(self.bindir, "ebuild"))
 		egencache_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "egencache"),
+			os.path.join(self.bindir, "egencache"),
 			"--repo", "test_repo",
 			"--repositories-configuration", settings.repositories.config_string())
 		emerge_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "emerge"))
+			os.path.join(self.bindir, "emerge"))
 		emaint_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "emaint"))
+			os.path.join(self.sbindir, "emaint"))
 		env_update_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "env-update"))
+			os.path.join(self.sbindir, "env-update"))
 		etc_update_cmd = (BASH_BINARY,
-			os.path.join(PORTAGE_BIN_PATH, "etc-update"))
+			os.path.join(self.sbindir, "etc-update"))
 		fixpackages_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "fixpackages"))
+			os.path.join(self.sbindir, "fixpackages"))
 		portageq_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "portageq"))
+			os.path.join(self.bindir, "portageq"))
 		quickpkg_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "quickpkg"))
+			os.path.join(self.bindir, "quickpkg"))
 		regenworld_cmd = (portage_python, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "regenworld"))
+			os.path.join(self.sbindir, "regenworld"))
 
 		rm_binary = find_binary("rm")
 		self.assertEqual(rm_binary is None, False,
@@ -368,7 +368,7 @@ pkg_preinst() {
 			for x in true_symlinks:
 				os.symlink(true_binary, os.path.join(fake_bin, x))
 			for x in etc_symlinks:
-				os.symlink(os.path.join(PORTAGE_BASE_PATH, "cnf", x),
+				os.symlink(os.path.join(self.cnf_etc_path, x),
 					os.path.join(eprefix, "etc", x))
 			with open(os.path.join(var_cache_edb, "counter"), 'wb') as f:
 				f.write(b"100")
diff --git a/pym/portage/tests/lint/test_compile_modules.py b/pym/portage/tests/lint/test_compile_modules.py
index ce7e3fb..4826cad 100644
--- a/pym/portage/tests/lint/test_compile_modules.py
+++ b/pym/portage/tests/lint/test_compile_modules.py
@@ -5,7 +5,7 @@ import errno
 import itertools
 import stat
 
-from portage.const import PORTAGE_BIN_PATH, PORTAGE_PYM_PATH
+from portage.const import PORTAGE_BIN_PATH, PORTAGE_PYM_PATH, PORTAGE_PYM_PACKAGES
 from portage.tests import TestCase
 from portage import os
 from portage import _encodings
@@ -14,9 +14,11 @@ from portage import _unicode_decode, _unicode_encode
 class CompileModulesTestCase(TestCase):
 
 	def testCompileModules(self):
-		for parent, _dirs, files in itertools.chain(
-			os.walk(PORTAGE_BIN_PATH),
-			os.walk(PORTAGE_PYM_PATH)):
+		iters = [os.walk(os.path.join(PORTAGE_PYM_PATH, x))
+			for x in PORTAGE_PYM_PACKAGES]
+		iters.append(os.walk(PORTAGE_BIN_PATH))
+
+		for parent, _dirs, files in itertools.chain(*iters):
 			parent = _unicode_decode(parent,
 				encoding=_encodings['fs'], errors='strict')
 			for x in files:
diff --git a/pym/portage/tests/lint/test_import_modules.py b/pym/portage/tests/lint/test_import_modules.py
index 34261f4..fcdcb3b 100644
--- a/pym/portage/tests/lint/test_import_modules.py
+++ b/pym/portage/tests/lint/test_import_modules.py
@@ -1,7 +1,9 @@
 # Copyright 2011-2012 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
-from portage.const import PORTAGE_PYM_PATH
+from itertools import chain
+
+from portage.const import PORTAGE_PYM_PATH, PORTAGE_PYM_PACKAGES
 from portage.tests import TestCase
 from portage import os
 from portage import _encodings
@@ -13,7 +15,9 @@ class ImportModulesTestCase(TestCase):
 		expected_failures = frozenset((
 		))
 
-		for mod in self._iter_modules(PORTAGE_PYM_PATH):
+		iters = (self._iter_modules(os.path.join(PORTAGE_PYM_PATH, x))
+			for x in PORTAGE_PYM_PACKAGES)
+		for mod in chain(*iters):
 			try:
 				__import__(mod)
 			except ImportError as e:
diff --git a/pym/portage/tests/repoman/test_simple.py b/pym/portage/tests/repoman/test_simple.py
index 69eb36d..5dbb767 100644
--- a/pym/portage/tests/repoman/test_simple.py
+++ b/pym/portage/tests/repoman/test_simple.py
@@ -9,7 +9,7 @@ import portage
 from portage import os
 from portage import shutil
 from portage import _unicode_decode
-from portage.const import PORTAGE_BASE_PATH, PORTAGE_BIN_PATH, PORTAGE_PYM_PATH
+from portage.const import PORTAGE_BASE_PATH, PORTAGE_PYM_PATH
 from portage.process import find_binary
 from portage.tests import TestCase
 from portage.tests.resolver.ResolverPlayground import ResolverPlayground
@@ -171,7 +171,7 @@ class SimpleRepomanTestCase(TestCase):
 		license_dir = os.path.join(test_repo_location, "licenses")
 
 		repoman_cmd = (portage._python_interpreter, "-b", "-Wd",
-			os.path.join(PORTAGE_BIN_PATH, "repoman"))
+			os.path.join(self.bindir, "repoman"))
 
 		git_binary = find_binary("git")
 		git_cmd = (git_binary,)
@@ -274,7 +274,9 @@ class SimpleRepomanTestCase(TestCase):
 			os.symlink(test_repo_location, test_repo_symlink)
 			# repoman checks metadata.dtd for recent CTIME, so copy the file in
 			# order to ensure that the CTIME is current
-			shutil.copyfile(metadata_dtd, os.path.join(distdir, "metadata.dtd"))
+			# NOTE: if we don't have the file around, let repoman try to fetch it.
+			if os.path.exists(metadata_dtd):
+				shutil.copyfile(metadata_dtd, os.path.join(distdir, "metadata.dtd"))
 
 			if debug:
 				# The subprocess inherits both stdout and stderr, for
diff --git a/pym/portage/tests/resolver/ResolverPlayground.py b/pym/portage/tests/resolver/ResolverPlayground.py
index 077e271..675e23f 100644
--- a/pym/portage/tests/resolver/ResolverPlayground.py
+++ b/pym/portage/tests/resolver/ResolverPlayground.py
@@ -15,6 +15,7 @@ from portage.package.ebuild.config import config
 from portage.package.ebuild.digestgen import digestgen
 from portage._sets import load_default_config
 from portage._sets.base import InternalPackageSet
+from portage.tests import cnf_path
 from portage.util import ensure_dirs, normalize_path
 from portage.versions import catsplit
 
@@ -65,6 +66,7 @@ class ResolverPlayground(object):
 			If a metadata key is missing, it gets a default value.
 		profile: settings defined by the profile.
 		"""
+
 		self.debug = debug
 		self.eprefix = normalize_path(tempfile.mkdtemp())
 		portage.const.EPREFIX = self.eprefix.rstrip(os.sep)
@@ -414,7 +416,7 @@ class ResolverPlayground(object):
 		make_globals_path = os.path.join(self.eroot,
 			GLOBAL_CONFIG_PATH.lstrip(os.sep), "make.globals")
 		ensure_dirs(os.path.dirname(make_globals_path))
-		os.symlink(os.path.join(PORTAGE_BASE_PATH, "cnf", "make.globals"),
+		os.symlink(os.path.join(cnf_path, "make.globals"),
 			make_globals_path)
 
 		#Create /usr/share/portage/config/sets/portage.conf
@@ -425,8 +427,8 @@ class ResolverPlayground(object):
 		except os.error:
 			pass
 
-		provided_sets_portage_conf = \
-			os.path.join(PORTAGE_BASE_PATH, "cnf/sets/portage.conf")
+		provided_sets_portage_conf = (
+			os.path.join(cnf_path, "sets", "portage.conf"))
 		os.symlink(provided_sets_portage_conf, os.path.join(default_sets_conf_dir, "portage.conf"))
 
 		set_config_dir = os.path.join(user_config_dir, "sets")
diff --git a/pym/portage/tests/util/test_getconfig.py b/pym/portage/tests/util/test_getconfig.py
index e5fd60f..16f415c 100644
--- a/pym/portage/tests/util/test_getconfig.py
+++ b/pym/portage/tests/util/test_getconfig.py
@@ -3,6 +3,7 @@
 
 import tempfile
 
+import portage
 from portage import os
 from portage import shutil
 from portage import _unicode_encode
@@ -26,9 +27,7 @@ class GetConfigTestCase(TestCase):
 	}
 
 	def testGetConfig(self):
-
-		make_globals_file = os.path.join(PORTAGE_BASE_PATH,
-			'cnf', 'make.globals')
+		make_globals_file = os.path.join(self.cnf_path, "make.globals")
 		d = getconfig(make_globals_file)
 		for k, v in self._cases.items():
 			self.assertEqual(d[k], v)
-- 
2.0.4



  parent reply	other threads:[~2014-08-21 20:20 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-21 20:19 [gentoo-portage-dev] [PATCHES] setup.py install for Portage Michał Górny
2014-08-21 20:19 ` [gentoo-portage-dev] [PATCH 1/6] self-update: Copy only relevant packages from PORTAGE_PYM_PATH Michał Górny
2014-08-22 21:47   ` Brian Dolbec
2014-08-21 20:19 ` [gentoo-portage-dev] [PATCH 2/6] portage.const: Make PORTAGE_PYM_PATH point to the real package tree Michał Górny
2014-08-21 20:19 ` [gentoo-portage-dev] [PATCH 3/6] tests: Append .py to files that need to be installed Michał Górny
2014-08-21 20:19 ` Michał Górny [this message]
2014-08-22 22:19   ` [gentoo-portage-dev] [PATCH 4/6] tests: Fix running on installed copy of Portage Brian Dolbec
2014-08-22 22:52     ` Michał Górny
2014-08-21 20:19 ` [gentoo-portage-dev] [PATCH 5/6] Install Python modules using setup.py Michał Górny
2014-08-22 22:30   ` Brian Dolbec
2014-08-22 22:55     ` Michał Górny
2014-08-23 20:30     ` [gentoo-portage-dev] [PATCH v2] Install Portage " Michał Górny
2014-08-23 21:56       ` Brian Dolbec
2014-08-29 17:08       ` Brian Dolbec
2014-08-29 23:30         ` Brian Dolbec
2014-09-05  6:58       ` [gentoo-portage-dev] [PATCH v3] " Michał Górny
2014-08-21 20:19 ` [gentoo-portage-dev] [PATCH 6/6] travis: Use setup.py for running tests Michał Górny
2014-08-21 20:22 ` [gentoo-portage-dev] [PATCHES] setup.py install for Portage Michał Górny
2014-08-21 20:25   ` Michał Górny
2014-08-22 22:32 ` Brian Dolbec
2014-08-24 19:42 ` Brian Dolbec
2014-08-24 21:19   ` Michał Górny
2014-09-12  7:17 ` Michał Górny

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1408652384-1954-5-git-send-email-mgorny@gentoo.org \
    --to=mgorny@gentoo.org \
    --cc=gentoo-portage-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox