# -*- coding: utf-8 -*- import os import sys import six from pungi.wrappers import repoclosure as rc from . import helpers class RepoclosureWrapperTestCase(helpers.BaseTestCase): def test_minimal_command(self): self.assertEqual(rc.get_repoclosure_cmd(), ['/usr/bin/repoclosure', '--tempcache']) def test_minimal_dnf_command(self): self.assertEqual(rc.get_repoclosure_cmd(backend='dnf'), ['dnf', 'repoclosure']) def test_unknown_backend(self): with self.assertRaises(RuntimeError) as ctx: rc.get_repoclosure_cmd(backend='rpm') self.assertEqual(str(ctx.exception), 'Unknown repoclosure backend: rpm') def test_multiple_arches(self): self.assertEqual(rc.get_repoclosure_cmd(arch=['x86_64', 'ppc64']), ['/usr/bin/repoclosure', '--tempcache', '--arch=x86_64', '--arch=ppc64']) def test_full_command(self): repos = {'my-repo': '/mnt/koji/repo'} lookaside = {'fedora': 'http://kojipkgs.fp.o/repo'} cmd = rc.get_repoclosure_cmd(arch='x86_64', repos=repos, lookaside=lookaside) self.assertEqual(cmd[0], '/usr/bin/repoclosure') six.assertCountEqual( self, cmd[1:], [ '--tempcache', '--arch=x86_64', '--repofrompath=my-repo,file:///mnt/koji/repo', '--repofrompath=fedora,http://kojipkgs.fp.o/repo', '--repoid=my-repo', '--lookaside=fedora', ] ) def test_full_dnf_command(self): repos = {'my-repo': '/mnt/koji/repo'} lookaside = {'fedora': 'http://kojipkgs.fp.o/repo'} cmd = rc.get_repoclosure_cmd(backend='dnf', arch='x86_64', repos=repos, lookaside=lookaside) self.assertEqual(cmd[:2], ['dnf', 'repoclosure']) six.assertCountEqual( self, cmd[2:], ['--arch=x86_64', '--repofrompath=my-repo,file:///mnt/koji/repo', '--repofrompath=fedora,http://kojipkgs.fp.o/repo', '--repo=my-repo', '--check=my-repo', '--repo=fedora']) def test_expand_repo(self): repos = { 'local': '/mnt/koji/repo', 'remote': 'http://kojipkgs.fp.o/repo', } cmd = rc.get_repoclosure_cmd(repos=repos) self.assertEqual(cmd[0], '/usr/bin/repoclosure') six.assertCountEqual( self, cmd[1:], [ '--tempcache', '--repofrompath=local,file:///mnt/koji/repo', '--repofrompath=remote,http://kojipkgs.fp.o/repo', '--repoid=local', '--repoid=remote', ] ) def test_expand_lookaside(self): repos = { 'local': '/mnt/koji/repo', 'remote': 'http://kojipkgs.fp.o/repo', } cmd = rc.get_repoclosure_cmd(lookaside=repos) self.assertEqual(cmd[0], '/usr/bin/repoclosure') six.assertCountEqual( self, cmd[1:], [ '--tempcache', '--repofrompath=local,file:///mnt/koji/repo', '--repofrompath=remote,http://kojipkgs.fp.o/repo', '--lookaside=local', '--lookaside=remote', ] ) class FusExtractorTestCase(helpers.PungiTestCase): def setUp(self): super(FusExtractorTestCase, self).setUp() self.input1 = os.path.join(self.topdir, "in1") self.input2 = os.path.join(self.topdir, "in2") self.output = os.path.join(self.topdir, "out") def test_no_match(self): helpers.touch(self.input1, "fus-DEBUG: Installing foo\n") rc.extract_from_fus_logs([self.input1], self.output) self.assertFileContent(self.output, "") def test_error(self): helpers.touch( self.input1, "fus-DEBUG: Installing bar\nProblem 1/1\n - nothing provides foo\n" ) with self.assertRaises(RuntimeError) as ctx: rc.extract_from_fus_logs([self.input1], self.output) self.assertIn(self.output, str(ctx.exception)) self.assertFileContent(self.output, "Problem 1/1\n - nothing provides foo\n") def test_errors_in_multiple_files(self): helpers.touch( self.input1, "fus-DEBUG: Installing bar\nProblem 1/1\n - nothing provides foo\n" ) helpers.touch( self.input2, "fus-DEBUG: Installing baz\nProblem 1/1\n - nothing provides quux\n" ) with self.assertRaises(RuntimeError) as ctx: rc.extract_from_fus_logs([self.input1, self.input2], self.output) self.assertIn(self.output, str(ctx.exception)) self.assertFileContent( self.output, "Problem 1/1\n - nothing provides foo\nProblem 1/1\n - nothing provides quux\n", )