commit: 491b3ff4d35194765c8ee93c6a438097551fd07e
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 19 23:12:46 2019 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sat Oct 19 23:13:30 2019 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=491b3ff4
testEbuildFetch: demonstrate fetch behavior with stale file and no digests
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
lib/portage/tests/ebuild/test_fetch.py | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/lib/portage/tests/ebuild/test_fetch.py
b/lib/portage/tests/ebuild/test_fetch.py
index da63d9dea..f50fea0dd 100644
--- a/lib/portage/tests/ebuild/test_fetch.py
+++ b/lib/portage/tests/ebuild/test_fetch.py
@@ -20,7 +20,7 @@ from portage.util._async.SchedulerInterface import
SchedulerInterface
from portage.util._eventloop.global_event_loop import global_event_loop
from portage.package.ebuild.config import config
from portage.package.ebuild.digestgen import digestgen
-from portage.package.ebuild.fetch import (_download_suffix, FlatLayout,
+from portage.package.ebuild.fetch import (_download_suffix, fetch, FlatLayout,
FilenameHashLayout, MirrorLayoutConfig)
from _emerge.EbuildFetcher import EbuildFetcher
from _emerge.Package import Package
@@ -51,6 +51,12 @@ class EbuildFetchTestCase(TestCase):
}
loop = SchedulerInterface(global_event_loop())
+
+ def run_async(func, *args, **kwargs):
+ with ForkExecutor(loop=loop) as executor:
+ return
loop.run_until_complete(loop.run_in_executor(executor,
+ functools.partial(func, *args,
**kwargs)))
+
scheme = 'http'
host = '127.0.0.1'
content = {}
@@ -99,6 +105,29 @@ class EbuildFetchTestCase(TestCase):
portdb = root_config.trees["porttree"].dbapi
settings = config(clone=playground.settings)
+ # Demonstrate that fetch preserves a stale file
in DISTDIR when no digests are given.
+ foo_uri = {'foo':
('{scheme}://{host}:{port}/distfiles/foo'.format(scheme=scheme, host=host,
port=server.server_port),)}
+ foo_path = os.path.join(settings['DISTDIR'],
'foo')
+ foo_stale_content = b'stale content\n'
+ with open(foo_path, 'wb') as f:
+ f.write(b'stale content\n')
+
+ self.assertTrue(bool(run_async(fetch, foo_uri,
settings, try_mirrors=False)))
+
+ with open(foo_path, 'rb') as f:
+ self.assertEqual(f.read(),
foo_stale_content)
+ with open(foo_path, 'rb') as f:
+ self.assertNotEqual(f.read(),
distfiles['foo'])
+
+ # Remove the stale file in order to forcefully
update it.
+ os.unlink(foo_path)
+
+ self.assertTrue(bool(run_async(fetch, foo_uri,
settings, try_mirrors=False)))
+
+ with open(foo_path, 'rb') as f:
+ self.assertEqual(f.read(),
distfiles['foo'])
+
+ # Test emirrordist invocation.
emirrordist_cmd = (portage._python_interpreter,
'-b', '-Wd',
os.path.join(self.bindir,
'emirrordist'),
'--distfiles', settings['DISTDIR'],