These are newly detected by black 23.1.0.
Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
(cherry picked from commit 826169af7c)
		
	
			
		
			
				
	
	
		
			488 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			488 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| 
 | |
| import json
 | |
| import os
 | |
| 
 | |
| from unittest import mock
 | |
| import six
 | |
| import yaml
 | |
| 
 | |
| from tests import helpers
 | |
| from pungi import ostree
 | |
| 
 | |
| 
 | |
| class OstreeTreeScriptTest(helpers.PungiTestCase):
 | |
|     def setUp(self):
 | |
|         super(OstreeTreeScriptTest, self).setUp()
 | |
|         self.repo = os.path.join(self.topdir, "atomic")
 | |
| 
 | |
|     def _make_dummy_config_dir(self, path):
 | |
|         helpers.touch(
 | |
|             os.path.join(path, "fedora-atomic-docker-host.json"),
 | |
|             json.dumps(
 | |
|                 {
 | |
|                     "ref": "fedora-atomic/25/x86_64",
 | |
|                     "repos": ["fedora-rawhide", "fedora-24", "fedora-23"],
 | |
|                 }
 | |
|             ),
 | |
|         )
 | |
|         helpers.touch(
 | |
|             os.path.join(path, "fedora-atomic-docker-host.yaml"),
 | |
|             yaml.dump(
 | |
|                 {
 | |
|                     "ref": "fedora-atomic/25/x86_64",
 | |
|                     "repos": ["fedora-rawhide", "fedora-24", "fedora-23"],
 | |
|                 }
 | |
|             ),
 | |
|         )
 | |
|         helpers.touch(
 | |
|             os.path.join(path, "fedora-rawhide.repo"),
 | |
|             "[fedora-rawhide]\nmirrorlist=mirror-mirror-on-the-wall",
 | |
|         )
 | |
|         helpers.touch(
 | |
|             os.path.join(path, "fedora-24.repo"),
 | |
|             "[fedora-24]\nmetalink=who-is-the-fairest-of-them-all",
 | |
|         )
 | |
|         helpers.touch(
 | |
|             os.path.join(path, "fedora-23.repo"),
 | |
|             "[fedora-23]\nbaseurl=why-not-zoidberg?",
 | |
|         )
 | |
| 
 | |
|     def assertCorrectCall(self, mock_run, extra_calls=[], extra_args=[]):
 | |
|         six.assertCountEqual(
 | |
|             self,
 | |
|             mock_run.call_args_list,
 | |
|             [
 | |
|                 mock.call(
 | |
|                     [
 | |
|                         "rpm-ostree",
 | |
|                         "compose",
 | |
|                         "tree",
 | |
|                         "--repo=%s" % self.repo,
 | |
|                         "--write-commitid-to=%s"
 | |
|                         % (self.topdir + "/logs/Atomic/commitid.log"),
 | |
|                         "--touch-if-changed=%s.stamp"
 | |
|                         % (self.topdir + "/logs/Atomic/commitid.log"),
 | |
|                     ]
 | |
|                     + extra_args
 | |
|                     + [self.topdir + "/fedora-atomic-docker-host.json"],
 | |
|                     logfile=self.topdir + "/logs/Atomic/create-ostree-repo.log",
 | |
|                     show_cmd=True,
 | |
|                     stdout=True,
 | |
|                     universal_newlines=True,
 | |
|                 )
 | |
|             ]
 | |
|             + extra_calls,
 | |
|         )
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_full_run(self, run):
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s/fedora-atomic-docker-host.json" % self.topdir,
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         self.assertCorrectCall(run)
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_run_on_existing_empty_dir(self, run):
 | |
|         os.mkdir(self.repo)
 | |
| 
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s/fedora-atomic-docker-host.json" % self.topdir,
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         self.assertCorrectCall(run)
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_run_on_initialized_repo(self, run):
 | |
|         helpers.touch(os.path.join(self.repo, "initialized"))
 | |
| 
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s/fedora-atomic-docker-host.json" % self.topdir,
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         self.assertCorrectCall(run)
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_update_summary(self, run):
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s/fedora-atomic-docker-host.json" % self.topdir,
 | |
|                 "--update-summary",
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         self.assertCorrectCall(
 | |
|             run,
 | |
|             extra_calls=[
 | |
|                 mock.call(
 | |
|                     ["ostree", "summary", "-u", "--repo=%s" % self.repo],
 | |
|                     logfile=self.topdir + "/logs/Atomic/ostree-summary.log",
 | |
|                     show_cmd=True,
 | |
|                     stdout=True,
 | |
|                     universal_newlines=True,
 | |
|                 )
 | |
|             ],
 | |
|         )
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_versioning_metadata(self, run):
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s/fedora-atomic-docker-host.json" % self.topdir,
 | |
