Allow to clear an specific test case
[anna.git] / source / testing / TestManager.cpp
index e90d20d..b83f8d4 100644 (file)
@@ -299,6 +299,36 @@ TestCase *TestManager::getTestCase(unsigned int id, const std::string &descripti
   return result;
 }
 
+bool TestManager::clearTestCase(std::string &result, unsigned int id) {
+  result = "";
+
+  if (!tests()) {
+    result = "There are not programmed test cases to be removed";
+    return false;
+  }
+
+  test_pool_it it = ((id != -1) ? a_testPool.find(id) : a_currentTestIt);
+  if (it == a_testPool.end()) {
+    result = "Test case id provided not found";
+    return false;
+  }
+
+  if (!it->second->safeToClear()) {
+    result = "Test case id provided has running-thread steps. Check for stuck external procedures or try later.";
+    return false;
+  }
+
+  a_testPool.erase(it);
+
+  auto key1_it = a_key1TestCaseMap.find(it->second->getKey());
+  if (key1_it != a_key1TestCaseMap.end()) a_key1TestCaseMap.erase(key1_it);
+  auto key2_it = a_key2TestCaseMap.find(it->second->getKey());
+  if (key2_it != a_key2TestCaseMap.end()) a_key2TestCaseMap.erase(key2_it);
+
+  result = "Provided test case has been dropped";
+  return true;
+}
+
 bool TestManager::clearPool(std::string &result) {
 
   result = "";