1 /*
2 * Copyright (c) 2023 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 "data_share_test.h"
17
18 #include <string>
19 #include <vector>
20
21 #include "data_publisher.h"
22 #include "data_publisher_sys_event_callback.h"
23 #include "data_share_common.h"
24 #include "data_share_dao.h"
25 #include "data_share_store.h"
26 #include "data_share_util.h"
27 #include "file_util.h"
28 #include "ret_code.h"
29 #include "sys_event.h"
30
31 namespace OHOS {
32 namespace HiviewDFX {
33 namespace {
34 const char TEST_FILE_PATH[] = "/data/test/data_share_test/";
35 constexpr int DB_SUCC = 0;
36 constexpr int DB_FAILED = -1;
37 constexpr int INDEX_0 = 0;
38 constexpr int INDEX_1 = 1;
39
GetTestDir(std::string & testCaseName)40 std::string GetTestDir(std::string& testCaseName)
41 {
42 std::string workPath = std::string(TEST_FILE_PATH);
43 if (workPath.back() != '/') {
44 workPath = workPath + "/";
45 }
46 workPath.append(testCaseName);
47 workPath.append("/");
48 std::string testDir = workPath;
49 if (!FileUtil::FileExists(testDir)) {
50 FileUtil::ForceCreateDirectory(testDir, FileUtil::FILE_PERM_770);
51 }
52 return testDir;
53 }
54
GenerateTestFileName(std::string & testCaseName,int index)55 std::string GenerateTestFileName(std::string& testCaseName, int index)
56 {
57 return GetTestDir(testCaseName) + "testFile" + std::to_string(index);
58 }
59 }
60
SetUpTestCase()61 void DataShareTest::SetUpTestCase() {}
62
TearDownTestCase()63 void DataShareTest::TearDownTestCase() {}
64
SetUp()65 void DataShareTest::SetUp() {}
66
TearDown()67 void DataShareTest::TearDown() {}
68
69 /**
70 * @tc.name: TestDataShareStore001
71 * @tc.desc: test dbStore api
72 * @tc.type: FUNC
73 * @tc.require: SR000I1G43
74 */
75 HWTEST_F(DataShareTest, TestDataShareStore001, testing::ext::TestSize.Level3)
76 {
77 std::string emptyTestDir = "";
78 auto dataShareStore = std::make_shared<DataShareStore>(emptyTestDir);
79 auto dbstore = dataShareStore->GetDbStore();
80 EXPECT_EQ(dbstore, nullptr);
81 std::string tableName = "subscribe_events";
82 auto ret = dataShareStore->DropTable(tableName);
83 EXPECT_EQ(ret, DB_FAILED);
84 ret = dataShareStore->DestroyDbStore();
85 EXPECT_EQ(ret, DB_SUCC);
86 std::string dataBaseTestDir = "/data/log/hiview/system_event_db/subscriber_test_tmp/";
87 dataShareStore = std::make_shared<DataShareStore>(dataBaseTestDir);
88 dbstore = dataShareStore->GetDbStore();
89 EXPECT_NE(dbstore, nullptr);
90 ret = dataShareStore->DropTable(tableName);
91 EXPECT_EQ(ret, DB_SUCC);
92 ret = dataShareStore->DestroyDbStore();
93 EXPECT_EQ(ret, DB_SUCC);
94 }
95
96 /**
97 * @tc.name: TestDataShareDao001
98 * @tc.desc: test method defined in namespace DataShareDao
99 * @tc.type: FUNC
100 * @tc.require: SR000I1G43
101 */
102 HWTEST_F(DataShareTest, TestDataShareDao001, testing::ext::TestSize.Level3)
103 {
104 std::string dataBaseTestDir = "/data/log/hiview/system_event_db/subscriber_test/";
105 auto dataShareDao = std::make_shared<DataShareDao>(std::make_shared<DataShareStore>(dataBaseTestDir));
106 int32_t uid = 20010039;
107 std::string events = "event1;event2";
108 auto result = dataShareDao->SaveSubscriberInfo(uid, events);
109 EXPECT_EQ(result, DB_SUCC);
110 auto res = dataShareDao->IsUidExists(uid);
111 ASSERT_TRUE(res);
112 std::string eventList;
113 result = dataShareDao->GetEventListByUid(uid, eventList);
114 EXPECT_EQ(result, DB_SUCC);
115 std::string bundleName;
116 result = dataShareDao->GetUidByBundleName(bundleName, uid);
117 EXPECT_EQ(result, DB_SUCC);
118 std::map<int, std::string> uidToEventsMap;
119 result = dataShareDao->GetTotalSubscriberInfo(uidToEventsMap);
120 EXPECT_EQ(result, DB_SUCC);
121 events = "event1;event3";
122 result = dataShareDao->SaveSubscriberInfo(uid, events);
123 EXPECT_EQ(result, DB_SUCC);
124 result = dataShareDao->DeleteSubscriberInfo(uid);
125 EXPECT_EQ(result, DB_SUCC);
126 }
127
128 /**
129 * @tc.name: DataShareUtilTest001
130 * @tc.desc: Test method defined in namespace DataShareUtil
131 * @tc.type: FUNC
132 * @tc.require: SR000I1G43
133 */
134 HWTEST_F(DataShareTest, DataShareUtilTest001, testing::ext::TestSize.Level3)
135 {
136 std::string testCaseName("DataShareUtilTest001");
137 int expectedFailedRet = -1;
138 auto ret = DataShareUtil::CopyFile("//......./invalid_dest_file",
139 GenerateTestFileName(testCaseName, INDEX_1).c_str());
140 ASSERT_EQ(expectedFailedRet, ret);
141 (void)FileUtil::SaveStringToFile(GenerateTestFileName(testCaseName, INDEX_0).c_str(), "test0");
142 ret = DataShareUtil::CopyFile(GenerateTestFileName(testCaseName, INDEX_0).c_str(), "//...../invalid_dest_file");
143 ASSERT_EQ(expectedFailedRet, ret);
144 (void)FileUtil::SaveStringToFile(GenerateTestFileName(testCaseName, INDEX_1).c_str(), "test1");
145 ret = DataShareUtil::CopyFile(GenerateTestFileName(testCaseName, INDEX_0).c_str(),
146 GenerateTestFileName(testCaseName, INDEX_1).c_str());
147 int expectedSuccessRet = 0;
148 ASSERT_EQ(expectedSuccessRet, ret);
149 int32_t uid = 20010039;
150 std::string sandbox = DataShareUtil::GetSandBoxPathByUid(uid);
151 ASSERT_TRUE(true);
152 }
153
154 /**
155 * @tc.name: DataPublisherTest001
156 * @tc.desc: Test method defined in DataPublisher
157 * @tc.type: FUNC
158 * @tc.require: SR000I1G43
159 */
160 HWTEST_F(DataShareTest, DataPublisherTest001, testing::ext::TestSize.Level3)
161 {
162 auto dataPublisher = std::make_shared<DataPublisher>();
163 std::vector<std::string> events { "TEST_EVENT_NAME1", "TEST_EVENT_NAME2" };
164 int32_t uid = 20010039;
165 auto ret = dataPublisher->AddSubscriber(uid, events);
166 int expectedSuccessRet = 0;
167 ASSERT_EQ(expectedSuccessRet, ret);
168 ret = dataPublisher->RemoveSubscriber(uid);
169 ASSERT_EQ(expectedSuccessRet, ret);
170 ret = dataPublisher->RemoveSubscriber(uid);
171 ASSERT_EQ(ERR_REMOVE_SUBSCRIBE, ret);
172 SysEventCreator sysEventCreator("TEST_DOMAIN", "TEST_EVENT_NAME1", SysEventCreator::FAULT);
173 auto sysEvent = std::make_shared<SysEvent>("test", nullptr, sysEventCreator);
174 dataPublisher->OnSysEvent(sysEvent);
175 ASSERT_TRUE(true);
176 ret = dataPublisher->AddSubscriber(uid, events);
177 ASSERT_EQ(expectedSuccessRet, ret);
178 dataPublisher->OnSysEvent(sysEvent);
179 ASSERT_TRUE(true);
180 sysEventCreator = SysEventCreator("BUNDLE_MANAGER", "BUNDLE_UNINSTALL", SysEventCreator::FAULT);
181 sysEventCreator.SetKeyValue("BUNDLE_NAME", "com.test.demo");
182 sysEvent = std::make_shared<SysEvent>("test", nullptr, sysEventCreator);
183 dataPublisher->OnSysEvent(sysEvent);
184 ASSERT_TRUE(true);
185 }
186
187 /**
188 * @tc.name: DataPublisherSysEventCallbackTest001
189 * @tc.desc: Test method defined in DataPublisherSysEventCallback
190 * @tc.type: FUNC
191 * @tc.require: SR000I1G43
192 */
193 HWTEST_F(DataShareTest, DataPublisherSysEventCallbackTest001, testing::ext::TestSize.Level3)
194 {
195 DataPublisherSysEventCallback callback1("/data/log/hiview/system_event_db/events/testSrc1.evt",
196 "/data/log/hiview/system_event_db/events/DomainTest1", 0, 0);
197 std::vector<std::u16string> eventList1 = { u"test event" };
198 std::vector<int64_t> emptySeqList;
199 callback1.OnQuery(eventList1, emptySeqList);
200 callback1.OnComplete(0, 10, 12345);
201 ASSERT_TRUE(true);
202 DataPublisherSysEventCallback callback2("/data/log/hiview/system_event_db/events/testSrc2.evt",
203 "/data/log/hiview/system_event_db/events/DomainTest2", 0, MAXIMUM_FILE_SIZE);
204 std::vector<std::u16string> eventList2 = { u"test event2" };
205 callback2.OnQuery(eventList2, emptySeqList);
206 callback2.OnComplete(0, 10, 12345);
207 ASSERT_TRUE(true);
208 DataPublisherSysEventCallback callback3("//......./invalid_dest_file",
209 "/data/log/hiview/system_event_db/events/DomainTest3", 0, 0);
210 callback3.HandleEventFile("//......./invalid_src_file", "/data/log/hiview/system_event_db/events/Domain3");
211 ASSERT_TRUE(true);
212 }
213 }
214 }