|
4 | 4 |
|
5 | 5 | from cfgm_common.tests import test_common |
6 | 6 | import gevent |
7 | | -from vnc_api.vnc_api import NoIdError, RouteTargetList |
| 7 | +from vnc_api.vnc_api import GlobalSystemConfig, NoIdError, RouteTargetList |
8 | 8 | from vnc_cfg_api_server import db_manage |
9 | 9 |
|
| 10 | +from schema_transformer.db import SchemaTransformerDB |
10 | 11 | from schema_transformer.resources.routing_instance import RoutingInstanceST |
11 | 12 | from .test_case import retries, STTestCase |
12 | 13 | from .test_policy import VerifyPolicy |
@@ -87,6 +88,52 @@ def wait_for_route_target(self, vn_obj): |
87 | 88 | return self._vnc_lib.route_target_read( |
88 | 89 | ri_obj.get_route_target_refs()[0]['to']) |
89 | 90 |
|
| 91 | + def test_asn_change_when_zk_rt_missing(self): |
| 92 | + vn_obj = self.create_virtual_network('vn_for_asn' + self.id(), |
| 93 | + '10.0.0.0/24') |
| 94 | + ri_fq_name = vn_obj.fq_name + [vn_obj.fq_name[-1]] |
| 95 | + rt_obj = self.wait_for_route_target(vn_obj) |
| 96 | + rt_id_str = "%(#)010d" % { |
| 97 | + '#': int(rt_obj.get_fq_name_str().split(':')[-1])} |
| 98 | + db_checker = db_manage.DatabaseChecker( |
| 99 | + *db_manage._parse_args('check --cluster_id %s' % self._cluster_id)) |
| 100 | + path = '%s%s%s' % ( |
| 101 | + self._cluster_id, db_checker.BASE_RTGT_ID_ZK_PATH, rt_id_str) |
| 102 | + self.assertEqual(db_checker._zk_client.get(path)[0], |
| 103 | + ':'.join(ri_fq_name)) |
| 104 | + with db_checker._zk_client.patch_path(path): |
| 105 | + errors = db_checker.check_route_targets_id() |
| 106 | + error_types = [type(x) for x in errors] |
| 107 | + self.assertIn(db_manage.SchemaRTgtIdExtraError, error_types) |
| 108 | + self.assertIn(db_manage.ConfigRTgtIdExtraError, error_types) |
| 109 | + |
| 110 | + free_rt_orig = SchemaTransformerDB.free_route_target |
| 111 | + |
| 112 | + # Flag to be used to check free_route_target function failure |
| 113 | + has_test_failed = [False] |
| 114 | + |
| 115 | + def mock_free_rt(*args, **kwargs): |
| 116 | + try: |
| 117 | + return free_rt_orig(*args, **kwargs) |
| 118 | + except Exception: |
| 119 | + has_test_failed[0] = True |
| 120 | + |
| 121 | + SchemaTransformerDB.free_route_target = mock_free_rt |
| 122 | + gsc = self._vnc_lib.global_system_config_read( |
| 123 | + GlobalSystemConfig().fq_name) |
| 124 | + |
| 125 | + gsc.enable_4byte_as = True |
| 126 | + gsc.autonomous_system = 81000 |
| 127 | + self._vnc_lib.global_system_config_update(gsc) |
| 128 | + |
| 129 | + # Wait for Schema_tranformer to process ASN change |
| 130 | + gevent.sleep(10) |
| 131 | + SchemaTransformerDB.free_route_target = free_rt_orig |
| 132 | + if has_test_failed[0]: |
| 133 | + self.fail("free_route_target failed in schema transformer") |
| 134 | + |
| 135 | + # test_db_manage_zk_route_target_missing |
| 136 | + |
90 | 137 | def test_db_manage_zk_route_target_missing(self): |
91 | 138 | vn_obj = self.create_virtual_network('vn_' + self.id(), '10.0.0.0/24') |
92 | 139 | ri_fq_name = vn_obj.fq_name + [vn_obj.fq_name[-1]] |
|
0 commit comments