Beispiel #1
0
class TestUpdater(unittest.TestCase):

    def setUp(self):
        appdir = 'nxdrive/tests/resources/esky_app'
        version_finder = 'nxdrive/tests/resources/esky_versions'
        self.esky_app = MockEsky(appdir, version_finder=version_finder)
        self.updater = AppUpdater(esky_app=self.esky_app,
                                  local_update_site=True)

    def test_version_compare(self):
        # Compare server versions
        # Releases
        self.assertEquals(version_compare('5.9.3', '5.9.3'), 0)
        self.assertEquals(version_compare('5.9.3', '5.9.2'), 1)
        self.assertEquals(version_compare('5.9.2', '5.9.3'), -1)
        self.assertEquals(version_compare('5.9.3', '5.8'), 1)
        self.assertEquals(version_compare('5.8', '5.6.0'), 1)
        self.assertEquals(version_compare('5.9.1', '5.9.0.1'), 1)
        self.assertEquals(version_compare('6.0', '5.9.3'), 1)
        self.assertEquals(version_compare('5.10', '5.1.2'), 1)

        # Date-based
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.9.4-I20140415_0120'), 0)
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.9.4-I20140410_0120'), 1)
        self.assertEquals(version_compare('5.9.4-I20140515_0120',
                                          '5.9.4-I20140415_0120'), 1)
        self.assertEquals(version_compare('5.9.4-I20150102_0120',
                                          '5.9.4-I20143112_0120'), 1)
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.9.3-I20140415_0120'), 1)

        # Releases and date-based
        self.assertEquals(version_compare('5.9.4-I20140415_0120', '5.9.3'), 1)
        self.assertEquals(version_compare('5.9.4-I20140415_0120', '5.9.4'), -1)
        self.assertEquals(version_compare('5.9.4-I20140415_0120', '5.9.5'), -1)

        self.assertEquals(version_compare('5.9.3', '5.9.4-I20140415_0120'), -1)
        self.assertEquals(version_compare('5.9.4', '5.9.4-I20140415_0120'), 1)
        self.assertEquals(version_compare('5.9.5', '5.9.4-I20140415_0120'), 1)

        # Snapshots
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.4-SNAPSHOT'),
                          0)
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.3-SNAPSHOT'),
                          1)
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.8-SNAPSHOT'),
                          1)
        self.assertEquals(version_compare('5.9.3-SNAPSHOT', '5.9.4-SNAPSHOT'),
                          -1)
        self.assertEquals(version_compare('5.8-SNAPSHOT', '5.9.4-SNAPSHOT'),
                          -1)

        # Releases and snapshots
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.3'), 1)
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.4'), -1)
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.5'), -1)

        self.assertEquals(version_compare('5.9.3', '5.9.4-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.9.4', '5.9.4-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.9.5', '5.9.4-SNAPSHOT'), 1)

        # Date-based and snapshots
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.9.3-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.9.5-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.9.3-SNAPSHOT',
                                          '5.9.4-I20140415_0120'), -1)
        self.assertEquals(version_compare('5.9.5-SNAPSHOT',
                                          '5.9.4-I20140415_0120'), 1)
        # Can't decide, consider as equal
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.9.4-SNAPSHOT'), 0)
        self.assertEquals(version_compare('5.9.4-SNAPSHOT',
                                          '5.9.4-I20140415_0120'), 0)

        # Hotfixes
        self.assertEquals(version_compare('5.8.0-HF14', '5.8.0-HF14'), 0)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8.0-HF13'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8.0-HF15'), -1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.6.0-HF35'), 1)
        self.assertEquals(version_compare('5.6.0-H35', '5.8.0-HF14'), -1)

        # Releases and hotfixes
        self.assertEquals(version_compare('5.8.0-HF14', '5.6'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.9.1'), -1)

        self.assertEquals(version_compare('5.6', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.8', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.9.1', '5.8.0-HF14'), 1)

        # Date-based and hotfixes
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.8.0-HF14'), 1)
        self.assertEquals(version_compare('5.8.1-I20140415_0120',
                                          '5.8.0-HF14'), 1)
        self.assertEquals(version_compare('5.8.0-I20140415_0120',
                                          '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.8-I20140415_0120',
                                          '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.10.0-HF01'), -1)

        self.assertEquals(version_compare('5.8.0-HF14',
                                          '5.9.4-I20140415_0120'), -1)
        self.assertEquals(version_compare('5.8.0-HF14',
                                          '5.8.1-I20140415_0120'), -1)
        self.assertEquals(version_compare('5.8.0-HF14',
                                          '5.8.0-I20140415_0120'), 1)
        self.assertEquals(version_compare('5.8.0-HF14',
                                          '5.8-I20140415_0120'), 1)
        self.assertEquals(version_compare('5.10.0-HF01',
                                          '5.9.4-I20140415_0120'), 1)

        # Snaphsots and hotfixes
        self.assertEquals(version_compare('5.8.0-HF14', '5.7.1-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8.0-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.9.1-SNAPSHOT'), -1)

        self.assertEquals(version_compare('5.7.1-SNAPSHOT', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.8.0-SNAPSHOT', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.8-SNAPSHOT', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.9.1-SNAPSHOT', '5.8.0-HF14'), 1)

        # Snapshot hotfixes
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.8.0-HF14-SNAPSHOT'), 0)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.8.0-HF13-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.8.0-HF15-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.6.0-HF35-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.6.0-H35-SNAPSHOT',
                                          '5.8.0-HF14-SNAPSHOT'), -1)

        # Releases and snapshot hotfixes
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.6'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.8'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.9.1'), -1)

        self.assertEquals(version_compare('5.6', '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.8', '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.9.1', '5.8.0-HF14-SNAPSHOT'), 1)

        # Date-based and snapshot hotfixes
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.8.0-HF14-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-I20140415_0120',
                                          '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.9.4-I20140415_0120',
                                          '5.10.0-HF01-SNAPSHOT'), -1)

        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.9.4-I20140415_0120'), -1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.8.0-I20140415_0120'), 1)
        self.assertEquals(version_compare('5.10.0-HF01-SNAPSHOT',
                                          '5.9.4-I20140415_0120'), 1)

        # Snaphsots and snapshot hotfixes
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.7.1-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.8-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.8.0-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.9.1-SNAPSHOT'), -1)

        self.assertEquals(version_compare('5.7.1-SNAPSHOT',
                                          '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.8-SNAPSHOT',
                                          '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.8.0-SNAPSHOT',
                                          '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.9.1-SNAPSHOT',
                                          '5.8.0-HF14-SNAPSHOT'), 1)

        # Hotfixes and snapshot hotfixes
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.6.0-HF35'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.8.0-HF13'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.8.0-HF15'), -1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT',
                                          '5.10.0-HF01'), -1)

        # Compare client versions
        self.assertEquals(version_compare('0.1', '1.0'), -1)
        self.assertEquals(version_compare('1.0', '1.0'), 0)
        self.assertEquals(version_compare('1.3.0424', '1.3.0424'), 0)
        self.assertEquals(version_compare('1.3.0524', '1.3.0424'), 1)
        self.assertEquals(version_compare('1.4', '1.3.0524'), 1)
        self.assertEquals(version_compare('1.4.0622', '1.3.0524'), 1)
        self.assertEquals(version_compare('1.10', '1.1.2'), 1)
        self.assertEquals(version_compare('2.1.0528', '1.10'), 1)

    def test_get_active_version(self):
        # Active version is None because Esky instance is built from a
        # directory, see Esky._init_from_appdir
        self.assertIsNone(self.updater.get_active_version())

    def test_get_current_latest_version(self):
        self.assertEquals(self.updater.get_current_latest_version(),
                          '1.3.0424')

    def test_find_versions(self):
        versions = self.updater.find_versions()
        self.assertEquals(versions, ['1.3.0524', '1.4.0622'])

    def test_get_server_min_version(self):
        # Unexisting version
        self.assertRaises(MissingUpdateSiteInfo,
                          self.updater.get_server_min_version, '4.6.2012')
        self.assertEquals(self.updater.get_server_min_version('1.3.0424'),
                          '5.8')
        self.assertEquals(self.updater.get_server_min_version('1.3.0524'),
                          '5.9.1')
        self.assertEquals(self.updater.get_server_min_version('1.4.0622'),
                          '5.9.2')

    def test_get_client_min_version(self):
        # Unexisting version
        self.assertRaises(MissingUpdateSiteInfo,
                          self.updater.get_client_min_version, '5.6')
        self.assertEquals(self.updater.get_client_min_version('5.8'),
                          '1.2.0110')
        self.assertEquals(self.updater.get_client_min_version('5.9.1'),
                          '1.3.0424')
        self.assertEquals(self.updater.get_client_min_version('5.9.2'),
                          '1.3.0424')
        self.assertEquals(self.updater.get_client_min_version('5.9.3'),
                          '1.4.0622')
        self.assertEquals(self.updater.get_client_min_version('5.9.4'),
                          '1.5.0715')

    def test_get_latest_compatible_version(self):
        # No update info available for server version
        self.assertRaises(MissingUpdateSiteInfo,
                          self.updater.get_latest_compatible_version, '5.6')
        # No compatible client version with server version
        self.assertRaises(MissingCompatibleVersion,
                         self.updater.get_latest_compatible_version, '5.9.4')
        # Compatible versions
        self.assertEqual(self.updater.get_latest_compatible_version('5.9.3'),
                         '1.4.0622')
        self.assertEqual(self.updater.get_latest_compatible_version('5.9.2'),
                         '1.4.0622')
        self.assertEqual(self.updater.get_latest_compatible_version('5.9.1'),
                         '1.3.0524')
        self.assertEqual(self.updater.get_latest_compatible_version('5.8'),
                         '1.3.0424')

    def test_get_update_status(self):
        # No update info available (missing client version info)
        status = self.updater.get_update_status('1.2.0207', '5.9.3')
        self.assertEquals(status, (UPDATE_STATUS_MISSING_INFO, None))

        # No update info available (missing server version info)
        status = self.updater.get_update_status('1.3.0424', '5.6')
        self.assertEquals(status, (UPDATE_STATUS_MISSING_INFO, None))

        # No compatible client version with server version
        status = self.updater.get_update_status('1.4.0622', '5.9.4')
        self.assertEquals(status, (UPDATE_STATUS_MISSING_VERSION, None))

        # Upgraded needed
        status = self.updater.get_update_status('1.3.0424', '5.9.3')
        self.assertEquals(status, (UPDATE_STATUS_UPGRADE_NEEDED, '1.4.0622'))
        status = self.updater.get_update_status('1.3.0524', '5.9.3')
        self.assertEquals(status, (UPDATE_STATUS_UPGRADE_NEEDED, '1.4.0622'))

        # Downgrade needed
        status = self.updater.get_update_status('1.3.0524', '5.8')
        self.assertEquals(status, (UPDATE_STATUS_DOWNGRADE_NEEDED, '1.3.0424'))
        status = self.updater.get_update_status('1.4.0622', '5.8')
        self.assertEquals(status, (UPDATE_STATUS_DOWNGRADE_NEEDED, '1.3.0424'))
        status = self.updater.get_update_status('1.4.0622', '5.8')
        self.assertEquals(status, (UPDATE_STATUS_DOWNGRADE_NEEDED, '1.3.0424'))
        status = self.updater.get_update_status('1.4.0622', '5.9.1')
        self.assertEquals(status, (UPDATE_STATUS_DOWNGRADE_NEEDED, '1.3.0524'))

        # Upgrade available
        status = self.updater.get_update_status('1.3.0424', '5.9.1')
        self.assertEquals(status,
                          (UPDATE_STATUS_UPDATE_AVAILABLE, '1.3.0524'))
        status = self.updater.get_update_status('1.3.0424', '5.9.2')
        self.assertEquals(status,
                          (UPDATE_STATUS_UPDATE_AVAILABLE, '1.4.0622'))
        status = self.updater.get_update_status('1.3.0524', '5.9.2')
        self.assertEquals(status,
                          (UPDATE_STATUS_UPDATE_AVAILABLE, '1.4.0622'))
        status = self.updater.get_update_status('1.3.0524', '5.9.3')

        # Up-to-date
        status = self.updater.get_update_status('1.3.0424', '5.8')
        self.assertEquals(status,
                          (UPDATE_STATUS_UP_TO_DATE, None))
        status = self.updater.get_update_status('1.3.0524', '5.9.1')
        self.assertEquals(status,
                          (UPDATE_STATUS_UP_TO_DATE, None))
        status = self.updater.get_update_status('1.4.0622', '5.9.2')
        self.assertEquals(status,
                          (UPDATE_STATUS_UP_TO_DATE, None))
        status = self.updater.get_update_status('1.4.0622', '5.9.3')
        self.assertEquals(status,
                          (UPDATE_STATUS_UP_TO_DATE, None))
