1# 2# Copyright OpenEmbedded Contributors 3# 4# SPDX-License-Identifier: MIT 5# 6 7import tempfile 8import textwrap 9import bb.tinfoil 10import oe.path 11from oeqa.selftest.case import OESelftestTestCase 12from oeqa.utils.commands import bitbake 13 14class Fetch(OESelftestTestCase): 15 def test_git_mirrors(self): 16 """ 17 Verify that the git fetcher will fall back to the HTTP mirrors. The 18 recipe needs to be one that we have on the Yocto Project source mirror 19 and is hosted in git. 20 """ 21 22 # TODO: mktempd instead of hardcoding 23 dldir = os.path.join(self.builddir, "download-git-mirrors") 24 self.track_for_cleanup(dldir) 25 26 # No mirrors, should use git to fetch successfully 27 features = """ 28DL_DIR = "%s" 29MIRRORS:forcevariable = "" 30PREMIRRORS:forcevariable = "" 31""" % dldir 32 self.write_config(features) 33 oe.path.remove(dldir, recurse=True) 34 bitbake("dbus-wait -c fetch -f") 35 36 # No mirrors and broken git, should fail 37 features = """ 38DL_DIR = "%s" 39GIT_PROXY_COMMAND = "false" 40MIRRORS:forcevariable = "" 41PREMIRRORS:forcevariable = "" 42""" % dldir 43 self.write_config(features) 44 oe.path.remove(dldir, recurse=True) 45 with self.assertRaises(AssertionError): 46 bitbake("dbus-wait -c fetch -f") 47 48 # Broken git but a specific mirror 49 features = """ 50DL_DIR = "%s" 51GIT_PROXY_COMMAND = "false" 52MIRRORS:forcevariable = "git://.*/.* http://downloads.yoctoproject.org/mirror/sources/" 53""" % dldir 54 self.write_config(features) 55 oe.path.remove(dldir, recurse=True) 56 bitbake("dbus-wait -c fetch -f") 57 58 59class Dependencies(OESelftestTestCase): 60 def write_recipe(self, content, tempdir): 61 f = os.path.join(tempdir, "test.bb") 62 with open(f, "w") as fd: 63 fd.write(content) 64 return f 65 66 def test_dependencies(self): 67 """ 68 Verify that the correct dependencies are generated for specific SRC_URI entries. 69 """ 70 71 with bb.tinfoil.Tinfoil() as tinfoil, tempfile.TemporaryDirectory(prefix="selftest-fetch") as tempdir: 72 tinfoil.prepare(config_only=False, quiet=2) 73 74 r = """ 75 LICENSE="CLOSED" 76 SRC_URI="http://example.com/tarball.zip" 77 """ 78 f = self.write_recipe(textwrap.dedent(r), tempdir) 79 d = tinfoil.parse_recipe_file(f) 80 self.assertIn("wget-native", d.getVarFlag("do_fetch", "depends")) 81 self.assertIn("unzip-native", d.getVarFlag("do_unpack", "depends")) 82 83 # Verify that the downloadfilename overrides the URI 84 r = """ 85 LICENSE="CLOSED" 86 SRC_URI="https://example.com/tarball;downloadfilename=something.zip" 87 """ 88 f = self.write_recipe(textwrap.dedent(r), tempdir) 89 d = tinfoil.parse_recipe_file(f) 90 self.assertIn("wget-native", d.getVarFlag("do_fetch", "depends")) 91 self.assertIn("unzip-native", d.getVarFlag("do_unpack", "depends") or "") 92 93 r = """ 94 LICENSE="CLOSED" 95 SRC_URI="ftp://example.com/tarball.lz" 96 """ 97 f = self.write_recipe(textwrap.dedent(r), tempdir) 98 d = tinfoil.parse_recipe_file(f) 99 self.assertIn("wget-native", d.getVarFlag("do_fetch", "depends")) 100 self.assertIn("lzip-native", d.getVarFlag("do_unpack", "depends")) 101 102 r = """ 103 LICENSE="CLOSED" 104 SRC_URI="git://example.com/repo;branch=master" 105 """ 106 f = self.write_recipe(textwrap.dedent(r), tempdir) 107 d = tinfoil.parse_recipe_file(f) 108 self.assertIn("git-native", d.getVarFlag("do_fetch", "depends")) 109