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 */
HWTEST_F(ObjectDmsHandlerTest, IsContinue_001, TestSize.Level0)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 */
HWTEST_F(ObjectDmsHandlerTest, IsContinue_002, TestSize.Level0)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 */
HWTEST_F(ObjectDmsHandlerTest, ReceiveDmsEvent_001, TestSize.Level0)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 */
HWTEST_F(ObjectDmsHandlerTest, GetDstBundleName_001, TestSize.Level0)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