Beispiel #2
0
class TestUpdater(unittest.TestCase):
    def setUp(self):
        appdir = 'nxdrive/tests/resources/esky_app'
        version_finder = 'nxdrive/tests/resources/esky_versions'
        self.esky_app = MockEsky(appdir, version_finder=version_finder)
        self.updater = AppUpdater(esky_app=self.esky_app,
                                  local_update_site=True)

    def test_version_compare(self):
        # Compare server versions
        # Releases
        self.assertEquals(version_compare('5.9.3', '5.9.3'), 0)
        self.assertEquals(version_compare('5.9.3', '5.9.2'), 1)
        self.assertEquals(version_compare('5.9.2', '5.9.3'), -1)
        self.assertEquals(version_compare('5.9.3', '5.8'), 1)
        self.assertEquals(version_compare('5.8', '5.6.0'), 1)
        self.assertEquals(version_compare('5.9.1', '5.9.0.1'), 1)
        self.assertEquals(version_compare('6.0', '5.9.3'), 1)
        self.assertEquals(version_compare('5.10', '5.1.2'), 1)

        # Date-based
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.9.4-I20140415_0120'), 0)
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.9.4-I20140410_0120'), 1)
        self.assertEquals(
            version_compare('5.9.4-I20140515_0120', '5.9.4-I20140415_0120'), 1)
        self.assertEquals(
            version_compare('5.9.4-I20150102_0120', '5.9.4-I20143112_0120'), 1)
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.9.3-I20140415_0120'), 1)

        # Releases and date-based
        self.assertEquals(version_compare('5.9.4-I20140415_0120', '5.9.3'), 1)
        self.assertEquals(version_compare('5.9.4-I20140415_0120', '5.9.4'), -1)
        self.assertEquals(version_compare('5.9.4-I20140415_0120', '5.9.5'), -1)

        self.assertEquals(version_compare('5.9.3', '5.9.4-I20140415_0120'), -1)
        self.assertEquals(version_compare('5.9.4', '5.9.4-I20140415_0120'), 1)
        self.assertEquals(version_compare('5.9.5', '5.9.4-I20140415_0120'), 1)

        # Snapshots
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.4-SNAPSHOT'),
                          0)
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.3-SNAPSHOT'),
                          1)
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.8-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.9.3-SNAPSHOT', '5.9.4-SNAPSHOT'),
                          -1)
        self.assertEquals(version_compare('5.8-SNAPSHOT', '5.9.4-SNAPSHOT'),
                          -1)

        # Releases and snapshots
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.3'), 1)
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.4'), -1)
        self.assertEquals(version_compare('5.9.4-SNAPSHOT', '5.9.5'), -1)

        self.assertEquals(version_compare('5.9.3', '5.9.4-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.9.4', '5.9.4-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.9.5', '5.9.4-SNAPSHOT'), 1)

        # Date-based and snapshots
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.9.3-SNAPSHOT'), 1)
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.9.5-SNAPSHOT'), -1)
        self.assertEquals(
            version_compare('5.9.3-SNAPSHOT', '5.9.4-I20140415_0120'), -1)
        self.assertEquals(
            version_compare('5.9.5-SNAPSHOT', '5.9.4-I20140415_0120'), 1)
        # Can't decide, consider as equal
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.9.4-SNAPSHOT'), 0)
        self.assertEquals(
            version_compare('5.9.4-SNAPSHOT', '5.9.4-I20140415_0120'), 0)

        # Hotfixes
        self.assertEquals(version_compare('5.8.0-HF14', '5.8.0-HF14'), 0)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8.0-HF13'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8.0-HF15'), -1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.6.0-HF35'), 1)
        self.assertEquals(version_compare('5.6.0-H35', '5.8.0-HF14'), -1)

        # Releases and hotfixes
        self.assertEquals(version_compare('5.8.0-HF14', '5.6'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.9.1'), -1)

        self.assertEquals(version_compare('5.6', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.8', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.9.1', '5.8.0-HF14'), 1)

        # Date-based and hotfixes
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.8.0-HF14'), 1)
        self.assertEquals(
            version_compare('5.8.1-I20140415_0120', '5.8.0-HF14'), 1)
        self.assertEquals(
            version_compare('5.8.0-I20140415_0120', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.8-I20140415_0120', '5.8.0-HF14'),
                          -1)
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.10.0-HF01'), -1)

        self.assertEquals(
            version_compare('5.8.0-HF14', '5.9.4-I20140415_0120'), -1)
        self.assertEquals(
            version_compare('5.8.0-HF14', '5.8.1-I20140415_0120'), -1)
        self.assertEquals(
            version_compare('5.8.0-HF14', '5.8.0-I20140415_0120'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8-I20140415_0120'),
                          1)
        self.assertEquals(
            version_compare('5.10.0-HF01', '5.9.4-I20140415_0120'), 1)

        # Snaphsots and hotfixes
        self.assertEquals(version_compare('5.8.0-HF14', '5.7.1-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8.0-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.8-SNAPSHOT'), 1)
        self.assertEquals(version_compare('5.8.0-HF14', '5.9.1-SNAPSHOT'), -1)

        self.assertEquals(version_compare('5.7.1-SNAPSHOT', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.8.0-SNAPSHOT', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.8-SNAPSHOT', '5.8.0-HF14'), -1)
        self.assertEquals(version_compare('5.9.1-SNAPSHOT', '5.8.0-HF14'), 1)

        # Snapshot hotfixes
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.8.0-HF14-SNAPSHOT'), 0)
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.8.0-HF13-SNAPSHOT'), 1)
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.8.0-HF15-SNAPSHOT'), -1)
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.6.0-HF35-SNAPSHOT'), 1)
        self.assertEquals(
            version_compare('5.6.0-H35-SNAPSHOT', '5.8.0-HF14-SNAPSHOT'), -1)

        # Releases and snapshot hotfixes
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.6'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.8'), 1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.9.1'), -1)

        self.assertEquals(version_compare('5.6', '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.8', '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(version_compare('5.9.1', '5.8.0-HF14-SNAPSHOT'), 1)

        # Date-based and snapshot hotfixes
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.8.0-HF14-SNAPSHOT'), 1)
        self.assertEquals(
            version_compare('5.8.0-I20140415_0120', '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(
            version_compare('5.9.4-I20140415_0120', '5.10.0-HF01-SNAPSHOT'),
            -1)

        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.9.4-I20140415_0120'), -1)
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.8.0-I20140415_0120'), 1)
        self.assertEquals(
            version_compare('5.10.0-HF01-SNAPSHOT', '5.9.4-I20140415_0120'), 1)

        # Snaphsots and snapshot hotfixes
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.7.1-SNAPSHOT'), 1)
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.8-SNAPSHOT'), 1)
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.8.0-SNAPSHOT'), 1)
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.9.1-SNAPSHOT'), -1)

        self.assertEquals(
            version_compare('5.7.1-SNAPSHOT', '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(
            version_compare('5.8-SNAPSHOT', '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(
            version_compare('5.8.0-SNAPSHOT', '5.8.0-HF14-SNAPSHOT'), -1)
        self.assertEquals(
            version_compare('5.9.1-SNAPSHOT', '5.8.0-HF14-SNAPSHOT'), 1)

        # Hotfixes and snapshot hotfixes
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.6.0-HF35'),
                          1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.8.0-HF13'),
                          1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.8.0-HF14'),
                          -1)
        self.assertEquals(version_compare('5.8.0-HF14-SNAPSHOT', '5.8.0-HF15'),
                          -1)
        self.assertEquals(
            version_compare('5.8.0-HF14-SNAPSHOT', '5.10.0-HF01'), -1)

        # Compare client versions
        self.assertEquals(version_compare('0.1', '1.0'), -1)
        self.assertEquals(version_compare('1.0', '1.0'), 0)
        self.assertEquals(version_compare('1.3.0424', '1.3.0424'), 0)
        self.assertEquals(version_compare('1.3.0524', '1.3.0424'), 1)
        self.assertEquals(version_compare('1.4', '1.3.0524'), 1)
        self.assertEquals(version_compare('1.4.0622', '1.3.0524'), 1)
        self.assertEquals(version_compare('1.10', '1.1.2'), 1)
        self.assertEquals(version_compare('2.1.0528', '1.10'), 1)

    def test_get_active_version(self):
        # Active version is None because Esky instance is built from a
        # directory, see Esky._init_from_appdir
        self.assertIsNone(self.updater.get_active_version())

    def test_get_current_latest_version(self):
        self.assertEquals(self.updater.get_current_latest_version(),
                          '1.3.0424')

    def test_find_versions(self):
        versions = self.updater.find_versions()
        self.assertEquals(versions, ['1.3.0524', '1.4.0622'])

    def test_get_server_min_version(self):
        # Unexisting version
        self.assertRaises(MissingUpdateSiteInfo,
                          self.updater.get_server_min_version, '4.6.2012')
        self.assertEquals(self.updater.get_server_min_version('1.3.0424'),
                          '5.8')
        self.assertEquals(self.updater.get_server_min_version('1.3.0524'),
                          '5.9.1')
        self.assertEquals(self.updater.get_server_min_version('1.4.0622'),
                          '5.9.2')

    def test_get_client_min_version(self):
        # Unexisting version
        self.assertRaises(MissingUpdateSiteInfo,
                          self.updater.get_client_min_version, '5.6')
        self.assertEquals(self.updater.get_client_min_version('5.8'),
                          '1.2.0110')
        self.assertEquals(self.updater.get_client_min_version('5.9.1'),
                          '1.3.0424')
        self.assertEquals(self.updater.get_client_min_version('5.9.2'),
                          '1.3.0424')
        self.assertEquals(self.updater.get_client_min_version('5.9.3'),
                          '1.4.0622')
        self.assertEquals(self.updater.get_client_min_version('5.9.4'),
                          '1.5.0715')

    def test_get_latest_compatible_version(self):
        # No update info available for server version
        self.assertRaises(MissingUpdateSiteInfo,
                          self.updater.get_latest_compatible_version, '5.6')
        # No compatible client version with server version
        self.assertRaises(MissingCompatibleVersion,
                          self.updater.get_latest_compatible_version, '5.9.4')
        # Compatible versions
        self.assertEqual(self.updater.get_latest_compatible_version('5.9.3'),
                         '1.4.0622')
        self.assertEqual(self.updater.get_latest_compatible_version('5.9.2'),
                         '1.4.0622')
        self.assertEqual(self.updater.get_latest_compatible_version('5.9.1'),
                         '1.3.0524')
        self.assertEqual(self.updater.get_latest_compatible_version('5.8'),
                         '1.3.0424')

    def test_get_update_status(self):
        # No update info available (missing client version info)
        status = self.updater.get_update_status('1.2.0207', '5.9.3')
        self.assertEquals(status, (UPDATE_STATUS_MISSING_INFO, None))

        # No update info available (missing server version info)
        status = self.updater.get_update_status('1.3.0424', '5.6')
        self.assertEquals(status, (UPDATE_STATUS_MISSING_INFO, None))

        # No compatible client version with server version
        status = self.updater.get_update_status('1.4.0622', '5.9.4')
        self.assertEquals(status, (UPDATE_STATUS_MISSING_VERSION, None))

        # Upgraded needed
        status = self.updater.get_update_status('1.3.0424', '5.9.3')
        self.assertEquals(status, (UPDATE_STATUS_UPGRADE_NEEDED, '1.4.0622'))
        status = self.updater.get_update_status('1.3.0524', '5.9.3')
        self.assertEquals(status, (UPDATE_STATUS_UPGRADE_NEEDED, '1.4.0622'))

        # Downgrade needed
        status = self.updater.get_update_status('1.3.0524', '5.8')
        self.assertEquals(status, (UPDATE_STATUS_DOWNGRADE_NEEDED, '1.3.0424'))
        status = self.updater.get_update_status('1.4.0622', '5.8')
        self.assertEquals(status, (UPDATE_STATUS_DOWNGRADE_NEEDED, '1.3.0424'))
        status = self.updater.get_update_status('1.4.0622', '5.8')
        self.assertEquals(status, (UPDATE_STATUS_DOWNGRADE_NEEDED, '1.3.0424'))
        status = self.updater.get_update_status('1.4.0622', '5.9.1')
        self.assertEquals(status, (UPDATE_STATUS_DOWNGRADE_NEEDED, '1.3.0524'))

        # Upgrade available
        status = self.updater.get_update_status('1.3.0424', '5.9.1')
        self.assertEquals(status, (UPDATE_STATUS_UPDATE_AVAILABLE, '1.3.0524'))
        status = self.updater.get_update_status('1.3.0424', '5.9.2')
        self.assertEquals(status, (UPDATE_STATUS_UPDATE_AVAILABLE, '1.4.0622'))
        status = self.updater.get_update_status('1.3.0524', '5.9.2')
        self.assertEquals(status, (UPDATE_STATUS_UPDATE_AVAILABLE, '1.4.0622'))
        status = self.updater.get_update_status('1.3.0524', '5.9.3')

        # Up-to-date
        status = self.updater.get_update_status('1.3.0424', '5.8')
        self.assertEquals(status, (UPDATE_STATUS_UP_TO_DATE, None))
        status = self.updater.get_update_status('1.3.0524', '5.9.1')
        self.assertEquals(status, (UPDATE_STATUS_UP_TO_DATE, None))
        status = self.updater.get_update_status('1.4.0622', '5.9.2')
        self.assertEquals(status, (UPDATE_STATUS_UP_TO_DATE, None))
        status = self.updater.get_update_status('1.4.0622', '5.9.3')
        self.assertEquals(status, (UPDATE_STATUS_UP_TO_DATE, None))