summaryrefslogtreecommitdiffstats
path: root/tests/test_debfile.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_debfile.py')
-rw-r--r--tests/test_debfile.py192
1 files changed, 192 insertions, 0 deletions
diff --git a/tests/test_debfile.py b/tests/test_debfile.py
new file mode 100644
index 0000000..bb65a94
--- /dev/null
+++ b/tests/test_debfile.py
@@ -0,0 +1,192 @@
+#!/usr/bin/python3
+#
+# Copyright (C) 2010 Michael Vogt <mvo@ubuntu.com>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+"""Unit tests for verifying the correctness of DebPackage in apt.debfile."""
+import logging
+import os
+import sys
+import unittest
+
+from test_all import get_library_dir
+
+libdir = get_library_dir()
+if libdir:
+ sys.path.insert(0, libdir)
+import apt_pkg
+import testcommon
+
+import apt.debfile
+
+
+class TestDebfile(testcommon.TestCase):
+ """test the debfile"""
+
+ TEST_DEBS = [
+ # conflicts with apt
+ ("gdebi-test1.deb", False),
+ # impossible dependency
+ ("gdebi-test2.deb", False),
+ # or-group (impossible-dependency|apt)
+ ("gdebi-test3.deb", True),
+ # Conflicts: apt (<= 0.1)
+ ("gdebi-test4.deb", True),
+ # Conflicts: apt (>= 0.1)
+ ("gdebi-test5.deb", False),
+ # invalid unicode in descr
+ ("gdebi-test6.deb", True),
+ # provides/conflicts against "foobarbaz"
+ ("gdebi-test7.deb", True),
+ # provides/conflicts/replaces against "mail-transport-agent"
+ # (should fails if mail-transport-agent is installed)
+ ("gdebi-test8.deb", False),
+ # provides/conflicts against real pkg
+ ("gdebi-test9.deb", True),
+ # provides debconf-tiny and the real debconf conflicts with
+ ("gdebi-test10.deb", False),
+ ]
+
+ def setUp(self):
+ testcommon.TestCase.setUp(self)
+ apt_pkg.config.set("APT::Architecture", "i386")
+ # FIXME: When run via test_all.py, the tests fail without this if it
+ # is set in the system.
+ apt_pkg.config.clear("APT::Architectures")
+ apt_pkg.config.set("Dir::State::status", "./data/test_debs/var/lib/dpkg/status")
+ apt_pkg.config.set("Dir::State::lists", "./data/test_debs/var/lib/apt/lists")
+ apt_pkg.config.set(
+ "Dir::Etc::sourcelist", "./data/test_debs/etc/apt/sources.list"
+ )
+ apt_pkg.init_system()
+ self.cache = apt.Cache()
+
+ def test_dsc_file(self):
+ filename = "hello_2.5-1.dsc"
+ deb = apt.debfile.DscSrcPackage(cache=self.cache)
+ deb.open(os.path.join("data", "test_debs", filename))
+ self.assertTrue(deb.check(), "got failure '%s'" % deb._failure_string)
+ missing = {"autotools-dev"}
+ self.assertEqual(set(deb.missing_deps), missing)
+ # specialized properties
+ self.assertEqual(deb.pkgname, "hello")
+ self.assertEqual(deb.binaries, ["hello", "bello", "cello"])
+ self.assertEqual(deb.filelist, ["hello_2.5.orig.tar.gz", "hello_2.5-1.diff.gz"])
+ self.assertEqual(deb.depends, [[("autotools-dev", "", "")]])
+ # tag fields are available as a dict
+ self.assertEqual(deb["Format"], "1.0")
+ self.assertEqual(deb["Source"], "hello")
+ self.assertEqual(deb["Binary"], "hello, bello,\n cello")
+ self.assertEqual(deb["Architecture"], "any")
+ self.assertEqual(deb["Version"], "2.5-1")
+ self.assertEqual(deb["Maintainer"], "Santiago Vila <sanvila@debian.org>")
+ self.assertEqual(deb["Homepage"], "http://www.gnu.org/software/hello")
+ self.assertEqual(deb["Standards-Version"], "3.8.4")
+
+ def test_dsc_file_with_impossible_build_dep(self):
+ filename = "impossible-build-depends_2.5-1.dsc"
+ deb = apt.debfile.DscSrcPackage(cache=self.cache)
+ deb.open(os.path.join("data", "test_debs", filename))
+ self.assertFalse(deb.check())
+ self.assertEqual(deb.depends, [[("debhelper", "101", ">")]])
+
+ def test_deb_file(self):
+ deb = apt.debfile.DebPackage(cache=self.cache)
+ for filename, expected_res in self.TEST_DEBS:
+ logging.debug(f"testing {filename}, expecting {expected_res}")
+ deb.open(os.path.join("data", "test_debs", filename))
+ res = deb.check()
+ self.assertEqual(
+ res,
+ expected_res,
+ "Unexpected result for package '%s' (got %s wanted %s)\n%s"
+ % (filename, res, expected_res, deb._failure_string),
+ )
+
+ def test_utf8_sections(self):
+ deb = apt.debfile.DebPackage(cache=self.cache)
+ deb.open(os.path.join("data", "test_debs", "utf8-package_1.0-1_all.deb"))
+ self.assertEqual(deb["Maintainer"], "Samuel Lidén Borell <samuel@slbdata.se>")
+
+ def test_content(self):
+ # normal
+ deb = apt.debfile.DebPackage(cache=self.cache)
+ deb.open(os.path.join("data", "test_debs", "gdebi-test11.deb"))
+ self.assertEqual('#!/bin/sh\necho "test"\n', deb.data_content("usr/bin/test"))
+ # binary
+ deb = apt.debfile.DebPackage(cache=self.cache)
+ deb.open(os.path.join("data", "test_debs", "gdebi-test12.deb"))
+ content = deb.data_content("usr/bin/binary")
+ self.assertTrue(
+ content.startswith("Automatically converted to printable ascii:\n\x7fELF ")
+ )
+ # control file
+ needle = """Package: gdebi-test12
+Version: 1.0
+Architecture: all
+Description: testpackage for gdebi - contains usr/bin/binary for file reading
+ This tests the binary file reading for debfile.py
+"""
+ content = deb.control_content("./control")
+ self.assertEqual(content, needle)
+ content = deb.control_content("control")
+ self.assertEqual(content, needle)
+
+ def test_xz_data(self):
+ deb = apt.debfile.DebPackage("./data/test_debs/data-tar-xz.deb")
+ self.assertEqual(deb.filelist, ["./", "usr/", "usr/bin/"])
+
+ @unittest.skipIf(
+ apt_pkg.version_compare(apt_pkg.VERSION, "0.9.15.4~") < 0,
+ "APT too old for uncompressed control.tar/data.tar",
+ )
+ def test_uncompressed_data(self):
+ deb = apt.debfile.DebPackage("./data/test_debs/data-tar.deb")
+ self.assertEqual(deb.filelist, ["./", "usr/", "usr/bin/"])
+
+ def test_check_exception(self):
+ deb = apt.debfile.DebPackage("./data/test_debs/data-tar-xz.deb")
+ self.assertRaises(AttributeError, lambda: deb.missing_deps)
+ deb.check()
+ deb.missing_deps
+
+ def test_no_supported_data_tar(self):
+ with self.assertRaises(SystemError):
+ apt.debfile.DebPackage("./data/test_debs/data-tar-broken.deb")
+
+ def test_contains(self):
+ deb = apt.debfile.DebPackage("./data/test_debs/data-tar-xz.deb")
+ self.assertTrue("Package" in deb)
+
+ def test_multi_arch_allowed(self):
+ apt_pkg.config["APT::Architectures::"] = "i386"
+ apt_pkg.config["APT::Architectures::"] = "amd64"
+ apt_pkg.config["APT::Architecture"] = "amd64"
+ apt_pkg.init_system()
+
+ allowed_any = apt.debfile.DebPackage(
+ "./data/test_debs/testdep-allowed-any_1.0-1_i386.deb"
+ )
+ self.assertTrue(allowed_any.check(), allowed_any._failure_string)
+
+ def test_multi_arch_same(self):
+ apt_pkg.config["APT::Architectures::"] = "i386"
+ apt_pkg.config["APT::Architectures::"] = "amd64"
+ apt_pkg.config["APT::Architecture"] = "amd64"
+ apt_pkg.init_system()
+ same = apt.debfile.DebPackage(
+ "./data/test_debs/testdep-same-arch_1.0-1_i386.deb"
+ )
+ self.assertTrue(same.check(), same._failure_string)
+
+ def test_get_content_gzip_data(self):
+ deb = apt.debfile.DebPackage("./data/test_debs/gdebi-test13.deb")
+ data = deb.data_content("./lala.gz")
+ self.assertEqual(data, "Automatically decompressed:\n\nlala\n")
+
+
+if __name__ == "__main__":
+ # logging.basicConfig(level=logging.DEBUG)
+ unittest.main()