1 // Copyright (C) 2018 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <gtest/gtest.h>
6 #include <gmock/gmock-spec-builders.h>
7 #include <cpp_interfaces/impl/ie_infer_async_request_thread_safe_default.hpp>
8 #include <cpp_interfaces/mock_task_executor.hpp>
9 #include <mock_iasync_infer_request.hpp>
11 using namespace ::testing;
13 using namespace InferenceEngine;
14 using namespace InferenceEngine::details;
16 class CallbackManagerTests : public ::testing::Test {
18 CallbackManager::Ptr callbackManager;
19 MockTaskExecutor::Ptr mockExecutor;
20 IInferRequest::Ptr mockRequest;
21 std::function<void(IInferRequest::Ptr, StatusCode code)> mockCallback;
23 virtual void TearDown() {
26 virtual void SetUp() {
27 mockExecutor = make_shared<MockTaskExecutor>();
28 callbackManager = make_shared<CallbackManager>(mockExecutor);
29 mockCallback = [](IInferRequest::Ptr, StatusCode code) {};
30 mockRequest = make_shared<MockIInferRequest>();
34 TEST_F(CallbackManagerTests, disabledByDefault) {
35 ASSERT_FALSE(callbackManager->isCallbackEnabled());
38 TEST_F(CallbackManagerTests, disabledIfCallbackNotSet) {
39 callbackManager->enableCallback();
40 ASSERT_FALSE(callbackManager->isCallbackEnabled());
43 TEST_F(CallbackManagerTests, canStartTask) {
44 auto task = make_shared<Task>();
45 EXPECT_CALL(*mockExecutor.get(), startTask(task));
46 ASSERT_NO_THROW(callbackManager->startTask(task));
49 TEST_F(CallbackManagerTests, canSetCallback) {
50 callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {});
51 ASSERT_TRUE(callbackManager->isCallbackEnabled());
54 TEST_F(CallbackManagerTests, failToRunForEmptyRequest) {
55 callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {});
56 EXPECT_THROW(callbackManager->runCallback(), InferenceEngineException);
59 TEST_F(CallbackManagerTests, callbackIsNotCalledIfWasNotSet) {
60 callbackManager->set_publicInterface(mockRequest);
61 EXPECT_NO_THROW(callbackManager->runCallback());
64 TEST_F(CallbackManagerTests, canRunCallback) {
65 callbackManager->set_publicInterface(mockRequest);
66 callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {
67 throw logic_error("");
69 EXPECT_THROW(callbackManager->runCallback(), logic_error);
72 TEST_F(CallbackManagerTests, canDisableCallback) {
73 callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {});
74 callbackManager->disableCallback();
75 ASSERT_FALSE(callbackManager->isCallbackEnabled());
78 TEST_F(CallbackManagerTests, canSetException) {
79 callbackManager->set_requestException(std::make_exception_ptr(std::logic_error("")));
80 callbackManager->set_publicInterface(mockRequest);
81 callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {});
82 EXPECT_THROW(callbackManager->runCallback(), std::logic_error);
85 TEST_F(CallbackManagerTests, canSetStatus) {
86 callbackManager->set_requestStatus(GENERAL_ERROR);
87 callbackManager->set_publicInterface(mockRequest);
88 callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {
89 ASSERT_EQ(GENERAL_ERROR, code);
93 TEST_F(CallbackManagerTests, initResetStatusAndException) {
94 callbackManager->set_requestStatus(GENERAL_ERROR);
95 callbackManager->set_requestException(std::make_exception_ptr(std::logic_error("")));
96 callbackManager->set_publicInterface(mockRequest);
97 callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {});
98 callbackManager->reset();
99 EXPECT_NO_THROW(callbackManager->runCallback());