1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "task_signal.h"
17 
18 #include <cerrno>
19 #include <condition_variable>
20 #include <gtest/gtest.h>
21 #include <string>
22 
23 #include "filemgmt_libhilog.h"
24 #include "task_signal_listener.h"
25 
26 namespace OHOS {
27 namespace DistributedFS {
28 using namespace std;
29 using namespace OHOS::DistributedFS::ModuleTaskSignal;
30 using namespace FileManagement;
31 
32 class TaskSignalTest : public testing::Test {
33 public:
SetUpTestCase(void)34     static void SetUpTestCase(void){};
TearDownTestCase()35     static void TearDownTestCase(){};
SetUp()36     void SetUp(){};
TearDown()37     void TearDown(){};
38 
39     static std::condition_variable taskListenerCv_;
40     static std::mutex taskListenerCallbackLock_;
41     static std::string canceledFilePath_;
42 };
43 
44 std::condition_variable TaskSignalTest::taskListenerCv_;
45 std::mutex TaskSignalTest::taskListenerCallbackLock_;
46 std::string TaskSignalTest::canceledFilePath_;
47 
48 class TaskSignalListenerTestImpl : public TaskSignalListener {
49 public:
50     ~TaskSignalListenerTestImpl() = default;
OnCancel()51     void OnCancel()
52     {
53         string path = "aaa";
54         TaskSignalTest::canceledFilePath_ = path;
55         TaskSignalTest::taskListenerCv_.notify_one();
56         HILOGI("OnCancel in. path = %{public}s", path.c_str());
57     }
58 };
59 
60 /**
61  * @tc.name: Task_Signal_Cancel_0000
62  * @tc.desc: Test function of Cancel() interface for SUCCESS.
63  * @tc.size: MEDIUM
64  * @tc.type: FUNC
65  * @tc.level Level 1
66  * @tc.require: NAN
67  */
68 HWTEST_F(TaskSignalTest, Task_Signal_Cancel_0000, testing::ext::TestSize.Level1)
69 {
70     GTEST_LOG_(INFO) << "TaskSignalTest-begin Task_Signal_Cancel_0000";
71     auto signal = std::make_shared<TaskSignal>();
72     auto ret = signal->Cancel();
73     EXPECT_TRUE(ret == 0);
74 }
75 
76 /**
77  * @tc.name: Task_Signal_IsCancel_0000
78  * @tc.desc: Test function of IsCanceled() interface
79  * @tc.size: MEDIUM
80  * @tc.type: FUNC
81  * @tc.level Level 1
82  * @tc.require: NAN
83  */
84 HWTEST_F(TaskSignalTest, Task_Signal_IsCancel_0000, testing::ext::TestSize.Level1)
85 {
86     GTEST_LOG_(INFO) << "TaskSignalTest-begin Task_Signal_IsCancel_0000";
87     auto signal = std::make_shared<TaskSignal>();
88     auto isCanceled = signal->IsCanceled();
89     EXPECT_TRUE(!isCanceled);
90 
91     auto ret = signal->Cancel();
92     EXPECT_TRUE(ret == 0);
93     isCanceled = signal->IsCanceled();
94     EXPECT_TRUE(isCanceled);
95 }
96 
97 /**
98  * @tc.name: Task_Signal_SetTaskSignalListener_0000
99  * @tc.desc: Test function of SetTaskSignalListener() interface for SUCCESS.
100  * @tc.size: MEDIUM
101  * @tc.type: FUNC
102  * @tc.level Level 1
103  * @tc.require: NAN
104  */
105 HWTEST_F(TaskSignalTest, Task_Signal_SetTaskSignalListener_0000, testing::ext::TestSize.Level1)
106 {
107     GTEST_LOG_(INFO) << "TaskSignalTest-begin Task_Signal_SetTaskSignalListener_0000";
108     std::unique_lock<std::mutex> lock(TaskSignalTest::taskListenerCallbackLock_);
109     auto signal = std::make_shared<TaskSignal>();
110     auto listener = std::make_shared<TaskSignalListenerTestImpl>();
111     signal->SetTaskSignalListener(listener.get());
112     std::string filePath = "aaa";
113     listener->OnCancel();
114     signal->CheckCancelIfNeed(filePath);
115     EXPECT_EQ(TaskSignalTest::canceledFilePath_, filePath);
116 }
117 
118 /**
119  * @tc.name: Task_Signal_MarkRemoteTask_0000
120  * @tc.desc: Test function of MarkRemoteTask() and SetFileInfoOfRemoteTask() interface for SUCCESS.
121  * @tc.size: MEDIUM
122  * @tc.type: FUNC
123  * @tc.level Level 1
124  * @tc.require: NAN
125  */
126 HWTEST_F(TaskSignalTest, Task_Signal_MarkRemoteTask_0000, testing::ext::TestSize.Level1)
127 {
128     GTEST_LOG_(INFO) << "TaskSignalTest-begin Task_Signal_MarkRemoteTask_0000";
129     auto signal = std::make_shared<TaskSignal>();
130     signal->MarkRemoteTask();
131     std::string sessionName = "DistributedDevice0";
132     std::string filePath = "aaa";
133     signal->SetFileInfoOfRemoteTask(sessionName, filePath);
134     auto ret = signal->Cancel();
135     EXPECT_EQ(ret, 4);
136 }
137 } // namespace DistributedFS
138 } // namespace OHOS