int response, void *data)
{
RequestMonitor *monitor = reinterpret_cast<RequestMonitor*>(data);
- RUNNER_ASSERT_MSG(monitor != nullptr,
- "Bad user data (nullptr) in response callback.");
+ if (!monitor) {
+ RUNNER_FAIL_MSG("Bad user data (nullptr) in response callback.");
+ return;
+ }
auto it = monitor->m_requests.find(checkId);
- RUNNER_ASSERT_MSG(it != monitor->m_requests.end(),
- "Received unexpected callback for request:"
- << "id = " << checkId << ","
- << "response = " << response << ","
- << "cause = " << cause << ".");
+ if (it == monitor->m_requests.end()) {
+ RUNNER_FAIL_MSG("Received unexpected callback for request:"
+ << "id = " << checkId << ","
+ << "response = " << response << ","
+ << "cause = " << cause << ".");
+ return;
+ }
- RUNNER_ASSERT_MSG(cause == it->second.m_expectedCause,
+ //save request data and remove request from monitored requests
+ auto expectedResponse = it->second.m_expectedResponse;
+ auto expectedCause = it->second.m_expectedCause;
+ auto userFunction = it->second.m_userFunction;
+ monitor->m_requests.erase(it);
+
+ RUNNER_ASSERT_MSG(cause == expectedCause,
"Unexpected cause in response callback:"
<< "id = " << checkId << ","
<< "received response = " << response << ","
- << "expected response = " << it->second.m_expectedResponse << ","
+ << "expected response = " << expectedResponse << ","
<< "received cause = " << cause << ","
- << "expected cause = " << it->second.m_expectedCause << ".");
+ << "expected cause = " << expectedCause << ".");
if (cause == CYNARA_CALL_CAUSE_ANSWER)
{
- RUNNER_ASSERT_MSG(response == it->second.m_expectedResponse,
+ RUNNER_ASSERT_MSG(response == expectedResponse,
"Unexpected response in response callback:"
<< "id = " << checkId << ","
<< "received response = " << response << ","
- << "expected response = " << it->second.m_expectedResponse << ","
+ << "expected response = " << expectedResponse << ","
<< "received cause = " << cause << ","
- << "expected cause = " << it->second.m_expectedCause << ".");
+ << "expected cause = " << expectedCause << ".");
}
- if (it->second.m_userFunction)
- it->second.m_userFunction();
-
- monitor->m_requests.erase(it);
+ if (userFunction)
+ userFunction();
}
}// namespace CynaraTestClientAsync