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" 39SRC_URI:pn-dbus-wait = "git://git.yoctoproject.org/dbus-wait;branch=master;protocol=git" 40GIT_PROXY_COMMAND = "false" 41MIRRORS:forcevariable = "" 42PREMIRRORS:forcevariable = "" 43""" % dldir 44 self.write_config(features) 45 oe.path.remove(dldir, recurse=True) 46 with self.assertRaises(AssertionError): 47 bitbake("dbus-wait -c fetch -f") 48 49 # Broken git but a specific mirror 50 features = """ 51DL_DIR = "%s" 52SRC_URI:pn-dbus-wait = "git://git.yoctoproject.org/dbus-wait;branch=master;protocol=git" 53GIT_PROXY_COMMAND = "false" 54MIRRORS:forcevariable = "git://.*/.* http://downloads.yoctoproject.org/mirror/sources/" 55""" % dldir 56 self.write_config(features) 57 oe.path.remove(dldir, recurse=True) 58 bitbake("dbus-wait -c fetch -f") 59 60 61class Dependencies(OESelftestTestCase): 62 def write_recipe(self, content, tempdir): 63 f = os.path.join(tempdir, "test.bb") 64 with open(f, "w") as fd: 65 fd.write(content) 66 return f 67 68 def test_dependencies(self): 69 """ 70 Verify that the correct dependencies are generated for specific SRC_URI entries. 71 """ 72 73 with bb.tinfoil.Tinfoil() as tinfoil, tempfile.TemporaryDirectory(prefix="selftest-fetch") as tempdir: 74 tinfoil.prepare(config_only=False, quiet=2) 75 76 r = """ 77 LICENSE="CLOSED" 78 SRC_URI="http://example.com/tarball.zip" 79 """ 80 f = self.write_recipe(textwrap.dedent(r), tempdir) 81 d = tinfoil.parse_recipe_file(f) 82 self.assertIn("wget-native", d.getVarFlag("do_fetch", "depends")) 83 self.assertIn("unzip-native", d.getVarFlag("do_unpack", "depends")) 84 85 # Verify that the downloadfilename overrides the URI 86 r = """ 87 LICENSE="CLOSED" 88 SRC_URI="https://example.com/tarball;downloadfilename=something.zip" 89 """ 90 f = self.write_recipe(textwrap.dedent(r), tempdir) 91 d = tinfoil.parse_recipe_file(f) 92 self.assertIn("wget-native", d.getVarFlag("do_fetch", "depends")) 93 self.assertIn("unzip-native", d.getVarFlag("do_unpack", "depends") or "") 94 95 r = """ 96 LICENSE="CLOSED" 97 SRC_URI="ftp://example.com/tarball.lz" 98 """ 99 f = self.write_recipe(textwrap.dedent(r), tempdir) 100 d = tinfoil.parse_recipe_file(f) 101 self.assertIn("wget-native", d.getVarFlag("do_fetch", "depends")) 102 self.assertIn("lzip-native", d.getVarFlag("do_unpack", "depends")) 103 104 r = """ 105 LICENSE="CLOSED" 106 SRC_URI="git://example.com/repo;branch=master;rev=ffffffffffffffffffffffffffffffffffffffff" 107 """ 108 f = self.write_recipe(textwrap.dedent(r), tempdir) 109 d = tinfoil.parse_recipe_file(f) 110 self.assertIn("git-native", d.getVarFlag("do_fetch", "depends")) 111