VirtualBox

Changeset 99293 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Apr 5, 2023 9:13:30 AM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
156679
Message:

Validation Kit/vbox.py: Added a couple of functions for Guest Additions / general version handling and comparison. Required for cross host + Guest Additions testing (e.g. old(er) Guest Additions on newer host versions and vice versa).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/testdriver/vbox.py

    r99170 r99293  
    17551755            return None;
    17561756        return self.oBuild.sGuestAdditionsIso;
     1757
     1758    @staticmethod
     1759    def versionToTuple(sVer, fIgnoreErrors = False): # pylint: disable=line-too-long
     1760        """
     1761        Returns a semantic versioning string as a tuple.
     1762        """
     1763        try:
     1764            # Regular expression taken from semver.org (recommended regular expression for semantic version strings).
     1765            # Creative Commons ― CC BY 3.0
     1766            oRegEx = re.compile('^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$');
     1767            oMatch = oRegEx.search(sVer);
     1768            return oMatch.groups();
     1769        except:
     1770            if not fIgnoreErrors:
     1771                reporter.logXcpt('Handling regex for "%s" failed' % (sVer,));
     1772        return None;
     1773
     1774    @staticmethod
     1775    def compareVersion(sVer1, sVer2, fIgnoreErrors = False):
     1776        """
     1777        Compares two version numbers and returns the result.
     1778
     1779        Takes either strings or version tuples as input.
     1780
     1781        Returns 0 if both versions match.
     1782        Return -1 if version 1 is bigger than version 2.
     1783        Return  1 if version 2 is bigger than version 1.
     1784        Returns None on error.
     1785        """
     1786        assert sVer1 is not None;
     1787        assert sVer2 is not None;
     1788        try:
     1789            tpVer1 = TestDriver.versionToTuple(sVer1, fIgnoreErrors);
     1790            if tpVer1 is None:
     1791                return None;
     1792            tpVer2 = TestDriver.versionToTuple(sVer2, fIgnoreErrors);
     1793            if tpVer2 is None:
     1794                return None;
     1795            if tpVer1 == tpVer2:
     1796                return 0;
     1797            return 1 if tuple(map(str, tpVer2)) > tuple(map(str, tpVer1)) else -1;
     1798        except:
     1799            if not fIgnoreErrors:
     1800                reporter.logXcpt();
     1801        return None;
     1802
     1803    @staticmethod
     1804    def isVersionEqualOrBigger(sVer1, sVer2, fIgnoreErrors = False):
     1805        """
     1806        Checks whether version 1 is equal or bigger than version 2.
     1807
     1808        Returns True if version 1 is equal or bigger than version 2, False if not.
     1809        """
     1810        return False if TestDriver.compareVersion(sVer1, sVer2, fIgnoreErrors) is 1 else True;
     1811
     1812    def getGuestAdditionsVersion(self, oSession, fIgnoreErrors = False):
     1813        """
     1814        Returns the installed Guest Additions version.
     1815
     1816        Returns version as a string (e.g. "7.0.6-beta2-whatever"), or None if not found / on error.
     1817        """
     1818        assert oSession is not None;
     1819        try:
     1820            return oSession.o.console.guest.additionsVersion;
     1821        except:
     1822            if not fIgnoreErrors:
     1823                reporter.errorXcpt('Getting the Guest Additions version failed');
     1824        return None;
    17571825
    17581826    #
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette