From 04d6d83ba480ee900fe51a030fb11cac99fc5033 Mon Sep 17 00:00:00 2001 From: Carsten Patzke <carsten.patzke@desy.de> Date: Fri, 17 Apr 2020 22:15:21 +0200 Subject: [PATCH] [Fabric] Strengthen the tests by allowing RecvAny to timeout (for valgrind) --- .../automatic/asapo_fabric/parallel_data_transfer.cpp | 6 +++++- tests/automatic/asapo_fabric/simple_data_transfer.cpp | 6 +++++- tests/automatic/asapo_fabric/timeout_test.cpp | 7 ++++++- tests/automatic/asapo_fabric/wrong_memory_info.cpp | 10 ++++++++-- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/tests/automatic/asapo_fabric/parallel_data_transfer.cpp b/tests/automatic/asapo_fabric/parallel_data_transfer.cpp index fc99295ef..aa8b34547 100644 --- a/tests/automatic/asapo_fabric/parallel_data_transfer.cpp +++ b/tests/automatic/asapo_fabric/parallel_data_transfer.cpp @@ -30,7 +30,11 @@ void ServerChildThread(FabricServer* server, std::atomic<int>* serverTotalReques FabricAddress clientAddress; FabricMessageId messageId; - server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err); + // In order to run the tests more stable. Otherwise a timeout could occurred with valgrind + int tries = 0; + do { + server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err); + } while (err == IOErrorTemplates::kTimeout && tries++ < 2); M_AssertEq(nullptr, err, "server->RecvAny"); M_AssertEq("Hello World", request.message); M_AssertEq(messageId / kEachInstanceRuns, request.data_id); // is client index diff --git a/tests/automatic/asapo_fabric/simple_data_transfer.cpp b/tests/automatic/asapo_fabric/simple_data_transfer.cpp index 5c35f5a2c..d5e4d9bda 100644 --- a/tests/automatic/asapo_fabric/simple_data_transfer.cpp +++ b/tests/automatic/asapo_fabric/simple_data_transfer.cpp @@ -35,7 +35,11 @@ void ServerMasterThread(const std::string& hostname, uint16_t port, char* expect FabricAddress clientAddress; FabricMessageId messageId; - server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err); + // In order to run the tests more stable. Otherwise a timeout could occurred with valgrind + int tries = 0; + do { + server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err); + } while (err == IOErrorTemplates::kTimeout && tries++ < 2); M_AssertEq(nullptr, err, "server->RecvAny"); M_AssertEq(123 + instanceRuns, messageId); M_AssertEq("Hello World", request.message); diff --git a/tests/automatic/asapo_fabric/timeout_test.cpp b/tests/automatic/asapo_fabric/timeout_test.cpp index 0e2ab643b..d71ea1c3a 100644 --- a/tests/automatic/asapo_fabric/timeout_test.cpp +++ b/tests/automatic/asapo_fabric/timeout_test.cpp @@ -29,7 +29,12 @@ void ServerMasterThread(const std::string& hostname, uint16_t port) { int dummyBuffer; FabricAddress clientAddress; FabricMessageId messageId; - server->RecvAny(&clientAddress, &messageId, &dummyBuffer, sizeof(dummyBuffer), &err); + + // In order to run the tests more stable. Otherwise a timeout could occurred with valgrind + int tries = 0; + do { + server->RecvAny(&clientAddress, &messageId, &dummyBuffer, sizeof(dummyBuffer), &err); + } while (err == IOErrorTemplates::kTimeout && tries++ < 2); M_AssertEq(nullptr, err, "server->RecvAny"); server->Send(clientAddress, messageId, &dummyBuffer, sizeof(dummyBuffer), &err); diff --git a/tests/automatic/asapo_fabric/wrong_memory_info.cpp b/tests/automatic/asapo_fabric/wrong_memory_info.cpp index f94fc6c65..76988ddc4 100644 --- a/tests/automatic/asapo_fabric/wrong_memory_info.cpp +++ b/tests/automatic/asapo_fabric/wrong_memory_info.cpp @@ -47,7 +47,10 @@ void ServerMasterThread(const std::string& hostname, uint16_t port) { M_AssertEq(nullptr, err, "server->Send(1)"); // Simulate correct memory details - server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err); + int tries = 0; + do { + server->RecvAny(&clientAddress, &messageId, &request, sizeof(request), &err); + } while (err == IOErrorTemplates::kTimeout && tries++ < 2); M_AssertEq(nullptr, err, "server->RecvAny(2)"); M_AssertEq(2, messageId); server->RdmaWrite(clientAddress, (MemoryRegionDetails*)&request.substream, rdmaBuffer.get(), kRdmaSize, &err); @@ -57,7 +60,10 @@ void ServerMasterThread(const std::string& hostname, uint16_t port) { // Simulate old (unregistered) memory details GenericRequestHeader request2{}; - server->RecvAny(&clientAddress, &messageId, &request2, sizeof(request2), &err); + tries = 0; + do { + server->RecvAny(&clientAddress, &messageId, &request2, sizeof(request2), &err); + } while (err == IOErrorTemplates::kTimeout && tries++ < 2); M_AssertEq(nullptr, err, "server->RecvAny(3)"); M_AssertEq(3, messageId); server->RdmaWrite(clientAddress, (MemoryRegionDetails*)&request.substream, rdmaBuffer.get(), kRdmaSize, &err); -- GitLab