Skip to content
This repository was archived by the owner on Jan 1, 2024. It is now read-only.

Commit 9b24fba

Browse files
authored
Add consistency test for validate config facts (#403)
Before this patch, it was easy to forget to add new facts to the `validate_config` step. Now there is a test for it.
1 parent 4da59dd commit 9b24fba

File tree

4 files changed

+217
-129
lines changed

4 files changed

+217
-129
lines changed

consistency/test_facts.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
import os
22
import re
3+
import sys
34
import unittest
45

56
import yaml
67

8+
import module_utils.helpers as helpers
9+
10+
sys.modules['ansible.module_utils.helpers'] = helpers
11+
import library.cartridge_validate_config as validate_config
12+
import unit.test_validate_config as test_validate_config
13+
714

815
# This tests protects against inattentive people, who do not completely change the variables list
916

@@ -17,6 +24,7 @@ def setUp(self):
1724
with open(self.defaults_file, 'r') as f:
1825
try:
1926
self.defaults = yaml.safe_load(f)
27+
self.cached_facts_names = self.defaults['cartridge_cached_fact_names_by_target']
2028
except yaml.YAMLError as e:
2129
self.fail("Impossible to parse 'defaults/main.yml': %s" % e)
2230

@@ -32,6 +40,14 @@ def setUp(self):
3240
text = f.read()
3341
self.doc_facts = re.findall(r'\n[*-][^`]*`([^`]+)`', text)
3442

43+
self.validate_config_facts = list(validate_config.SCHEMA.keys())
44+
45+
self.test_validate_config_facts = set()
46+
for params in test_validate_config.PARAMS_BY_TYPES.values():
47+
for param in params:
48+
self.test_validate_config_facts.add(param.split('.')[0].split('[')[0])
49+
self.test_validate_config_facts = list(self.test_validate_config_facts)
50+
3551
self.not_user_facts = [
3652
# Role defaults
3753
'cartridge_role_scenarios',
@@ -73,3 +89,28 @@ def test_doc_facts(self):
7389
sorted(default_names), sorted(self.doc_facts + self.not_user_facts),
7490
'List of facts in defaults and in documentation is different',
7591
)
92+
93+
# If someone added a variable to defaults, but forgot to add it to validate config
94+
def test_validate_config_facts(self):
95+
default_names = list(self.defaults.keys())
96+
97+
self.assertEqual(
98+
sorted(default_names), sorted(self.validate_config_facts + self.not_user_facts),
99+
'List of facts in defaults and in validate config step is different',
100+
)
101+
102+
# If someone added a variable to validate config step, but forgot to add it to cached facts list
103+
def test_validate_config_cached_facts(self):
104+
cached_facts_names = self.cached_facts_names['validate_config']
105+
106+
self.assertEqual(
107+
sorted(self.validate_config_facts), sorted(cached_facts_names),
108+
'List of facts in cached facts and in validate config step is different',
109+
)
110+
111+
# If someone added a variable to validate config step, but forgot to add it to test of validate config
112+
def test_validate_config_test_facts(self):
113+
self.assertEqual(
114+
sorted(self.validate_config_facts), sorted(self.test_validate_config_facts),
115+
'List of facts in validate config step and in test of this step is different',
116+
)

defaults/main.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,17 @@ cartridge_cached_fact_names_by_target:
316316
- cartridge_force_restore
317317
- cartridge_allow_alien_backup
318318
- cartridge_skip_cleanup_on_restore
319+
- cartridge_app_config_path
320+
- cartridge_app_config_upload_http_timeout
321+
- cartridge_app_config_upload_mode
322+
- cartridge_app_config_upload_url
323+
- cartridge_create_user_group_for_tgz
324+
- cartridge_force_advertise_uris_change
325+
- cartridge_force_leader_control_instance
326+
- cartridge_ignore_extra_cluster_instances
327+
- cartridge_ignore_extra_cluster_replicasets
328+
- cartridge_ignore_renamed_replicasets
329+
- cartridge_tdg_token
319330
count_disabled_instances:
320331
- instance_info
321332
- disabled

library/cartridge_validate_config.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,17 @@
3434
'edit_topology_timeout',
3535
'edit_topology_healthy_timeout',
3636
'edit_topology_allow_missed_instances',
37+
'cartridge_app_config_path',
38+
'cartridge_app_config_upload_http_timeout',
39+
'cartridge_app_config_upload_mode',
40+
'cartridge_app_config_upload_url',
41+
'cartridge_create_user_group_for_tgz',
42+
'cartridge_force_advertise_uris_change',
43+
'cartridge_force_leader_control_instance',
44+
'cartridge_ignore_extra_cluster_instances',
45+
'cartridge_ignore_extra_cluster_replicasets',
46+
'cartridge_ignore_renamed_replicasets',
47+
'cartridge_tdg_token',
3748
]
3849

3950
CONFIG_REQUIRED_PARAMS = ['advertise_uri']
@@ -223,6 +234,17 @@
223234
'show_issues': bool,
224235
'wait_cluster_has_no_issues_retries': int,
225236
'wait_cluster_has_no_issues_delay': int,
237+
'cartridge_app_config_path': str,
238+
'cartridge_app_config_upload_http_timeout': int,
239+
'cartridge_app_config_upload_mode': str,
240+
'cartridge_app_config_upload_url': str,
241+
'cartridge_create_user_group_for_tgz': bool,
242+
'cartridge_force_advertise_uris_change': bool,
243+
'cartridge_force_leader_control_instance': bool,
244+
'cartridge_ignore_extra_cluster_instances': bool,
245+
'cartridge_ignore_extra_cluster_replicasets': bool,
246+
'cartridge_ignore_renamed_replicasets': bool,
247+
'cartridge_tdg_token': str,
226248
}
227249

228250

0 commit comments

Comments
 (0)