Freeze HA scoring and document reported production failover
This commit is contained in:
@@ -41,13 +41,19 @@ for path in (REFERENCE, ROOT / 'reference/managed-container.pre-refactor-5eae1f3
|
||||
assert hashlib.sha256(path.read_bytes()).hexdigest() == expected_hash
|
||||
print('PASS both reference hashes')
|
||||
|
||||
assert functions(SOURCE) == functions('\n'.join(p.read_text() for p in MODULES))
|
||||
current_functions = functions('\n'.join(p.read_text() for p in MODULES))
|
||||
for name, definition in functions(SOURCE).items():
|
||||
assert current_functions[name] == definition, name
|
||||
assert set(current_functions) - set(functions(SOURCE)) == {
|
||||
'mc_promotion_score_set', 'mc_promotion_score_from_monitor',
|
||||
'mc_promotion_monitor', 'mc_promotion_action', 'mc_promotion_validate', 'mc_pg_promotion_eligible',
|
||||
'mc_promotion_metadata', 'mc_pg_standby_observation', 'mc_pg_standby_score',
|
||||
}
|
||||
assert len(functions(SOURCE)) == 29
|
||||
common = (AGENT.parent / 'managed-container.d/common.sh').read_text()
|
||||
defaults = SOURCE[SOURCE.index('OCF_RESKEY_service_user_default='):SOURCE.index('\n###############################################################################\n# Metadata')].strip()
|
||||
assert defaults in common
|
||||
assert SOURCE[SOURCE.index('case "$1" in'):] == AGENT.read_text()[AGENT.read_text().index('case "$1" in'):]
|
||||
print('PASS all 29 function bodies, defaults/globals and dispatcher identical')
|
||||
print('PASS all 29 original function bodies and defaults/globals identical; nine scoring helpers added')
|
||||
|
||||
for path in [AGENT, *MODULES]:
|
||||
subprocess.run(['bash', '-n', str(path)], check=True)
|
||||
@@ -58,11 +64,19 @@ for path in (REFERENCE, AGENT):
|
||||
result = subprocess.run([str(path), 'meta-data'], cwd='/tmp', capture_output=True, text=True)
|
||||
assert result.returncode == 0 and not result.stderr, result
|
||||
metadata.append(result.stdout)
|
||||
assert metadata[0] == metadata[1]
|
||||
extended = ET.fromstring(metadata[1])
|
||||
parameters = extended.find('parameters')
|
||||
added = parameters.find("parameter[@name='disconnected_max_age']")
|
||||
assert added is not None and added.find('content').get('default') == '300'
|
||||
parameters.remove(added)
|
||||
def normalize(element):
|
||||
return (element.tag, element.attrib, (element.text or '').strip(),
|
||||
[normalize(child) for child in element])
|
||||
assert normalize(extended) == normalize(ET.fromstring(metadata[0]))
|
||||
xml = ET.fromstring(metadata[0])
|
||||
assert len(xml.findall('./parameters/parameter')) == 12
|
||||
assert len(xml.findall('./actions/action')) == 8
|
||||
print('PASS metadata byte equality and XML parsing from unrelated cwd')
|
||||
print('PASS original metadata preserved plus freshness parameter and XML parsing from unrelated cwd')
|
||||
|
||||
# Sourcing production modules in a fresh shell tests their real loading order.
|
||||
# No dispatcher executes. All operational boundaries are overridden below.
|
||||
|
||||
Reference in New Issue
Block a user