blob: c9107022c8efdcb1fadec5309e32a296ce6fb39e [file] [log] [blame]
Brad Bishopc342db32019-05-15 21:57:59 -04001#
Patrick Williams92b42cb2022-09-03 06:53:57 -05002# Copyright OpenEmbedded Contributors
3#
Brad Bishopc342db32019-05-15 21:57:59 -04004# SPDX-License-Identifier: MIT
5#
6
Andrew Geissler3b8a17c2021-04-15 15:55:55 -05007import tempfile
8import textwrap
9import bb.tinfoil
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080010import oe.path
11from oeqa.selftest.case import OESelftestTestCase
12from oeqa.utils.commands import bitbake
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080013
14class Fetch(OESelftestTestCase):
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080015 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"
Patrick Williams213cb262021-08-07 19:21:33 -050029MIRRORS:forcevariable = ""
30PREMIRRORS:forcevariable = ""
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080031""" % 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"
Andrew Geissler028142b2023-05-05 11:29:21 -050039SRC_URI:pn-dbus-wait = "git://git.yoctoproject.org/dbus-wait;branch=master;protocol=git"
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080040GIT_PROXY_COMMAND = "false"
Patrick Williams213cb262021-08-07 19:21:33 -050041MIRRORS:forcevariable = ""
42PREMIRRORS:forcevariable = ""
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080043""" % 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"
Andrew Geissler028142b2023-05-05 11:29:21 -050052SRC_URI:pn-dbus-wait = "git://git.yoctoproject.org/dbus-wait;branch=master;protocol=git"
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080053GIT_PROXY_COMMAND = "false"
Patrick Williams213cb262021-08-07 19:21:33 -050054MIRRORS:forcevariable = "git://.*/.* http://downloads.yoctoproject.org/mirror/sources/"
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080055""" % dldir
56 self.write_config(features)
57 oe.path.remove(dldir, recurse=True)
58 bitbake("dbus-wait -c fetch -f")
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050059
60
61class Dependencies(OESelftestTestCase):
Andrew Geissler5f350902021-07-23 13:09:54 -040062 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)
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050066 return f
67
68 def test_dependencies(self):
69 """
70 Verify that the correct dependencies are generated for specific SRC_URI entries.
71 """
Andrew Geissler5f350902021-07-23 13:09:54 -040072
73 with bb.tinfoil.Tinfoil() as tinfoil, tempfile.TemporaryDirectory(prefix="selftest-fetch") as tempdir:
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050074 tinfoil.prepare(config_only=False, quiet=2)
75
76 r = """
77 LICENSE="CLOSED"
78 SRC_URI="http://example.com/tarball.zip"
79 """
Andrew Geissler5f350902021-07-23 13:09:54 -040080 f = self.write_recipe(textwrap.dedent(r), tempdir)
81 d = tinfoil.parse_recipe_file(f)
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050082 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 """
Andrew Geissler5f350902021-07-23 13:09:54 -040090 f = self.write_recipe(textwrap.dedent(r), tempdir)
91 d = tinfoil.parse_recipe_file(f)
Andrew Geissler3b8a17c2021-04-15 15:55:55 -050092 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 """
Andrew Geissler5f350902021-07-23 13:09:54 -040099 f = self.write_recipe(textwrap.dedent(r), tempdir)
100 d = tinfoil.parse_recipe_file(f)
Andrew Geissler3b8a17c2021-04-15 15:55:55 -0500101 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"
Andrew Geissler595f6302022-01-24 19:11:47 +0000106 SRC_URI="git://example.com/repo;branch=master"
Andrew Geissler3b8a17c2021-04-15 15:55:55 -0500107 """
Andrew Geissler5f350902021-07-23 13:09:54 -0400108 f = self.write_recipe(textwrap.dedent(r), tempdir)
109 d = tinfoil.parse_recipe_file(f)
Andrew Geissler3b8a17c2021-04-15 15:55:55 -0500110 self.assertIn("git-native", d.getVarFlag("do_fetch", "depends"))