|
25 | 25 | def get_sonic_version_info_mlnx():
|
26 | 26 | return {'asic_type': 'mellanox'}
|
27 | 27 |
|
| 28 | +def version_greater_than(v1, v2): |
| 29 | + # Return True when v1 is later than v2. Otherwise return False. |
| 30 | + if 'master' in v1: |
| 31 | + if 'master' in v2: |
| 32 | + # both are master versions, directly compare. |
| 33 | + return v1 > v2 |
| 34 | + |
| 35 | + # v1 is master verson and v2 is not, v1 is higher |
| 36 | + return True |
| 37 | + |
| 38 | + if 'master' in v2: |
| 39 | + # v2 is master version and v1 is not. |
| 40 | + return False |
| 41 | + |
| 42 | + s1 = v1.split('_') |
| 43 | + s2 = v2.split('_') |
| 44 | + if len(s1) == 3: |
| 45 | + # new format version_<barnch>_<ver> |
| 46 | + if len(s2) == 3: |
| 47 | + # Both are new format version string |
| 48 | + return v1 > v2 |
| 49 | + return True |
| 50 | + |
| 51 | + if len(s2) == 3: |
| 52 | + # v2 is new format and v1 is old format. |
| 53 | + return False |
| 54 | + |
| 55 | + # Both are old format version_a_b_c |
| 56 | + return v1 > v2 |
| 57 | + |
28 | 58 |
|
29 | 59 | def advance_version_for_expected_database(migrated_db, expected_db, last_interested_version):
|
30 | 60 | # In case there are new db versions greater than the latest one that mellanox buffer migrator is interested,
|
31 | 61 | # we just advance the database version in the expected database to make the test pass
|
32 | 62 | expected_dbversion = expected_db.get_entry('VERSIONS', 'DATABASE')
|
33 | 63 | dbmgtr_dbversion = migrated_db.get_entry('VERSIONS', 'DATABASE')
|
34 | 64 | if expected_dbversion and dbmgtr_dbversion:
|
35 |
| - if expected_dbversion['VERSION'] == last_interested_version and dbmgtr_dbversion['VERSION'] > expected_dbversion['VERSION']: |
| 65 | + if expected_dbversion['VERSION'] == last_interested_version and version_greater_than(dbmgtr_dbversion['VERSION'], expected_dbversion['VERSION']): |
36 | 66 | expected_dbversion['VERSION'] = dbmgtr_dbversion['VERSION']
|
37 | 67 | expected_db.set_entry('VERSIONS', 'DATABASE', expected_dbversion)
|
38 | 68 |
|
39 | 69 |
|
| 70 | +class TestVersionComparison(object): |
| 71 | + @classmethod |
| 72 | + def setup_class(cls): |
| 73 | + cls.version_comp_list = [ |
| 74 | + # Old format v.s old format |
| 75 | + { 'v1' : 'version_1_0_1', 'v2' : 'version_1_0_2', 'result' : False }, |
| 76 | + { 'v1' : 'version_1_0_2', 'v2' : 'version_1_0_1', 'result' : True }, |
| 77 | + { 'v1' : 'version_1_0_1', 'v2' : 'version_2_0_1', 'result' : False }, |
| 78 | + { 'v1' : 'version_2_0_1', 'v2' : 'version_1_0_1', 'result' : True }, |
| 79 | + # New format v.s old format |
| 80 | + { 'v1' : 'version_1_0_1', 'v2' : 'version_202311_01', 'result' : False }, |
| 81 | + { 'v1' : 'version_202311_01', 'v2' : 'version_1_0_1', 'result' : True }, |
| 82 | + { 'v1' : 'version_1_0_1', 'v2' : 'version_master_01', 'result' : False }, |
| 83 | + { 'v1' : 'version_master_01', 'v2' : 'version_1_0_1', 'result' : True }, |
| 84 | + # New format v.s new format |
| 85 | + { 'v1' : 'version_202311_01', 'v2' : 'version_202311_02', 'result' : False }, |
| 86 | + { 'v1' : 'version_202311_02', 'v2' : 'version_202311_01', 'result' : True }, |
| 87 | + { 'v1' : 'version_202305_01', 'v2' : 'version_202311_01', 'result' : False }, |
| 88 | + { 'v1' : 'version_202311_01', 'v2' : 'version_202305_01', 'result' : True }, |
| 89 | + { 'v1' : 'version_202311_01', 'v2' : 'version_master_01', 'result' : False }, |
| 90 | + { 'v1' : 'version_master_01', 'v2' : 'version_202311_01', 'result' : True }, |
| 91 | + { 'v1' : 'version_master_01', 'v2' : 'version_master_02', 'result' : False }, |
| 92 | + { 'v1' : 'version_master_02', 'v2' : 'version_master_01', 'result' : True }, |
| 93 | + ] |
| 94 | + |
| 95 | + def test_version_comparison(self): |
| 96 | + for rec in self.version_comp_list: |
| 97 | + assert version_greater_than(rec['v1'], rec['v2']) == rec['result'], 'test failed: {}'.format(rec) |
| 98 | + |
| 99 | + |
40 | 100 | class TestMellanoxBufferMigrator(object):
|
41 | 101 | @classmethod
|
42 | 102 | def setup_class(cls):
|
@@ -671,5 +731,6 @@ def test_fast_reboot_upgrade_to_4_0_3(self):
|
671 | 731 | dbmgtr = db_migrator.DBMigrator(None)
|
672 | 732 | dbmgtr.migrate()
|
673 | 733 | expected_db = self.mock_dedicated_config_db(db_after_migrate)
|
| 734 | + advance_version_for_expected_database(dbmgtr.configDB, expected_db.cfgdb, 'version_4_0_3') |
674 | 735 | assert not self.check_config_db(dbmgtr.configDB, expected_db.cfgdb)
|
675 |
| - assert dbmgtr.CURRENT_VERSION == expected_db.cfgdb.get_entry('VERSIONS', 'DATABASE')['VERSION'] |
| 736 | + assert dbmgtr.CURRENT_VERSION == expected_db.cfgdb.get_entry('VERSIONS', 'DATABASE')['VERSION'], '{} {}'.format(dbmgtr.CURRENT_VERSION, dbmgtr.get_version()) |
0 commit comments