• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (c) 2022 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 #define LOG_TAG "CloudDataTest"
16 #include <gtest/gtest.h>
17 #include "log_print.h"
18 #include "ipc_skeleton.h"
19 #include "account/account_delegate.h"
20 #include "cloud/cloud_event.h"
21 #include "cloud/cloud_server.h"
22 #include "cloud/schema_meta.h"
23 #include "communicator/device_manager_adapter.h"
24 #include "device_matrix.h"
25 #include "eventcenter/event_center.h"
26 #include "feature/feature_system.h"
27 #include "metadata/meta_data_manager.h"
28 #include "metadata/store_meta_data.h"
29 #include "metadata/store_meta_data_local.h"
30 #include "mock/db_store_mock.h"
31 #include "rdb_types.h"
32 using namespace testing::ext;
33 using namespace OHOS::DistributedData;
34 using DmAdapter = OHOS::DistributedData::DeviceManagerAdapter;
35 
36 namespace OHOS::Test {
37 namespace DistributedDataTest {
38 static constexpr const char *TEST_CLOUD_BUNDLE = "test_cloud_bundleName";
39 static constexpr const char *TEST_CLOUD_APPID = "test_cloud_appid";
40 static constexpr const char *TEST_CLOUD_STORE = "test_cloud_database_name";
41 class CloudDataTest : public testing::Test {
42 public:
43     static void SetUpTestCase(void);
44     static void TearDownTestCase(void);
45     void SetUp();
46     void TearDown();
47 
48     static SchemaMeta schemaMeta_;
49 protected:
50     static constexpr const char *TEST_DISTRIBUTEDDATA_BUNDLE = "test_distributeddata";
51     static constexpr const char *TEST_DISTRIBUTEDDATA_STORE = "test_service_meta";
52 
53     void InitMetaData();
54     void InitSchemaMeta();
55     static std::shared_ptr<DBStoreMock> dbStoreMock_;
56     StoreMetaData metaData_;
57 };
58 
59 class CloudServerMock : public CloudServer {
60 public:
61     CloudInfo GetServerInfo(int32_t userId) override;
62     SchemaMeta GetAppSchema(int32_t userId, const std::string &bundleName) override;
63     virtual ~CloudServerMock() = default;
64     static constexpr uint64_t REMAINSPACE = 1000;
65     static constexpr uint64_t TATALSPACE = 2000;
66 };
67 
GetServerInfo(int32_t userId)68 CloudInfo CloudServerMock::GetServerInfo(int32_t userId)
69 {
70     CloudInfo cloudInfo;
71     cloudInfo.user = userId;
72     cloudInfo.id = "test_cloud_id";
73     cloudInfo.remainSpace = REMAINSPACE;
74     cloudInfo.totalSpace = TATALSPACE;
75     cloudInfo.enableCloud = true;
76 
77     CloudInfo::AppInfo appInfo;
78     appInfo.bundleName = TEST_CLOUD_BUNDLE;
79     appInfo.appId = TEST_CLOUD_APPID;
80     appInfo.version = 1;
81     appInfo.cloudSwitch = true;
82 
83     cloudInfo.apps[TEST_CLOUD_BUNDLE] = std::move(appInfo);
84     return cloudInfo;
85 }
86 
GetAppSchema(int32_t userId,const std::string & bundleName)87 SchemaMeta CloudServerMock::GetAppSchema(int32_t userId, const std::string &bundleName)
88 {
89     return CloudDataTest::schemaMeta_;
90 }
91 
92 std::shared_ptr<DBStoreMock> CloudDataTest::dbStoreMock_ = std::make_shared<DBStoreMock>();
93 SchemaMeta CloudDataTest::schemaMeta_;
94 
InitMetaData()95 void CloudDataTest::InitMetaData()
96 {
97     metaData_.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid;
98     metaData_.appId = TEST_DISTRIBUTEDDATA_BUNDLE;
99     metaData_.bundleName = TEST_DISTRIBUTEDDATA_BUNDLE;
100     metaData_.tokenId = OHOS::IPCSkeleton::GetCallingTokenID();
101     metaData_.user = std::to_string(DistributedKv::AccountDelegate::GetInstance()->GetUserByToken(metaData_.tokenId));
102     metaData_.area = OHOS::DistributedKv::EL1;
103     metaData_.instanceId = 0;
104     metaData_.isAutoSync = true;
105     metaData_.storeType = 1;
106     metaData_.storeId = TEST_DISTRIBUTEDDATA_STORE;
107     PolicyValue value;
108     value.type = OHOS::DistributedKv::PolicyType::IMMEDIATE_SYNC_ON_ONLINE;
109 }
110 
InitSchemaMeta()111 void CloudDataTest::InitSchemaMeta()
112 {
113     SchemaMeta::Field field1;
114     field1.colName = "test_cloud_field_name1";
115     field1.alias = "test_cloud_field_alias1";
116     SchemaMeta::Field field2;
117     field2.colName = "test_cloud_field_name2";
118     field2.alias = "test_cloud_field_alias2";
119 
120     SchemaMeta::Table table;
121     table.name = "test_cloud_table_name";
122     table.alias = "test_cloud_table_alias";
123     table.fields.emplace_back(field1);
124     table.fields.emplace_back(field2);
125 
126     SchemaMeta::Database database;
127     database.name = TEST_CLOUD_STORE;
128     database.alias = "test_cloud_database_alias";
129     database.tables.emplace_back(table);
130 
131     schemaMeta_.version = 1;
132     schemaMeta_.bundleName = TEST_DISTRIBUTEDDATA_BUNDLE;
133     schemaMeta_.databases.emplace_back(database);
134 }
135 
SetUpTestCase(void)136 void CloudDataTest::SetUpTestCase(void)
137 {
138     MetaDataManager::GetInstance().Initialize(dbStoreMock_, nullptr);
139     MetaDataManager::GetInstance().SetSyncer([](const auto &, auto) {
140         DeviceMatrix::GetInstance().OnChanged(DeviceMatrix::META_STORE_MASK);
141     });
142 
143     auto cloudServerMock = new CloudServerMock();
144     CloudServer::RegisterCloudInstance(cloudServerMock);
145     FeatureSystem::GetInstance().GetCreator("cloud")();
146     FeatureSystem::GetInstance().GetCreator("relational_store")();
147 }
148 
TearDownTestCase()149 void CloudDataTest::TearDownTestCase() {}
150 
SetUp()151 void CloudDataTest::SetUp()
152 {
153     InitMetaData();
154     InitSchemaMeta();
155 
156     MetaDataManager::GetInstance().SaveMeta(metaData_.GetKey(), metaData_);
157 
158     StoreMetaData storeMetaData;
159     storeMetaData.deviceId = DmAdapter::GetInstance().GetLocalDevice().uuid;
160     storeMetaData.bundleName = TEST_CLOUD_BUNDLE;
161     storeMetaData.storeId = TEST_CLOUD_STORE;
162     storeMetaData.instanceId = 0;
163     storeMetaData.isAutoSync = true;
164     storeMetaData.storeType = DistributedRdb::RDB_DEVICE_COLLABORATION;
165     storeMetaData.area = OHOS::DistributedKv::EL1;
166     storeMetaData.tokenId = OHOS::IPCSkeleton::GetCallingTokenID();
167     auto user = DistributedKv::AccountDelegate::GetInstance()->GetUserByToken(storeMetaData.tokenId);
168     storeMetaData.user = std::to_string(user);
169     MetaDataManager::GetInstance().SaveMeta(storeMetaData.GetKey(), storeMetaData);
170 }
171 
TearDown()172 void CloudDataTest::TearDown() {}
173 
174 /**
175 * @tc.name: GetSchema
176 * @tc.desc: GetSchema from cloud when no schema in meta.
177 * @tc.type: FUNC
178 * @tc.require:
179 * @tc.author: ht
180 */
181 HWTEST_F(CloudDataTest, GetSchema, TestSize.Level0)
182 {
183     ZLOGI("CloudDataTest start");
184     auto cloudServerMock = std::make_shared<CloudServerMock>();
185     auto user = DistributedKv::AccountDelegate::GetInstance()->GetUserByToken(OHOS::IPCSkeleton::GetCallingTokenID());
186     auto cloudInfo = cloudServerMock->GetServerInfo(user);
187     ASSERT_TRUE(MetaDataManager::GetInstance().DelMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE), true));
188     SchemaMeta schemaMeta;
189     ASSERT_FALSE(
190         MetaDataManager::GetInstance().LoadMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE), schemaMeta, true));
191     CloudEvent::StoreInfo storeInfo { OHOS::IPCSkeleton::GetCallingTokenID(), TEST_CLOUD_BUNDLE, TEST_CLOUD_STORE, 0 };
192     auto event = std::make_unique<CloudEvent>(CloudEvent::GET_SCHEMA, storeInfo);
193     EventCenter::GetInstance().PostEvent(std::move(event));
194     ASSERT_FALSE(
195         MetaDataManager::GetInstance().LoadMeta(cloudInfo.GetSchemaKey(TEST_CLOUD_BUNDLE), schemaMeta, true));
196 }
197 } // namespace DistributedDataTest
198 } // namespace OHOS::Test
199