mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-14 08:50:26 +00:00
Merge pull request #16762 from LabNConsulting/chopps/diag-diff
improve @retry decorator
This commit is contained in:
commit
63148da2a6
@ -1847,7 +1847,13 @@ def retry(retry_timeout, initial_wait=0, expected=True, diag_pct=0.75):
|
|||||||
while True:
|
while True:
|
||||||
seconds_left = (retry_until - datetime.now()).total_seconds()
|
seconds_left = (retry_until - datetime.now()).total_seconds()
|
||||||
try:
|
try:
|
||||||
ret = func(*args, **kwargs)
|
try:
|
||||||
|
ret = func(*args, seconds_left=seconds_left, **kwargs)
|
||||||
|
except TypeError as error:
|
||||||
|
if "seconds_left" not in str(error):
|
||||||
|
raise
|
||||||
|
ret = func(*args, **kwargs)
|
||||||
|
|
||||||
logger.debug("Function returned %s", ret)
|
logger.debug("Function returned %s", ret)
|
||||||
|
|
||||||
negative_result = ret is False or is_string(ret)
|
negative_result = ret is False or is_string(ret)
|
||||||
@ -1868,7 +1874,7 @@ def retry(retry_timeout, initial_wait=0, expected=True, diag_pct=0.75):
|
|||||||
return saved_failure
|
return saved_failure
|
||||||
|
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
logger.info("Function raised exception: %s", str(error))
|
logger.info('Function raised exception: "%s"', repr(error))
|
||||||
ret = error
|
ret = error
|
||||||
|
|
||||||
if seconds_left < 0 and saved_failure:
|
if seconds_left < 0 and saved_failure:
|
||||||
|
@ -63,7 +63,7 @@ def disable_debug(router):
|
|||||||
|
|
||||||
|
|
||||||
@retry(retry_timeout=30, initial_wait=1)
|
@retry(retry_timeout=30, initial_wait=1)
|
||||||
def _do_oper_test(tgen, qr):
|
def _do_oper_test(tgen, qr, seconds_left=None):
|
||||||
r1 = tgen.gears["r1"].net
|
r1 = tgen.gears["r1"].net
|
||||||
|
|
||||||
qcmd = (
|
qcmd = (
|
||||||
@ -80,6 +80,8 @@ def _do_oper_test(tgen, qr):
|
|||||||
expected = open(qr[1], encoding="ascii").read()
|
expected = open(qr[1], encoding="ascii").read()
|
||||||
output = r1.cmd_nostatus(qcmd.format(qr[0], qr[2] if len(qr) > 2 else ""))
|
output = r1.cmd_nostatus(qcmd.format(qr[0], qr[2] if len(qr) > 2 else ""))
|
||||||
|
|
||||||
|
diag = logging.debug if seconds_left else logging.warning
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ojson = json.loads(output)
|
ojson = json.loads(output)
|
||||||
except json.decoder.JSONDecodeError as error:
|
except json.decoder.JSONDecodeError as error:
|
||||||
@ -92,31 +94,31 @@ def _do_oper_test(tgen, qr):
|
|||||||
logging.error(
|
logging.error(
|
||||||
"Error decoding json exp result: %s\noutput:\n%s", error, expected
|
"Error decoding json exp result: %s\noutput:\n%s", error, expected
|
||||||
)
|
)
|
||||||
logging.warning("FILE: {}".format(qr[1]))
|
diag("FILE: {}".format(qr[1]))
|
||||||
raise
|
raise
|
||||||
|
|
||||||
if dd_json_cmp:
|
if dd_json_cmp:
|
||||||
cmpout = json_cmp(ojson, ejson, exact_match=True)
|
cmpout = json_cmp(ojson, ejson, exact_match=True)
|
||||||
if cmpout:
|
if cmpout:
|
||||||
logging.warning(
|
diag(
|
||||||
"-------DIFF---------\n%s\n---------DIFF----------",
|
"-------DIFF---------\n%s\n---------DIFF----------",
|
||||||
pprint.pformat(cmpout),
|
pprint.pformat(cmpout),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
cmpout = tt_json_cmp(ojson, ejson, exact=True)
|
cmpout = tt_json_cmp(ojson, ejson, exact=True)
|
||||||
if cmpout:
|
if cmpout:
|
||||||
logging.warning(
|
diag(
|
||||||
"-------EXPECT--------\n%s\n------END-EXPECT------",
|
"-------EXPECT--------\n%s\n------END-EXPECT------",
|
||||||
json.dumps(ejson, indent=4),
|
json.dumps(ejson, indent=4),
|
||||||
)
|
)
|
||||||
logging.warning(
|
diag(
|
||||||
"--------GOT----------\n%s\n-------END-GOT--------",
|
"--------GOT----------\n%s\n-------END-GOT--------",
|
||||||
json.dumps(ojson, indent=4),
|
json.dumps(ojson, indent=4),
|
||||||
)
|
)
|
||||||
logging.warning("----diff---\n{}".format(cmpout))
|
diag("----diff---\n{}".format(cmpout))
|
||||||
logging.warning("Command: {}".format(qcmd.format(qr[0], qr[2] if len(qr) > 2 else "")))
|
diag("Command: {}".format(qcmd.format(qr[0], qr[2] if len(qr) > 2 else "")))
|
||||||
logging.warning("File: {}".format(qr[1]))
|
diag("File: {}".format(qr[1]))
|
||||||
assert cmpout is None
|
return cmpout
|
||||||
|
|
||||||
|
|
||||||
def do_oper_test(tgen, query_results):
|
def do_oper_test(tgen, query_results):
|
||||||
|
Loading…
Reference in New Issue
Block a user