• 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 
16 #include "accesstoken_kit.h"
17 #include "bootstrap.h"
18 #include "device_manager_adapter.h"
19 #include "kvstore_meta_manager.h"
20 #include "metadata/meta_data_manager.h"
21 #include "metadata/store_meta_data.h"
22 #include "nativetoken_kit.h"
23 #include "session_manager/route_head_handler_impl.h"
24 #include "session_manager/upgrade_manager.h"
25 #include "token_setproc.h"
26 #include "user_delegate.h"
27 #include "gtest/gtest.h"
28 
29 namespace {
30 using namespace testing::ext;
31 using namespace OHOS::DistributedKv;
32 using namespace OHOS::DistributedData;
33 using namespace OHOS;
34 using namespace OHOS::Security::AccessToken;
35 constexpr const char *PEER_DEVICE_ID = "PEER_DEVICE_ID";
36 constexpr int PEER_USER_ID1 = 101;
37 constexpr int PEER_USER_ID2 = 100;
38 
GrantPermissionNative()39 void GrantPermissionNative()
40 {
41     const char **perms = new const char *[2];
42     perms[0] = "ohos.permission.DISTRIBUTED_DATASYNC";
43     perms[1] = "ohos.permission.ACCESS_SERVICE_DM";
44     TokenInfoParams infoInstance = {
45         .dcapsNum = 0,
46         .permsNum = 2,
47         .aclsNum = 0,
48         .dcaps = nullptr,
49         .perms = perms,
50         .acls = nullptr,
51         .processName = "distributed_data_test",
52         .aplStr = "system_basic",
53     };
54     uint64_t tokenId = GetAccessTokenId(&infoInstance);
55     SetSelfTokenID(tokenId);
56     AccessTokenKit::ReloadNativeTokenInfo();
57     delete []perms;
58 }
59 
60 class SessionManagerTest : public testing::Test {
61 public:
SetUpTestCase()62     static void SetUpTestCase()
63     {
64         auto executors = std::make_shared<ExecutorPool>(12, 5);
65         Bootstrap::GetInstance().LoadComponents();
66         Bootstrap::GetInstance().LoadDirectory();
67         Bootstrap::GetInstance().LoadCheckers();
68         KvStoreMetaManager::GetInstance().BindExecutor(executors);
69         KvStoreMetaManager::GetInstance().InitMetaParameter();
70         KvStoreMetaManager::GetInstance().InitMetaListener();
71         DeviceManagerAdapter::GetInstance().Init(executors);
72 
73         // init peer device
74         UserMetaData userMetaData;
75         userMetaData.deviceId = PEER_DEVICE_ID;
76 
77         UserStatus status;
78         status.isActive = true;
79         status.id = PEER_USER_ID1;
80         userMetaData.users = { status };
81         status.id = PEER_USER_ID2;
82         userMetaData.users.emplace_back(status);
83 
84         auto peerUserMetaKey = UserMetaRow::GetKeyFor(userMetaData.deviceId);
85         MetaDataManager::GetInstance().SaveMeta({ peerUserMetaKey.begin(), peerUserMetaKey.end() }, userMetaData);
86 
87         CapMetaData capMetaData;
88         capMetaData.version = CapMetaData::CURRENT_VERSION;
89 
90         auto peerCapMetaKey = CapMetaRow::GetKeyFor(userMetaData.deviceId);
91         MetaDataManager::GetInstance().SaveMeta({ peerCapMetaKey.begin(), peerCapMetaKey.end() }, capMetaData);
92 
93         StoreMetaData metaData;
94         metaData.bundleName = "ohos.test.demo";
95         metaData.storeId = "test_store";
96         metaData.user = "100";
97         metaData.deviceId = DeviceManagerAdapter::GetInstance().GetLocalDevice().uuid;
98         metaData.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0);
99         metaData.uid = 2000000;
100         metaData.storeType = 1;
101         MetaDataManager::GetInstance().SaveMeta(metaData.GetKey(), metaData);
102         GrantPermissionNative();
103     }
TearDownTestCase()104     static void TearDownTestCase()
105     {
106         auto peerUserMetaKey = UserMetaRow::GetKeyFor(PEER_DEVICE_ID);
107         MetaDataManager::GetInstance().DelMeta(std::string(peerUserMetaKey.begin(), peerUserMetaKey.end()));
108         auto peerCapMetaKey = CapMetaRow::GetKeyFor(PEER_DEVICE_ID);
109         MetaDataManager::GetInstance().DelMeta(std::string(peerCapMetaKey.begin(), peerCapMetaKey.end()));
110         StoreMetaData metaData;
111         metaData.bundleName = "ohos.test.demo";
112         metaData.storeId = "test_store";
113         metaData.user = "100";
114         metaData.deviceId = DeviceManagerAdapter::GetInstance().GetLocalDevice().uuid;
115         metaData.tokenId = AccessTokenKit::GetHapTokenID(100, "ohos.test.demo", 0);
116         metaData.uid = 2000000;
117         metaData.storeType = 1;
118         MetaDataManager::GetInstance().DelMeta(metaData.GetKey());
119     }
SetUp()120     void SetUp()
121     {
122     }
TearDown()123     void TearDown()
124     {
125     }
126 };
127 
128 /**
129 * @tc.name: PackAndUnPack01
130 * @tc.desc: test get db dir
131 * @tc.type: FUNC
132 * @tc.require:
133 * @tc.author: illybyy
134 */
135 HWTEST_F(SessionManagerTest, PackAndUnPack01, TestSize.Level2)
136 {
137     const DistributedDB::ExtendInfo info = {
138         .appId = "ohos.test.demo", .storeId = "test_store", .userId = "100", .dstTarget = PEER_DEVICE_ID
139     };
140     auto sendHandler = RouteHeadHandlerImpl::Create(info);
141     ASSERT_NE(sendHandler, nullptr);
142     uint32_t routeHeadSize = 0;
143     sendHandler->GetHeadDataSize(routeHeadSize);
144     ASSERT_GT(routeHeadSize, 0);
145     std::unique_ptr<uint8_t[]> data = std::make_unique<uint8_t[]>(routeHeadSize);
146     sendHandler->FillHeadData(data.get(), routeHeadSize, routeHeadSize);
147 
148     std::vector<std::string> users;
149     auto recvHandler = RouteHeadHandlerImpl::Create({});
150     ASSERT_NE(recvHandler, nullptr);
151     uint32_t parseSize = 1;
152     recvHandler->ParseHeadData(data.get(), routeHeadSize, parseSize, users);
153     EXPECT_EQ(routeHeadSize, parseSize);
154     ASSERT_EQ(users.size(), 1);
155     EXPECT_EQ(users[0], "100");
156 }
157 } // namespace