|                 "--version=24",
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         self.assertCorrectCall(run, extra_args=["--add-metadata-string=version=24"])
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_ostree_ref(self, run):
 | |
|         self._make_dummy_config_dir(self.topdir)
 | |
|         treefile = os.path.join(self.topdir, "fedora-atomic-docker-host.json")
 | |
| 
 | |
|         with open(treefile, "r") as f:
 | |
|             treefile_content = json.load(f)
 | |
|         original_repos = treefile_content["repos"]
 | |
|         original_ref = treefile_content["ref"]
 | |
|         replacing_ref = original_ref + "-changed"
 | |
| 
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s" % treefile,
 | |
|                 "--ostree-ref=%s" % replacing_ref,
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         with open(treefile, "r") as f:
 | |
|             treefile_content = json.load(f)
 | |
|         new_repos = treefile_content["repos"]
 | |
|         new_ref = treefile_content["ref"]
 | |
| 
 | |
|         # ref value in treefile should be overrided with new ref
 | |
|         self.assertEqual(replacing_ref, new_ref)
 | |
|         # repos should stay unchanged
 | |
|         self.assertEqual(original_repos, new_repos)
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_run_with_yaml_file(self, run):
 | |
|         self._make_dummy_config_dir(self.topdir)
 | |
|         treefile = os.path.join(self.topdir, "fedora-atomic-docker-host.yaml")
 | |
| 
 | |
|         with open(treefile, "r") as f:
 | |
|             # Read initial content from YAML file
 | |
|             treefile_content = yaml.safe_load(f)
 | |
|         original_repos = treefile_content["repos"]
 | |
|         original_ref = treefile_content["ref"]
 | |
|         replacing_ref = original_ref + "-changed"
 | |
| 
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s" % treefile,
 | |
|                 "--ostree-ref=%s" % replacing_ref,
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         with open(treefile.replace(".yaml", ".json"), "r") as f:
 | |
|             # There is now a tweaked JSON file
 | |
|             treefile_content = json.load(f)
 | |
|         new_repos = treefile_content["repos"]
 | |
|         new_ref = treefile_content["ref"]
 | |
| 
 | |
|         # ref value in treefile should be overrided with new ref
 | |
|         self.assertEqual(replacing_ref, new_ref)
 | |
|         # repos should stay unchanged
 | |
|         self.assertEqual(original_repos, new_repos)
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_force_new_commit(self, run):
 | |
|         helpers.touch(os.path.join(self.repo, "initialized"))
 | |
| 
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s/fedora-atomic-docker-host.json" % self.topdir,
 | |
|                 "--force-new-commit",
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         self.assertCorrectCall(run, extra_args=["--force-nocache"])
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_unified_core(self, run):
 | |
|         helpers.touch(os.path.join(self.repo, "initialized"))
 | |
| 
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s/fedora-atomic-docker-host.json" % self.topdir,
 | |
|                 "--unified-core",
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         self.assertCorrectCall(run, extra_args=["--unified-core"])
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_extra_config_with_extra_repos(self, run):
 | |
|         configdir = os.path.join(self.topdir, "config")
 | |
|         self._make_dummy_config_dir(configdir)
 | |
|         treefile = os.path.join(configdir, "fedora-atomic-docker-host.json")
 | |
| 
 | |
|         extra_config_file = os.path.join(self.topdir, "extra_config.json")
 | |
|         extra_config = {
 | |
|             "repo": [
 | |
|                 {"name": "server", "baseurl": "http://www.example.com/Server/repo"},
 | |
|                 {
 | |
|                     "name": "optional",
 | |
|                     "baseurl": "http://example.com/repo/x86_64/optional",
 | |
|                     "exclude": "systemd-container",
 | |
|                     "gpgcheck": False,
 | |
|                 },
 | |
|                 {"name": "extra", "baseurl": "http://example.com/repo/x86_64/extra"},
 | |
|             ]
 | |
|         }
 | |
|         helpers.touch(extra_config_file, json.dumps(extra_config))
 | |
| 
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s" % treefile,
 | |
|                 "--extra-config=%s" % extra_config_file,
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         pungi_repo = os.path.join(configdir, "pungi.repo")
 | |
|         self.assertTrue(os.path.isfile(pungi_repo))
 | |
|         with open(pungi_repo, "r") as f:
 | |
|             content = f.read().strip()
 | |
