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 #define LOG_TAG "ObjectDmsHandlerTest"
17 
18 #include "object_dms_handler.h"
19 
20 #include <gtest/gtest.h>
21 
22 #include "device_manager_adapter.h"
23 #include "dms_listener_stub.h"
24 
25 using namespace testing::ext;
26 using namespace OHOS::DistributedObject;
27 namespace OHOS::Test {
28 constexpr const char *PKG_NAME = "ohos.distributeddata.service";
29 class ObjectDmsHandlerTest : public testing::Test {
30 public:
SetUp()31     void SetUp() {}
TearDown()32     void TearDown() {}
33 };
34 
35 /**
36 * @tc.name: IsContinueTest_001
37 * @tc.desc: IsContinue test.
38 * @tc.type: FUNC
39 */
40 HWTEST_F(ObjectDmsHandlerTest, IsContinue_001, TestSize.Level0)
41 {
42     ObjectDmsHandler::GetInstance().RegisterDmsEvent();
43     DistributedHardware::DmDeviceInfo localDeviceInfo;
44     DistributedHardware::DeviceManager::GetInstance().GetLocalDeviceInfo(PKG_NAME, localDeviceInfo);
45     std::string localNetworkId = localDeviceInfo.networkId;
46     DistributedSchedule::EventNotify notify;
47     notify.dSchedEventType_ = DistributedSchedule::DSchedEventType::DMS_CONTINUE;
48     notify.srcNetworkId_ = localNetworkId;
49     notify.dstNetworkId_ = "networkId2";
50     notify.srcBundleName_ = "bundleName1";
51     notify.destBundleName_ = "bundleName2";
52     DmsEventListener listener;
53     listener.DSchedEventNotify(notify);
54     auto res = ObjectDmsHandler::GetInstance().IsContinue("bundleName1");
55     EXPECT_TRUE(res);
56     res = ObjectDmsHandler::GetInstance().IsContinue("bundleName2");
57     EXPECT_FALSE(res);
58     ObjectDmsHandler::GetInstance().dmsEvents_.clear();
59 }
60 
61 /**
62 * @tc.name: IsContinueTest_002
63 * @tc.desc: IsContinue test.
64 * @tc.type: FUNC
65 */
66 HWTEST_F(ObjectDmsHandlerTest, IsContinue_002, TestSize.Level0)
67 {
68     ObjectDmsHandler::GetInstance().RegisterDmsEvent();
69     DistributedHardware::DmDeviceInfo localDeviceInfo;
70     DistributedHardware::DeviceManager::GetInstance().GetLocalDeviceInfo(PKG_NAME, localDeviceInfo);
71     std::string localNetworkId = localDeviceInfo.networkId;
72     DistributedSchedule::EventNotify notify;
73     notify.dSchedEventType_ = DistributedSchedule::DSchedEventType::DMS_CONTINUE;
74     notify.srcNetworkId_ = "networkId1";
75     notify.dstNetworkId_ = localNetworkId;
76     notify.srcBundleName_ = "bundleName1";
77     notify.destBundleName_ = "bundleName2";
78     DmsEventListener listener;
79     listener.DSchedEventNotify(notify);
80     auto res = ObjectDmsHandler::GetInstance().IsContinue("bundleName1");
81     EXPECT_FALSE(res);
82     res = ObjectDmsHandler::GetInstance().IsContinue("bundleName2");
83     EXPECT_TRUE(res);
84     ObjectDmsHandler::GetInstance().dmsEvents_.clear();
85 }
86 
87 /**
88 * @tc.name: ReceiveDmsEvent_001
89 * @tc.desc: IsContinue test.
90 * @tc.type: FUNC
91 */
92 HWTEST_F(ObjectDmsHandlerTest, ReceiveDmsEvent_001, TestSize.Level0)
93 {
94     ObjectDmsHandler::GetInstance().RegisterDmsEvent();
95     DmsEventListener listener;
96     for (int i = 0; i <= 20; i++) {
97         DistributedSchedule::EventNotify notify;
98         notify.dSchedEventType_ = DistributedSchedule::DSchedEventType::DMS_CONTINUE;
99         notify.srcNetworkId_ = "srcNetworkId" + std::to_string(i);
100         notify.dstNetworkId_ = "dstNetworkId" + std::to_string(i);
101         notify.srcBundleName_ = "srcBundleName" + std::to_string(i);
102         notify.destBundleName_ = "destBundleName" + std::to_string(i);
103         ObjectDmsHandler::GetInstance().ReceiveDmsEvent(notify);
104     }
105     EXPECT_EQ(ObjectDmsHandler::GetInstance().dmsEvents_.size(), 20);
106     EXPECT_EQ(ObjectDmsHandler::GetInstance().dmsEvents_.front().first.srcNetworkId_, "srcNetworkId1");
107     EXPECT_EQ(ObjectDmsHandler::GetInstance().dmsEvents_.back().first.srcNetworkId_, "srcNetworkId20");
108     ObjectDmsHandler::GetInstance().dmsEvents_.clear();
109 }
110 
111 /**
112 * @tc.name: GetDstBundleName_001
113 * @tc.desc: IsContinue test.
114 * @tc.type: FUNC
115 */
116 HWTEST_F(ObjectDmsHandlerTest, GetDstBundleName_001, TestSize.Level0)
117 {
118     DistributedHardware::DmDeviceInfo localDeviceInfo;
119     DistributedHardware::DeviceManager::GetInstance().GetLocalDeviceInfo(PKG_NAME, localDeviceInfo);
120     std::string localNetworkId = localDeviceInfo.networkId;
121 
122     std::string srcNetworkId = localNetworkId;
123     std::string srcBundleName = "bundleName1";
124     std::string dstNetworkId = "networkId2";
125     std::string destBundleName = "bundleName2";
126 
127     auto res = ObjectDmsHandler::GetInstance().GetDstBundleName(srcBundleName, dstNetworkId);
128     EXPECT_EQ(res, srcBundleName);
129 
130     DistributedSchedule::EventNotify notify;
131     notify.dSchedEventType_ = DistributedSchedule::DSchedEventType::DMS_CONTINUE;
132     notify.srcNetworkId_ = srcNetworkId;
133     notify.dstNetworkId_ = dstNetworkId;
134     notify.srcBundleName_ = srcBundleName;
135     notify.destBundleName_ = destBundleName;
136     ObjectDmsHandler::GetInstance().ReceiveDmsEvent(notify);
137 
138     res = ObjectDmsHandler::GetInstance().GetDstBundleName(srcBundleName, dstNetworkId);
139     EXPECT_EQ(res, destBundleName);
140 
141     ObjectDmsHandler::GetInstance().dmsEvents_.clear();
142 
143     auto timestamp = std::chrono::steady_clock::now() - std::chrono::seconds(20);
144     ObjectDmsHandler::GetInstance().dmsEvents_.push_back({notify, timestamp});
145 
146     res = ObjectDmsHandler::GetInstance().GetDstBundleName(srcBundleName, dstNetworkId);
147     EXPECT_EQ(res, srcBundleName);
148 
149     ObjectDmsHandler::GetInstance().dmsEvents_.clear();
150 }
151 } // namespace OHOS::Test
152