Publishing 2019 R1 content
[platform/upstream/dldt.git] / inference-engine / tests / unit / inference_engine_tests / cpp_interfaces / callback_manager_tests.cpp
1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4
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>
10
11 using namespace ::testing;
12 using namespace std;
13 using namespace InferenceEngine;
14 using namespace InferenceEngine::details;
15
16 class CallbackManagerTests : public ::testing::Test {
17 protected:
18     CallbackManager::Ptr callbackManager;
19     MockTaskExecutor::Ptr mockExecutor;
20     IInferRequest::Ptr mockRequest;
21     std::function<void(IInferRequest::Ptr, StatusCode code)> mockCallback;
22
23     virtual void TearDown() {
24     }
25
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>();
31     }
32 };
33
34 TEST_F(CallbackManagerTests, disabledByDefault) {
35     ASSERT_FALSE(callbackManager->isCallbackEnabled());
36 }
37
38 TEST_F(CallbackManagerTests, disabledIfCallbackNotSet) {
39     callbackManager->enableCallback();
40     ASSERT_FALSE(callbackManager->isCallbackEnabled());
41 }
42
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));
47 }
48
49 TEST_F(CallbackManagerTests, canSetCallback) {
50     callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {});
51     ASSERT_TRUE(callbackManager->isCallbackEnabled());
52 }
53
54 TEST_F(CallbackManagerTests, failToRunForEmptyRequest) {
55     callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {});
56     EXPECT_THROW(callbackManager->runCallback(), InferenceEngineException);
57 }
58
59 TEST_F(CallbackManagerTests, callbackIsNotCalledIfWasNotSet) {
60     callbackManager->set_publicInterface(mockRequest);
61     EXPECT_NO_THROW(callbackManager->runCallback());
62 }
63
64 TEST_F(CallbackManagerTests, canRunCallback) {
65     callbackManager->set_publicInterface(mockRequest);
66     callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {
67         throw logic_error("");
68     });
69     EXPECT_THROW(callbackManager->runCallback(), logic_error);
70 }
71
72 TEST_F(CallbackManagerTests, canDisableCallback) {
73     callbackManager->set_callback([](IInferRequest::Ptr, StatusCode code) {});
74     callbackManager->disableCallback();
75     ASSERT_FALSE(callbackManager->isCallbackEnabled());
76 }
77
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);
83 }
84
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);
90     });
91 }
92
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());
100 }