|             result_template = (
 | |
|                 "[repo-0]",
 | |
|                 "name=repo-0",
 | |
|                 "baseurl=http://example.com/repo/x86_64/extra",
 | |
|                 "gpgcheck=0",
 | |
|                 "[repo-1]",
 | |
|                 "name=repo-1",
 | |
|                 "baseurl=http://example.com/repo/x86_64/optional",
 | |
|                 "exclude=systemd-container",
 | |
|                 "gpgcheck=0",
 | |
|                 "[repo-2]",
 | |
|                 "name=repo-2",
 | |
|                 "baseurl=http://www.example.com/Server/repo",
 | |
|                 "gpgcheck=0",
 | |
|             )
 | |
|             result = "\n".join(result_template).strip()
 | |
|             self.assertEqual(content, result)
 | |
| 
 | |
|         treeconf = json.load(open(treefile, "r"))
 | |
|         repos = treeconf["repos"]
 | |
|         self.assertEqual(len(repos), 3)
 | |
|         for name in ("repo-0", "repo-1", "repo-2"):
 | |
|             self.assertIn(name, repos)
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_extra_config_with_keep_original_sources(self, run):
 | |
|         configdir = os.path.join(self.topdir, "config")
 | |
|         self._make_dummy_config_dir(configdir)
 | |
|         treefile = os.path.join(configdir, "fedora-atomic-docker-host.json")
 | |
| 
 | |
|         extra_config_file = os.path.join(self.topdir, "extra_config.json")
 | |
|         extra_config = {
 | |
|             "repo": [
 | |
|                 {"name": "server", "baseurl": "http://www.example.com/Server/repo"},
 | |
|                 {
 | |
|                     "name": "optional",
 | |
|                     "baseurl": "http://example.com/repo/x86_64/optional",
 | |
|                     "exclude": "systemd-container",
 | |
|                     "gpgcheck": False,
 | |
|                 },
 | |
|                 {"name": "extra", "baseurl": "http://example.com/repo/x86_64/extra"},
 | |
|             ],
 | |
|             "keep_original_sources": True,
 | |
|         }
 | |
|         helpers.touch(extra_config_file, json.dumps(extra_config))
 | |
| 
 | |
|         ostree.main(
 | |
|             [
 | |
|                 "tree",
 | |
|                 "--repo=%s" % self.repo,
 | |
|                 "--log-dir=%s" % os.path.join(self.topdir, "logs", "Atomic"),
 | |
|                 "--treefile=%s" % treefile,
 | |
|                 "--extra-config=%s" % extra_config_file,
 | |
|             ]
 | |
|         )
 | |
| 
 | |
|         treeconf = json.load(open(treefile, "r"))
 | |
|         repos = treeconf["repos"]
 | |
|         self.assertEqual(len(repos), 6)
 | |
|         for name in [
 | |
|             "fedora-rawhide",
 | |
|             "fedora-24",
 | |
|             "fedora-23",
 | |
|             "repo-0",
 | |
|             "repo-1",
 | |
|             "repo-2",
 | |
|         ]:
 | |
|             self.assertIn(name, repos)
 | |
| 
 | |
| 
 | |
| class OstreeInstallerScriptTest(helpers.PungiTestCase):
 | |
|     def setUp(self):
 | |
|         super(OstreeInstallerScriptTest, self).setUp()
 | |
|         self.product = "dummyproduct"
 | |
|         self.version = "1.0"
 | |
|         self.release = "20160101.t.0"
 | |
|         self.output = os.path.join(self.topdir, "output")
 | |
|         self.logdir = os.path.join(self.topdir, "logs")
 | |
|         self.volid = "%s-%s" % (self.product, self.version)
 | |
|         self.variant = "dummy"
 | |
|         self.rootfs_size = None
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_run_with_args(self, run):
 | |
|         args = [
 | |
|             "installer",
 | |
|             "--product=%s" % self.product,
 | |
|             "--version=%s" % self.version,
 | |
|             "--release=%s" % self.release,
 | |
|             "--output=%s" % self.output,
 | |
|             "--variant=%s" % self.variant,
 | |
|             "--rootfs-size=%s" % self.rootfs_size,
 | |
|             "--nomacboot",
 | |
|             "--isfinal",
 | |
|         ]
 | |
|         args.append("--source=%s" % "http://www.example.com/dummy/repo")
 | |
|         args.append("--installpkgs=dummy-foo")
 | |
|         args.append("--installpkgs=dummy-bar")
 | |
|         args.append("--add-template=/path/to/lorax.tmpl")
 | |
|         args.append("--add-template-var=ostree_osname=dummy")
 | |
