diff --git a/inference-engine/tests/functional/plugin/shared/include/behavior/infer_request_callback.hpp b/inference-engine/tests/functional/plugin/shared/include/behavior/infer_request_callback.hpp index 99c1aee1013..873fa1b3878 100644 --- a/inference-engine/tests/functional/plugin/shared/include/behavior/infer_request_callback.hpp +++ b/inference-engine/tests/functional/plugin/shared/include/behavior/infer_request_callback.hpp @@ -52,48 +52,6 @@ TEST_P(CallbackTests, canCallSyncAndAsyncWithCompletionCallback) { ASSERT_TRUE(isCalled); } -// test that can wait all callbacks on dtor -TEST_P(CallbackTests, canStartAsyncInsideCompletionCallback) { - // Skip test according to plugin specific disabledTestPatterns() (if any) - SKIP_IF_CURRENT_TEST_IS_DISABLED() - - struct TestUserData { - bool startAsyncOK = false; - int numIsCalled = 0; - }; - TestUserData data; - - // Create CNNNetwork from ngrpah::Function - InferenceEngine::CNNNetwork cnnNet(function); - // Load CNNNetwork to target plugins - auto execNet = ie->LoadNetwork(cnnNet, targetDevice, configuration); - // Create InferRequest - InferenceEngine::InferRequest req = execNet.CreateInferRequest(); - - req.SetCompletionCallback>( - [&](InferenceEngine::IInferRequest::Ptr request, InferenceEngine::StatusCode status) { - // HSD_1805940120: Wait on starting callback return HDDL_ERROR_INVAL_TASK_HANDLE - if (targetDevice != CommonTestUtils::DEVICE_HDDL) { - ASSERT_EQ(static_cast(InferenceEngine::StatusCode::OK), status); - } - data.numIsCalled++; - // WA for deadlock - request->SetCompletionCallback(nullptr); - InferenceEngine::StatusCode sts = request->StartAsync(nullptr); - if (sts == InferenceEngine::StatusCode::OK) { - data.startAsyncOK = true; - } - }); - - req.StartAsync(); - InferenceEngine::ResponseDesc responseWait; - InferenceEngine::StatusCode waitStatus = req.Wait(InferenceEngine::IInferRequest::WaitMode::RESULT_READY); - - ASSERT_EQ(static_cast(InferenceEngine::StatusCode::OK), waitStatus) << responseWait.msg; - ASSERT_EQ(1, data.numIsCalled); - ASSERT_TRUE(data.startAsyncOK); -} - // test that can wait all callbacks on dtor TEST_P(CallbackTests, canStartSeveralAsyncInsideCompletionCallbackWithSafeDtor) { // Skip test according to plugin specific disabledTestPatterns() (if any) @@ -118,7 +76,7 @@ TEST_P(CallbackTests, canStartSeveralAsyncInsideCompletionCallbackWithSafeDtor) data.promise.set_value(status); } else { if (data.numIter.fetch_add(1) != NUM_ITER) { - InferenceEngine::StatusCode sts = request->StartAsync(nullptr); + auto sts = request->StartAsync(nullptr); if (sts != InferenceEngine::StatusCode::OK) { data.promise.set_value(sts); } @@ -156,114 +114,6 @@ TEST_P(CallbackTests, inferDoesNotCallCompletionCallback) { ASSERT_FALSE(isCalled); } -TEST_P(CallbackTests, canStartAsyncInsideCompletionCallbackNoSafeDtor) { - SKIP_IF_CURRENT_TEST_IS_DISABLED() - struct TestUserData { - int numIter = 0; - bool startAsyncOK = true; - bool getDataOK = true; - std::atomic numIsCalled{0}; - std::mutex mutex_block_emulation; - std::condition_variable cv_block_emulation; - bool isBlocked = true; - - TestUserData(int i) : numIter(i) {} - }; - TestUserData data(1); - - // Skip test according to plugin specific disabledTestPatterns() (if any) - SKIP_IF_CURRENT_TEST_IS_DISABLED() - // Create CNNNetwork from ngrpah::Function - InferenceEngine::CNNNetwork cnnNet(function); - // Load CNNNetwork to target plugins - auto execNet = ie->LoadNetwork(cnnNet, targetDevice, configuration); - // Create InferRequest - InferenceEngine::InferRequest req = execNet.CreateInferRequest(); - - req.SetCompletionCallback>( - [&](InferenceEngine::IInferRequest::Ptr request, InferenceEngine::StatusCode status) { - // WA for deadlock - if (!--data.numIter) { - request->SetCompletionCallback(nullptr); - } - InferenceEngine::StatusCode sts = request->StartAsync(nullptr); - if (sts != InferenceEngine::StatusCode::OK) { - data.startAsyncOK = false; - } - data.numIsCalled++; - if (!data.numIter) { - data.isBlocked = false; - data.cv_block_emulation.notify_one(); - } - }); - req.StartAsync(); - InferenceEngine::ResponseDesc responseWait; - InferenceEngine::StatusCode waitStatus = req.Wait(InferenceEngine::IInferRequest::WaitMode::RESULT_READY); - // intentionally block until notification from callback - std::unique_lock lock(data.mutex_block_emulation); - data.cv_block_emulation.wait(lock, [&]() { return !data.isBlocked; }); - - ASSERT_EQ(static_cast(InferenceEngine::StatusCode::OK), waitStatus); - - ASSERT_EQ(1, data.numIsCalled); - ASSERT_TRUE(data.startAsyncOK); - ASSERT_TRUE(data.getDataOK); -} - -TEST_P(CallbackTests, canStartSeveralAsyncInsideCompletionCallbackNoSafeDtor) { - SKIP_IF_CURRENT_TEST_IS_DISABLED() - struct TestUserData { - int numIter = 0; - bool startAsyncOK = true; - bool getDataOK = true; - std::atomic numIsCalled{0}; - std::mutex mutex_block_emulation; - std::condition_variable cv_block_emulation; - bool isBlocked = true; - - TestUserData(int i) : numIter(i) {} - }; - TestUserData data(10); - - // Skip test according to plugin specific disabledTestPatterns() (if any) - SKIP_IF_CURRENT_TEST_IS_DISABLED() - // Create CNNNetwork from ngrpah::Function - InferenceEngine::CNNNetwork cnnNet(function); - // Load CNNNetwork to target plugins - auto execNet = ie->LoadNetwork(cnnNet, targetDevice, configuration); - // Create InferRequest - InferenceEngine::InferRequest req = execNet.CreateInferRequest(); - - req.SetCompletionCallback>( - [&](InferenceEngine::IInferRequest::Ptr request, InferenceEngine::StatusCode status) { - // WA for deadlock - if (!--data.numIter) { - request->SetCompletionCallback(nullptr); - } - InferenceEngine::StatusCode sts = request->StartAsync(nullptr); - if (sts != InferenceEngine::StatusCode::OK) { - data.startAsyncOK = false; - } - data.numIsCalled++; - if (!data.numIter) { - data.isBlocked = false; - data.cv_block_emulation.notify_one(); - } - }); - req.StartAsync(); - InferenceEngine::ResponseDesc responseWait; - InferenceEngine::StatusCode waitStatus = req.Wait(InferenceEngine::IInferRequest::WaitMode::RESULT_READY); - // intentionally block until notification from callback - std::unique_lock lock(data.mutex_block_emulation); - data.cv_block_emulation.wait(lock, [&]() { return !data.isBlocked; }); - - ASSERT_EQ(static_cast(InferenceEngine::StatusCode::OK), waitStatus); - - ASSERT_EQ(10, data.numIsCalled); - ASSERT_TRUE(data.startAsyncOK); - ASSERT_TRUE(data.getDataOK); -} - TEST_P(CallbackTests, returnGeneralErrorIfCallbackThrowException) { // Skip test according to plugin specific disabledTestPatterns() (if any) SKIP_IF_CURRENT_TEST_IS_DISABLED()