ws autobahn / use condition variables for stopping test case + add more logging on errors

This commit is contained in:
Benjamin Sergeant 2019-09-04 12:21:54 -07:00
parent 508d372df1
commit f25b2af6eb
2 changed files with 44 additions and 27 deletions

View File

@ -4,6 +4,7 @@ All notable changes to this project will be documented in this file.
## [5.1.9] - 2019-09-03 ## [5.1.9] - 2019-09-03
- ws autobahn / report progress with spdlog::info to get timing info - ws autobahn / report progress with spdlog::info to get timing info
- ws autobahn / use condition variables for stopping test case + add more logging on errors
## [5.1.8] - 2019-09-03 ## [5.1.8] - 2019-09-03

View File

@ -178,7 +178,7 @@ namespace ix
_webSocket.stop(); _webSocket.stop();
} }
void generateReport(const std::string& url) bool generateReport(const std::string& url)
{ {
ix::WebSocket webSocket; ix::WebSocket webSocket;
std::string reportUrl(url); std::string reportUrl(url);
@ -186,14 +186,16 @@ namespace ix
webSocket.setUrl(reportUrl); webSocket.setUrl(reportUrl);
webSocket.disableAutomaticReconnection(); webSocket.disableAutomaticReconnection();
std::atomic<bool> done(false); std::atomic<bool> success(true);
std::condition_variable condition;
webSocket.setOnMessageCallback( webSocket.setOnMessageCallback(
[&done](const ix::WebSocketMessagePtr& msg) [&condition, &success](const ix::WebSocketMessagePtr& msg)
{ {
if (msg->type == ix::WebSocketMessageType::Close) if (msg->type == ix::WebSocketMessageType::Close)
{ {
std::cerr << "Report generated" << std::endl; std::cerr << "Report generated" << std::endl;
done = true; condition.notify_one();
} }
else if (msg->type == ix::WebSocketMessageType::Error) else if (msg->type == ix::WebSocketMessageType::Error)
{ {
@ -203,18 +205,24 @@ namespace ix
ss << "Wait time(ms): " << msg->errorInfo.wait_time << std::endl; ss << "Wait time(ms): " << msg->errorInfo.wait_time << std::endl;
ss << "HTTP Status: " << msg->errorInfo.http_status << std::endl; ss << "HTTP Status: " << msg->errorInfo.http_status << std::endl;
std::cerr << ss.str() << std::endl; std::cerr << ss.str() << std::endl;
success = false;
} }
} }
); );
webSocket.start();
while (!done) webSocket.start();
std::mutex mutex;
std::unique_lock<std::mutex> lock(mutex);
condition.wait(lock);
webSocket.stop();
if (!success)
{ {
std::chrono::duration<double, std::milli> duration(10); spdlog::error("Cannot generate report at url {}", reportUrl);
std::this_thread::sleep_for(duration);
} }
webSocket.stop(); return success;
} }
int getTestCaseCount(const std::string& url) int getTestCaseCount(const std::string& url)
@ -225,15 +233,15 @@ namespace ix
webSocket.setUrl(caseCountUrl); webSocket.setUrl(caseCountUrl);
webSocket.disableAutomaticReconnection(); webSocket.disableAutomaticReconnection();
int count = 0; int count = -1;
std::condition_variable condition;
std::atomic<bool> done(false);
webSocket.setOnMessageCallback( webSocket.setOnMessageCallback(
[&done, &count](const ix::WebSocketMessagePtr& msg) [&condition, &count](const ix::WebSocketMessagePtr& msg)
{ {
if (msg->type == ix::WebSocketMessageType::Close) if (msg->type == ix::WebSocketMessageType::Close)
{ {
done = true; condition.notify_one();
} }
else if (msg->type == ix::WebSocketMessageType::Error) else if (msg->type == ix::WebSocketMessageType::Error)
{ {
@ -243,6 +251,8 @@ namespace ix
ss << "Wait time(ms): " << msg->errorInfo.wait_time << std::endl; ss << "Wait time(ms): " << msg->errorInfo.wait_time << std::endl;
ss << "HTTP Status: " << msg->errorInfo.http_status << std::endl; ss << "HTTP Status: " << msg->errorInfo.http_status << std::endl;
std::cerr << ss.str() << std::endl; std::cerr << ss.str() << std::endl;
condition.notify_one();
} }
else if (msg->type == ix::WebSocketMessageType::Message) else if (msg->type == ix::WebSocketMessageType::Message)
{ {
@ -253,16 +263,18 @@ namespace ix
} }
} }
); );
webSocket.start(); webSocket.start();
std::mutex mutex;
while (!done) std::unique_lock<std::mutex> lock(mutex);
{ condition.wait(lock);
std::chrono::duration<double, std::milli> duration(10);
std::this_thread::sleep_for(duration);
}
webSocket.stop(); webSocket.stop();
if (count == -1)
{
spdlog::error("Cannot retrieve test case count at url {}", caseCountUrl);
}
return count; return count;
} }
@ -271,12 +283,18 @@ namespace ix
// //
int ws_autobahn_main(const std::string& url, bool quiet) int ws_autobahn_main(const std::string& url, bool quiet)
{ {
int N = getTestCaseCount(url); int testCasesCount = getTestCaseCount(url);
std::cerr << "Test cases count: " << N << std::endl; std::cerr << "Test cases count: " << testCasesCount << std::endl;
N++; if (testCasesCount == -1)
{
spdlog::error("Cannot retrieve test case count at url {}", url);
return 1;
}
for (int i = 1 ; i < N; ++i) testCasesCount++;
for (int i = 1 ; i < testCasesCount; ++i)
{ {
spdlog::info("Execute test case {}", i); spdlog::info("Execute test case {}", i);
@ -294,9 +312,7 @@ namespace ix
testCase.run(); testCase.run();
} }
generateReport(url); return generateReport(url) ? 0 : 1;
return 0;
} }
} }