|         args.append("--add-arch-template=/path/to/lorax-embed.tmpl")
 | |
|         args.append("--add-arch-template-var=ostree_repo=http://www.example.com/ostree")
 | |
|         ostree.main(args)
 | |
|         self.maxDiff = None
 | |
|         six.assertCountEqual(
 | |
|             self,
 | |
|             run.mock_calls,
 | |
|             [
 | |
|                 mock.call(
 | |
|                     [
 | |
|                         "lorax",
 | |
|                         "--product=dummyproduct",
 | |
|                         "--version=1.0",
 | |
|                         "--release=20160101.t.0",
 | |
|                         "--source=http://www.example.com/dummy/repo",
 | |
|                         "--variant=dummy",
 | |
|                         "--nomacboot",
 | |
|                         "--isfinal",
 | |
|                         "--installpkgs=dummy-foo",
 | |
|                         "--installpkgs=dummy-bar",
 | |
|                         "--add-template=/path/to/lorax.tmpl",
 | |
|                         "--add-arch-template=/path/to/lorax-embed.tmpl",
 | |
|                         "--add-template-var=ostree_osname=dummy",
 | |
|                         "--add-arch-template-var=ostree_repo=http://www.example.com/ostree",  # noqa: E501
 | |
|                         "--rootfs-size=None",
 | |
|                         self.output,
 | |
|                     ],
 | |
|                 ),
 | |
|             ],
 | |
|         )
 | |
| 
 | |
|     @mock.patch("kobo.shortcuts.run")
 | |
|     def test_run_with_extra_config_file(self, run):
 | |
|         extra_config_file = os.path.join(self.topdir, "extra_config.json")
 | |
|         helpers.touch(
 | |
|             extra_config_file,
 | |
|             json.dumps(
 | |
|                 {
 | |
|                     "repo": "http://www.example.com/another/repo",
 | |
|                     "installpkgs": ["dummy-foo", "dummy-bar"],
 | |
|                     "add_template": ["/path/to/lorax.tmpl"],
 | |
|                     "add_template_var": [
 | |
|                         "ostree_osname=dummy-atomic",
 | |
|                         "ostree_ref=dummy/x86_64/docker",
 | |
|                     ],
 | |
|                     "add_arch_template": ["/path/to/lorax-embed.tmpl"],
 | |
|                     "add_arch_template_var": [
 | |
|                         "ostree_osname=dummy-atomic",
 | |
|                         "ostree_repo=http://www.example.com/ostree",
 | |
|                     ],
 | |
|                 }
 | |
|             ),
 | |
|         )
 | |
|         args = [
 | |
|             "installer",
 | |
|             "--product=%s" % self.product,
 | |
|             "--version=%s" % self.version,
 | |
|             "--release=%s" % self.release,
 | |
|             "--output=%s" % self.output,
 | |
|             "--variant=%s" % self.variant,
 | |
|             "--rootfs-size=%s" % self.rootfs_size,
 | |
|             "--nomacboot",
 | |
|             "--isfinal",
 | |
|         ]
 | |
|         args.append("--source=%s" % "http://www.example.com/dummy/repo")
 | |
|         args.append("--extra-config=%s" % extra_config_file)
 | |
|         ostree.main(args)
 | |
|         self.maxDiff = None
 | |
|         six.assertCountEqual(
 | |
|             self,
 | |
|             run.mock_calls,
 | |
|             [
 | |
|                 mock.call(
 | |
|                     [
 | |
|                         "lorax",
 | |
|                         "--product=dummyproduct",
 | |
|                         "--version=1.0",
 | |
|                         "--release=20160101.t.0",
 | |
|                         "--source=http://www.example.com/dummy/repo",
 | |
|                         "--variant=dummy",
 | |
|                         "--nomacboot",
 | |
|                         "--isfinal",
 | |
|                         "--installpkgs=dummy-foo",
 | |
|                         "--installpkgs=dummy-bar",
 | |
|                         "--add-template=/path/to/lorax.tmpl",
 | |
|                         "--add-arch-template=/path/to/lorax-embed.tmpl",
 | |
|                         "--add-template-var=ostree_osname=dummy-atomic",
 | |
|                         "--add-template-var=ostree_ref=dummy/x86_64/docker",
 | |
|                         "--add-arch-template-var=ostree_osname=dummy-atomic",
 | |
|                         "--add-arch-template-var=ostree_repo=http://www.example.com/ostree",  # noqa: E501
 | |
|                         "--rootfs-size=None",
 | |
|                         self.output,
 | |
|                     ],
 | |
|                 ),
 | |
|             ],
 | |
|         )
 |