1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License. 5d9f0492fSopenharmony_ci * You may obtain a copy of the License at 6d9f0492fSopenharmony_ci * 7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d9f0492fSopenharmony_ci * 9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and 13d9f0492fSopenharmony_ci * limitations under the License. 14d9f0492fSopenharmony_ci */ 15d9f0492fSopenharmony_ci#include <chrono> 16d9f0492fSopenharmony_ci#include <thread> 17d9f0492fSopenharmony_ci#include <string> 18d9f0492fSopenharmony_ci#include <iostream> 19d9f0492fSopenharmony_ci#include <gtest/gtest.h> 20d9f0492fSopenharmony_ci 21d9f0492fSopenharmony_ci#include "accesstoken_kit.h" 22d9f0492fSopenharmony_ci#include "parameter.h" 23d9f0492fSopenharmony_ci#include "system_ability_definition.h" 24d9f0492fSopenharmony_ci#include "if_system_ability_manager.h" 25d9f0492fSopenharmony_ci#include "iservice_registry.h" 26d9f0492fSopenharmony_ci#include "parcel.h" 27d9f0492fSopenharmony_ci#include "string_ex.h" 28d9f0492fSopenharmony_ci#include "device_info_kits.h" 29d9f0492fSopenharmony_ci#include "device_info_load.h" 30d9f0492fSopenharmony_ci#include "device_info_proxy.h" 31d9f0492fSopenharmony_ci#include "idevice_info.h" 32d9f0492fSopenharmony_ci#include "device_info_stub.h" 33d9f0492fSopenharmony_ci#include "sysparam_errno.h" 34d9f0492fSopenharmony_ci#include "deviceinfoservice_ipc_interface_code.h" 35d9f0492fSopenharmony_ci 36d9f0492fSopenharmony_ciusing namespace testing::ext; 37d9f0492fSopenharmony_ciusing namespace std; 38d9f0492fSopenharmony_ciusing namespace OHOS; 39d9f0492fSopenharmony_ci 40d9f0492fSopenharmony_cistatic int g_tokenType = OHOS::Security::AccessToken::TOKEN_HAP; 41d9f0492fSopenharmony_cistatic int g_tokenVerifyResult = 0; 42d9f0492fSopenharmony_cinamespace OHOS { 43d9f0492fSopenharmony_cinamespace Security { 44d9f0492fSopenharmony_cinamespace AccessToken { 45d9f0492fSopenharmony_ciATokenTypeEnum AccessTokenKit::GetTokenTypeFlag(AccessTokenID tokenID) 46d9f0492fSopenharmony_ci{ 47d9f0492fSopenharmony_ci return static_cast<ATokenTypeEnum>(g_tokenType); 48d9f0492fSopenharmony_ci} 49d9f0492fSopenharmony_ciint AccessTokenKit::VerifyAccessToken(AccessTokenID tokenID, const std::string& permissionName) 50d9f0492fSopenharmony_ci{ 51d9f0492fSopenharmony_ci return g_tokenVerifyResult; 52d9f0492fSopenharmony_ci} 53d9f0492fSopenharmony_ci} // namespace AccessToken 54d9f0492fSopenharmony_ci} // namespace Security 55d9f0492fSopenharmony_ci} // namespace OHOS 56d9f0492fSopenharmony_ci 57d9f0492fSopenharmony_ciconst int UDID_LEN = 65; 58d9f0492fSopenharmony_cinamespace init_ut { 59d9f0492fSopenharmony_ciusing DeviceInfoServicePtr = OHOS::device_info::DeviceInfoService *; 60d9f0492fSopenharmony_ciclass DeviceInfoUnittest : public testing::Test { 61d9f0492fSopenharmony_cipublic: 62d9f0492fSopenharmony_ci DeviceInfoUnittest() {}; 63d9f0492fSopenharmony_ci virtual ~DeviceInfoUnittest() {}; 64d9f0492fSopenharmony_ci static void SetUpTestCase(void) {}; 65d9f0492fSopenharmony_ci static void TearDownTestCase(void) {}; 66d9f0492fSopenharmony_ci void SetUp() {}; 67d9f0492fSopenharmony_ci void TearDown() {}; 68d9f0492fSopenharmony_ci void TestBody(void) {}; 69d9f0492fSopenharmony_ci DeviceInfoServicePtr GetDeviceInfoService() 70d9f0492fSopenharmony_ci { 71d9f0492fSopenharmony_ci static DeviceInfoServicePtr deviceInfoServicePtr = nullptr; 72d9f0492fSopenharmony_ci if (deviceInfoServicePtr == nullptr) { 73d9f0492fSopenharmony_ci deviceInfoServicePtr = new OHOS::device_info::DeviceInfoService(0, true); 74d9f0492fSopenharmony_ci if (deviceInfoServicePtr == nullptr) { 75d9f0492fSopenharmony_ci return nullptr; 76d9f0492fSopenharmony_ci } 77d9f0492fSopenharmony_ci deviceInfoServicePtr->OnStart(); 78d9f0492fSopenharmony_ci } 79d9f0492fSopenharmony_ci return deviceInfoServicePtr; 80d9f0492fSopenharmony_ci } 81d9f0492fSopenharmony_ci}; 82d9f0492fSopenharmony_ci 83d9f0492fSopenharmony_ciHWTEST_F(DeviceInfoUnittest, Init_DevInfoAgentTest_001, TestSize.Level1) 84d9f0492fSopenharmony_ci{ 85d9f0492fSopenharmony_ci OHOS::device_info::DeviceInfoKits &kits = OHOS::device_info::DeviceInfoKits::GetInstance(); 86d9f0492fSopenharmony_ci std::string serial = {}; 87d9f0492fSopenharmony_ci int ret = kits.GetSerialID(serial); 88d9f0492fSopenharmony_ci EXPECT_EQ(ret, SYSPARAM_PERMISSION_DENIED); 89d9f0492fSopenharmony_ci ret = kits.GetUdid(serial); 90d9f0492fSopenharmony_ci EXPECT_EQ(ret, SYSPARAM_PERMISSION_DENIED); 91d9f0492fSopenharmony_ci} 92d9f0492fSopenharmony_ci 93d9f0492fSopenharmony_ciHWTEST_F(DeviceInfoUnittest, Init_DevInfoDiedTest_001, TestSize.Level1) 94d9f0492fSopenharmony_ci{ 95d9f0492fSopenharmony_ci sptr<ISystemAbilityManager> samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 96d9f0492fSopenharmony_ci DINFO_CHECK(samgr != nullptr, return, "Get samgr failed"); 97d9f0492fSopenharmony_ci sptr<IRemoteObject> object = samgr->GetSystemAbility(SYSPARAM_DEVICE_SERVICE_ID); 98d9f0492fSopenharmony_ci DINFO_CHECK(object != nullptr, return, "Get deviceinfo manager object from samgr failed"); 99d9f0492fSopenharmony_ci OHOS::device_info::DeviceInfoKits &kits = OHOS::device_info::DeviceInfoKits::GetInstance(); 100d9f0492fSopenharmony_ci if (kits.GetDeathRecipient() != nullptr) { 101d9f0492fSopenharmony_ci kits.GetDeathRecipient()->OnRemoteDied(object); 102d9f0492fSopenharmony_ci } 103d9f0492fSopenharmony_ci std::string serial = {}; 104d9f0492fSopenharmony_ci int ret = kits.GetSerialID(serial); 105d9f0492fSopenharmony_ci EXPECT_EQ(ret, SYSPARAM_PERMISSION_DENIED); 106d9f0492fSopenharmony_ci} 107d9f0492fSopenharmony_ci 108d9f0492fSopenharmony_ciHWTEST_F(DeviceInfoUnittest, Init_DevInfoAgentFail_001, TestSize.Level1) 109d9f0492fSopenharmony_ci{ 110d9f0492fSopenharmony_ci sptr<OHOS::device_info::DeviceInfoLoad> deviceInfoLoad = new (std::nothrow) OHOS::device_info::DeviceInfoLoad(); 111d9f0492fSopenharmony_ci ASSERT_NE(deviceInfoLoad, nullptr); 112d9f0492fSopenharmony_ci deviceInfoLoad->OnLoadSystemAbilityFail(SYSPARAM_DEVICE_SERVICE_ID); 113d9f0492fSopenharmony_ci deviceInfoLoad->OnLoadSystemAbilityFail(SYSPARAM_DEVICE_SERVICE_ID + 1); 114d9f0492fSopenharmony_ci 115d9f0492fSopenharmony_ci OHOS::device_info::DeviceInfoKits &kits = OHOS::device_info::DeviceInfoKits::GetInstance(); 116d9f0492fSopenharmony_ci kits.FinishStartSAFailed(); 117d9f0492fSopenharmony_ci} 118d9f0492fSopenharmony_ci 119d9f0492fSopenharmony_ciHWTEST_F(DeviceInfoUnittest, Init_DeviceInfoServiceInvalidTokenTest_001, TestSize.Level1) 120d9f0492fSopenharmony_ci{ 121d9f0492fSopenharmony_ci string result; 122d9f0492fSopenharmony_ci DeviceInfoServicePtr deviceInfoService = GetDeviceInfoService(); 123d9f0492fSopenharmony_ci ASSERT_NE(deviceInfoService, nullptr); 124d9f0492fSopenharmony_ci MessageParcel data; 125d9f0492fSopenharmony_ci MessageParcel reply; 126d9f0492fSopenharmony_ci MessageOption option; 127d9f0492fSopenharmony_ci g_tokenType = OHOS::Security::AccessToken::TOKEN_INVALID; 128d9f0492fSopenharmony_ci data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor()); 129d9f0492fSopenharmony_ci deviceInfoService->OnRemoteRequest 130d9f0492fSopenharmony_ci (static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_UDID), data, reply, option); 131d9f0492fSopenharmony_ci} 132d9f0492fSopenharmony_ci 133d9f0492fSopenharmony_ciHWTEST_F(DeviceInfoUnittest, Init_DeviceInfoServiceFailTest_001, TestSize.Level1) 134d9f0492fSopenharmony_ci{ 135d9f0492fSopenharmony_ci string result; 136d9f0492fSopenharmony_ci DeviceInfoServicePtr deviceInfoService = GetDeviceInfoService(); 137d9f0492fSopenharmony_ci ASSERT_NE(deviceInfoService, nullptr); 138d9f0492fSopenharmony_ci MessageParcel data; 139d9f0492fSopenharmony_ci MessageParcel reply; 140d9f0492fSopenharmony_ci MessageOption option; 141d9f0492fSopenharmony_ci g_tokenType = OHOS::Security::AccessToken::TOKEN_HAP; 142d9f0492fSopenharmony_ci g_tokenVerifyResult = OHOS::Security::AccessToken::TypePermissionState::PERMISSION_DENIED; 143d9f0492fSopenharmony_ci 144d9f0492fSopenharmony_ci // udid 145d9f0492fSopenharmony_ci data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor()); 146d9f0492fSopenharmony_ci deviceInfoService->OnRemoteRequest 147d9f0492fSopenharmony_ci (static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_UDID), 148d9f0492fSopenharmony_ci data, reply, option); 149d9f0492fSopenharmony_ci // serial 150d9f0492fSopenharmony_ci data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor()); 151d9f0492fSopenharmony_ci deviceInfoService->OnRemoteRequest 152d9f0492fSopenharmony_ci (static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID), 153d9f0492fSopenharmony_ci data, reply, option); 154d9f0492fSopenharmony_ci} 155d9f0492fSopenharmony_ci 156d9f0492fSopenharmony_ciHWTEST_F(DeviceInfoUnittest, Init_DeviceInfoServiceTest_001, TestSize.Level1) 157d9f0492fSopenharmony_ci{ 158d9f0492fSopenharmony_ci string result; 159d9f0492fSopenharmony_ci DeviceInfoServicePtr deviceInfoService = GetDeviceInfoService(); 160d9f0492fSopenharmony_ci ASSERT_NE(deviceInfoService, nullptr); 161d9f0492fSopenharmony_ci MessageParcel data; 162d9f0492fSopenharmony_ci MessageParcel reply; 163d9f0492fSopenharmony_ci MessageOption option; 164d9f0492fSopenharmony_ci g_tokenType = OHOS::Security::AccessToken::TOKEN_HAP; 165d9f0492fSopenharmony_ci g_tokenVerifyResult = OHOS::Security::AccessToken::TypePermissionState::PERMISSION_GRANTED; 166d9f0492fSopenharmony_ci data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor()); 167d9f0492fSopenharmony_ci deviceInfoService->OnRemoteRequest 168d9f0492fSopenharmony_ci (static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_UDID), 169d9f0492fSopenharmony_ci data, reply, option); 170d9f0492fSopenharmony_ci data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor()); 171d9f0492fSopenharmony_ci deviceInfoService->OnRemoteRequest 172d9f0492fSopenharmony_ci (static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID), 173d9f0492fSopenharmony_ci data, reply, option); 174d9f0492fSopenharmony_ci data.WriteInterfaceToken(OHOS::device_info::DeviceInfoStub::GetDescriptor()); 175d9f0492fSopenharmony_ci deviceInfoService->OnRemoteRequest 176d9f0492fSopenharmony_ci (static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID) + 1, 177d9f0492fSopenharmony_ci data, reply, option); 178d9f0492fSopenharmony_ci 179d9f0492fSopenharmony_ci deviceInfoService->OnRemoteRequest 180d9f0492fSopenharmony_ci (static_cast<uint32_t> (OHOS::device_info::DeviceInfoInterfaceCode::COMMAND_GET_SERIAL_ID) + 1, 181d9f0492fSopenharmony_ci data, reply, option); 182d9f0492fSopenharmony_ci std::this_thread::sleep_for(std::chrono::seconds(3)); // wait sa unload 3s 183d9f0492fSopenharmony_ci deviceInfoService->GetUdid(result); 184d9f0492fSopenharmony_ci deviceInfoService->GetSerialID(result); 185d9f0492fSopenharmony_ci deviceInfoService->OnStop(); 186d9f0492fSopenharmony_ci std::vector<std::u16string> args = {}; 187d9f0492fSopenharmony_ci deviceInfoService->Dump(STDOUT_FILENO, args); 188d9f0492fSopenharmony_ci deviceInfoService->Dump(-1, args); 189d9f0492fSopenharmony_ci} 190d9f0492fSopenharmony_ci 191d9f0492fSopenharmony_ciHWTEST_F(DeviceInfoUnittest, Init_TestInterface_001, TestSize.Level1) 192d9f0492fSopenharmony_ci{ 193d9f0492fSopenharmony_ci char localDeviceId[UDID_LEN] = {0}; 194d9f0492fSopenharmony_ci int ret = AclGetDevUdid(nullptr, UDID_LEN); 195d9f0492fSopenharmony_ci ASSERT_NE(ret, 0); 196d9f0492fSopenharmony_ci ret = AclGetDevUdid(localDeviceId, 2); // 2 test 197d9f0492fSopenharmony_ci ASSERT_NE(ret, 0); 198d9f0492fSopenharmony_ci 199d9f0492fSopenharmony_ci ret = AclGetDevUdid(localDeviceId, UDID_LEN); 200d9f0492fSopenharmony_ci const char *serialNumber = AclGetSerial(); 201d9f0492fSopenharmony_ci EXPECT_NE(nullptr, serialNumber); 202d9f0492fSopenharmony_ci} 203d9f0492fSopenharmony_ci 204d9f0492fSopenharmony_ciHWTEST_F(DeviceInfoUnittest, Init_TestDeviceInfoProxy_001, TestSize.Level1) 205d9f0492fSopenharmony_ci{ 206d9f0492fSopenharmony_ci sptr<device_info::DeviceInfoProxy> proxy; 207d9f0492fSopenharmony_ci { 208d9f0492fSopenharmony_ci OHOS::device_info::DeviceInfoKits &kits = device_info::DeviceInfoKits::GetInstance(); 209d9f0492fSopenharmony_ci std::unique_lock<std::mutex> lock(kits.lock_); 210d9f0492fSopenharmony_ci auto remotePtr = device_info::DeviceInfoKits::GetInstance().GetService(lock); 211d9f0492fSopenharmony_ci ASSERT_NE(remotePtr, nullptr); 212d9f0492fSopenharmony_ci auto remote = remotePtr->AsObject(); 213d9f0492fSopenharmony_ci proxy = new(std::nothrow) device_info::DeviceInfoProxy(remote); 214d9f0492fSopenharmony_ci ASSERT_NE(proxy, nullptr); 215d9f0492fSopenharmony_ci } 216d9f0492fSopenharmony_ci device_info::DeviceInfoKits::GetInstance().FinishStartSASuccess(proxy->AsObject()); 217d9f0492fSopenharmony_ci std::string udid; 218d9f0492fSopenharmony_ci std::string serialId; 219d9f0492fSopenharmony_ci proxy->GetUdid(udid); 220d9f0492fSopenharmony_ci proxy->GetSerialID(serialId); 221d9f0492fSopenharmony_ci 222d9f0492fSopenharmony_ci char localDeviceId[UDID_LEN] = {0}; 223d9f0492fSopenharmony_ci (void)AclGetDevUdid(localDeviceId, UDID_LEN); 224d9f0492fSopenharmony_ci const char *serialNumber = AclGetSerial(); 225d9f0492fSopenharmony_ci EXPECT_NE(nullptr, serialNumber); 226d9f0492fSopenharmony_ci} 227d9f0492fSopenharmony_ci 228d9f0492fSopenharmony_ciHWTEST_F(DeviceInfoUnittest, Init_TestDeviceInfoProxy_002, TestSize.Level1) 229d9f0492fSopenharmony_ci{ 230d9f0492fSopenharmony_ci sptr<device_info::DeviceInfoProxy> proxy = new(std::nothrow) device_info::DeviceInfoProxy(nullptr); 231d9f0492fSopenharmony_ci ASSERT_NE(proxy, nullptr); 232d9f0492fSopenharmony_ci 233d9f0492fSopenharmony_ci std::string udid; 234d9f0492fSopenharmony_ci std::string serialId; 235d9f0492fSopenharmony_ci proxy->GetUdid(udid); 236d9f0492fSopenharmony_ci proxy->GetSerialID(serialId); 237d9f0492fSopenharmony_ci} 238d9f0492fSopenharmony_ci} // namespace init_ut 239