verify_response_with not working on mqtt_response
octathorp opened this issue · 2 comments
Hello.
When calling an external function using "verify_response_with" simply nothing happens (with Tavern 2.0.7), but this was working perfectly with Tavern 1.25.2:
stages:
- name: Send config
mqtt_publish:
topic: "{topic_config:s}"
json: !include json/Config.json
mqtt_response:
topic: "{topic_config_ack:s}"
json:
debug: !anything
status: 1
timeout: 5
verify_response_with:
function: testing_utils:verifySetup
def verifySetup(response):
with open("log.txt", "w") as log:
log.write("test")
File "log.txt" is created when using Tavern 1.25.2 but nothing happens when using 2.0.7 nor 2.0.6.
At the same time, even if I try to refer to a non-existing function, the test simply passes, but with version 1.25.2 this was being checked in runtime:
AttributeError: module 'testing_utils' has no attribute 'verifyNOTSetup'. Did you mean: 'verifySetup'?
Is that a bug or something changed in most recent versions?
Thank you.
Seems to be related with "check_ext_functions" call on response.py;
check_ext_functions(response_block.get("verify_response_with", None))
As multiple mqtt_response checks were implemented response_block turned into a json array containing each one of the response checks:
{
"mqtt_responses": [{
"topic": "mytopic/config/ack",
"json": {
"debug": "debug info",
"status": 1
},
"timeout": 5,
"verify_response_with": {
"function": "testing_utils:verifySetup"
}
}]
}
So simple calling
response_block.get("verify_response_with", None)
will always return "None" as its necessary to first get "mqtt_responses" to get the response checks array, then get the element from the array, then get "verify_response_with";
check_ext_functions(response_block.get("mqtt_responses")[0].get("verify_response_with", None))
For sure, not getting first element in a hardcoded way, but iterating over the array to get every "verify_response_with" block:
mqtt_responses = response_block.get("mqtt_responses")
for mqtt_response in mqtt_responses:
check_ext_functions(mqtt_response.get("verify_response_with", None))
Release in 2.6.0