Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix apt unit tests #6029

Closed
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion selftests/unit/utils/software_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,26 @@ def apt_supported_distro():
return distro.detect().name in ["debian", "Ubuntu"]


def login_binary_path(distro_name, distro_version):
"""Retrieve the login binary path based on the distro version""""
if distro_name == "Ubuntu":
if float(distro_version) >= 24.04:
return "/usr/bin/login"
if distro_name == "debian":
if distro_version == "trixie":
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This ties into my previous point. It's very probably that unstable also has the file at the same place as testing, right? In the future, when those are released, it'd make sense to do a numerical version comparison IMO.

Copy link
Contributor

@arif-ali arif-ali Jan 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think, this should be "sid or >= 14". When trixie is released later this year, it will revert to version 14 in /etc/debian_version, and will be replaced with forky for the testing release

  • trixie == testing <== the codename changes depending on the next release
  • sid == unstable <== This is always the same

When stuff is uploaded to Debian, it's always done to unstable, and when the tests pass, it migrates to testing. So, it's important that we detect both trixie and sid imho

return "/usr/bin/login"
return "/bin/login"


@unittest.skipUnless(os.getuid() == 0, "This test requires root privileges")
@unittest.skipUnless(apt_supported_distro(), "Unsupported distro")
class Apt(unittest.TestCase):
def test_provides(self):
sm = manager.SoftwareManager()
self.assertEqual(sm.provides("/bin/login"), "login")
distro_name = distro.detect().name
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And optimization here to avoid calling the detection twice:

detected = distro.detect()
login_path = login_binary_path(detected.name, detected.version)

Also, it would be OK to change login_binary_path to take a Distro instance IMO.

distro_version = distro.detect().version
login_path = login_binary_path(distro_name, distro_version)
self.assertEqual(sm.provides(login_path), "login")
self.assertTrue(isinstance(sm.backend, backends.apt.AptBackend))


Expand Down
Loading