diff --git a/services/implementation/include/device_manager_service_impl.h b/services/implementation/include/device_manager_service_impl.h index 7e22d16a890f33f2410849e04ada8542e191a20a..cf9ceba0a93769a4827f706568867f3ea2eeab56 100644 --- a/services/implementation/include/device_manager_service_impl.h +++ b/services/implementation/include/device_manager_service_impl.h @@ -264,10 +264,10 @@ private: std::map &delProfileMap, std::vector> &delACLInfoVec, std::vector &userIdVec); - void GetDelACLInfoVec(const int32_t &accessTokenId, + void GetDelACLInfoVec(int32_t accessTokenId, std::vector &profiles, std::vector> &delACLInfoVec, std::vector &userIdVec, - const uint32_t &userId); + const DevUserInfo &info); void DeleteAclByDelProfileMap( const std::map &delProfileMap, diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 0d38868934dd057183e676d037900ceca26f7396..8e73f01a8fb6c6c6e0e24e2d69195c1a08b9eb4f 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -2342,12 +2342,14 @@ int32_t DeviceManagerServiceImpl::ProcessAppUninstall(int32_t userId, int32_t ac std::string localUdid = std::string(localDeviceId); std::vector> delACLInfoVec; std::vector userIdVec; - GetDelACLInfoVec(accessTokenId, profiles, delACLInfoVec, userIdVec, userId); - + DevUserInfo info; + info.deviceId = localUdid; + info.userId = userId; + GetDelACLInfoVec(accessTokenId, profiles, delACLInfoVec, userIdVec, info); if (delACLInfoVec.size() == 0 || userIdVec.size() == 0) { return DM_OK; } - + CHECK_NULL_RETURN(hiChainConnector_, ERR_DM_POINT_NULL); hiChainConnector_->DeleteGroupByACL(delACLInfoVec, userIdVec); return DM_OK; @@ -2438,15 +2440,12 @@ void DeviceManagerServiceImpl::DeleteAclByTokenId(const int32_t accessTokenId, } } -void DeviceManagerServiceImpl::GetDelACLInfoVec(const int32_t &accessTokenId, +void DeviceManagerServiceImpl::GetDelACLInfoVec(int32_t accessTokenId, std::vector &profiles, std::vector> &delACLInfoVec, std::vector &userIdVec, - const uint32_t &userId) + const DevUserInfo &info) { std::map delProfileMap; - char localDeviceId[DEVICE_UUID_LENGTH] = {0}; - GetDevUdid(localDeviceId, DEVICE_UUID_LENGTH); - std::string localUdid = std::string(localDeviceId); for (auto &item : profiles) { int64_t accesssertokenId = item.GetAccesser().GetAccesserTokenId(); int64_t accessseetokenId = item.GetAccessee().GetAccesseeTokenId(); @@ -2455,23 +2454,24 @@ void DeviceManagerServiceImpl::GetDelACLInfoVec(const int32_t &accessTokenId, continue; } if (accessTokenId == static_cast(accesssertokenId) && - userId == item.GetAccesser().GetAccesserUserId() && - localUdid == item.GetAccessee().GetAccesseeDeviceId()) { + info.userId == item.GetAccesser().GetAccesserUserId() && + info.deviceId == item.GetAccessee().GetAccesseeDeviceId()) { DmOfflineParam offlineParam; delProfileMap[item.GetAccessControlId()] = item; - DeviceProfileConnector::GetInstance().CacheAcerAclId(item, offlineParam.needDelAclInfos); + DeviceProfileConnector::GetInstance().CacheAceeAclId(item, offlineParam.needDelAclInfos); DeleteSkCredAndAcl(offlineParam.needDelAclInfos); if (item.GetBindLevel() == USER) { userIdVec.push_back(item.GetAccessee().GetAccesseeUserId()); delACLInfoVec.push_back(std::pair(item.GetAccessee().GetAccesseeUserId(), item.GetAccesser().GetAccesserDeviceId())); } + continue; } if (accessTokenId == static_cast(accessseetokenId) && - userId == item.GetAccessee().GetAccesseeUserId() && - localUdid == item.GetAccesser().GetAccesserDeviceId()) { + info.userId == item.GetAccessee().GetAccesseeUserId() && + info.deviceId == item.GetAccesser().GetAccesserDeviceId()) { DmOfflineParam offlineParam; - DeviceProfileConnector::GetInstance().CacheAceeAclId(item, offlineParam.needDelAclInfos); + DeviceProfileConnector::GetInstance().CacheAcerAclId(item, offlineParam.needDelAclInfos); delProfileMap[item.GetAccessControlId()] = item; DeleteSkCredAndAcl(offlineParam.needDelAclInfos); if (item.GetBindLevel() == USER) { @@ -2479,9 +2479,10 @@ void DeviceManagerServiceImpl::GetDelACLInfoVec(const int32_t &accessTokenId, delACLInfoVec.push_back(std::pair(item.GetAccesser().GetAccesserUserId(), item.GetAccessee().GetAccesseeDeviceId())); } + continue; } } - DeleteAclByDelProfileMap(delProfileMap, profiles, localUdid); + DeleteAclByDelProfileMap(delProfileMap, profiles, info.deviceId); } void DeviceManagerServiceImpl::DeleteAclByDelProfileMap( diff --git a/test/unittest/UTTest_device_manager_service_impl_first.cpp b/test/unittest/UTTest_device_manager_service_impl_first.cpp index 3badcf2992de30ab7a6b0953da5f31fdb3e8f0a8..125eb65751f39e3df40bb3739aeb1f0b66f5d0a7 100644 --- a/test/unittest/UTTest_device_manager_service_impl_first.cpp +++ b/test/unittest/UTTest_device_manager_service_impl_first.cpp @@ -63,6 +63,110 @@ void DeviceManagerServiceImplFirstTest::TearDownTestCase() } namespace { +void AddAccessControlProfileSecond(std::vector& accessControlProfiles) +{ + int32_t userId = 123456; + int32_t bindType = 256; + int32_t deviceIdType = 1; + uint32_t bindLevel = 3; + uint32_t status = 1; + uint32_t authenticationType = 2; + uint32_t accesserId = 1; + uint32_t tokenId = 1001; + + std::string oldAccountId = "oldAccountId"; + std::string newAccountId = "newAccountId"; + std::string deviceIdEr = "remoteDeviceId"; + std::string deviceIdEe = "localDeviceId"; + std::string trustDeviceId = "localDeviceId"; + + DistributedDeviceProfile::Accesser accesser; + accesser.SetAccesserId(accesserId); + accesser.SetAccesserDeviceId(deviceIdEr); + accesser.SetAccesserUserId(userId); + accesser.SetAccesserAccountId(oldAccountId); + accesser.SetAccesserTokenId(tokenId); + accesser.SetAccesserBundleName("bundleName1"); + accesser.SetAccesserHapSignature("uph1"); + accesser.SetAccesserBindLevel(bindLevel); + + DistributedDeviceProfile::Accessee accessee; + accessee.SetAccesseeId(accesserId); + accessee.SetAccesseeDeviceId(deviceIdEe); + accessee.SetAccesseeUserId(userId); + accessee.SetAccesseeAccountId(newAccountId); + accessee.SetAccesseeTokenId(tokenId); + accessee.SetAccesseeBundleName("bundleName2"); + accessee.SetAccesseeHapSignature("uph1"); + accessee.SetAccesseeBindLevel(bindLevel); + + DistributedDeviceProfile::AccessControlProfile profileFifth; + profileFifth.SetAccessControlId(accesserId); + profileFifth.SetAccesserId(accesserId); + profileFifth.SetAccesseeId(accesserId); + profileFifth.SetTrustDeviceId(trustDeviceId); + profileFifth.SetBindType(bindType); + profileFifth.SetAuthenticationType(authenticationType); + profileFifth.SetDeviceIdType(deviceIdType); + profileFifth.SetStatus(status); + profileFifth.SetBindLevel(bindLevel); + profileFifth.SetAccesser(accesser); + profileFifth.SetAccessee(accessee); + accessControlProfiles.push_back(profileFifth); +} + +void AddAccessControlProfileFirst(std::vector& accessControlProfiles) +{ + int32_t userId = 123456; + int32_t bindType = 256; + int32_t deviceIdType = 1; + uint32_t bindLevel = 1; + uint32_t status = 1; + uint32_t authenticationType = 2; + uint32_t accesserId = 1; + uint32_t tokenId = 1001; + + std::string oldAccountId = "oldAccountId"; + std::string newAccountId = "newAccountId"; + std::string deviceIdEr = "remoteDeviceId"; + std::string deviceIdEe = "localDeviceId"; + std::string trustDeviceId = "123456"; + + DistributedDeviceProfile::Accesser accesser; + accesser.SetAccesserId(accesserId); + accesser.SetAccesserDeviceId(deviceIdEr); + accesser.SetAccesserUserId(userId); + accesser.SetAccesserAccountId(oldAccountId); + accesser.SetAccesserTokenId(tokenId); + accesser.SetAccesserBundleName("bundleName"); + accesser.SetAccesserHapSignature("uph1"); + accesser.SetAccesserBindLevel(bindLevel); + + DistributedDeviceProfile::Accessee accessee; + accessee.SetAccesseeId(accesserId); + accessee.SetAccesseeDeviceId(deviceIdEe); + accessee.SetAccesseeUserId(userId); + accessee.SetAccesseeAccountId(newAccountId); + accessee.SetAccesseeTokenId(tokenId); + accessee.SetAccesseeBundleName("bundleName"); + accessee.SetAccesseeHapSignature("uph1"); + accessee.SetAccesseeBindLevel(bindLevel); + + DistributedDeviceProfile::AccessControlProfile profileFifth; + profileFifth.SetAccessControlId(accesserId); + profileFifth.SetAccesserId(accesserId); + profileFifth.SetAccesseeId(accesserId); + profileFifth.SetTrustDeviceId(trustDeviceId); + profileFifth.SetBindType(bindType); + profileFifth.SetAuthenticationType(authenticationType); + profileFifth.SetDeviceIdType(deviceIdType); + profileFifth.SetStatus(status); + profileFifth.SetBindLevel(bindLevel); + profileFifth.SetAccesser(accesser); + profileFifth.SetAccessee(accessee); + accessControlProfiles.push_back(profileFifth); +} + HWTEST_F(DeviceManagerServiceImplFirstTest, GetDeviceIdAndUserId_101, testing::ext::TestSize.Level1) { int32_t userId = 1; @@ -303,7 +407,7 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleShareUnbindBroadCast_001, test EXPECT_CALL(*deviceProfileConnectorMock_, GetAccessControlProfile()) .WillOnce(Return(profiles)); EXPECT_CALL(*deviceProfileConnectorMock_, DeleteAccessControlById(_)) - .Times(0); + .Times(::testing::AtLeast(0)); deviceManagerServiceImpl_->HandleShareUnbindBroadCast(credId, userId, localUdid); } @@ -784,6 +888,197 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, DeleteAclByTokenId_002, testing::ext EXPECT_TRUE(delACLInfoVec.empty()); EXPECT_TRUE(userIdVec.empty()); } + +HWTEST_F(DeviceManagerServiceImplFirstTest, DeleteAclByDelProfileMap_001, testing::ext::TestSize.Level1) +{ + std::map delProfileMap; + delProfileMap[1] = DistributedDeviceProfile::AccessControlProfile(); + + std::vector profiles; + DistributedDeviceProfile::AccessControlProfile profile1; + profile1.SetAccessControlId(1); + profiles.push_back(profile1); + + DeviceManagerServiceImpl serviceImpl; + serviceImpl.DeleteAclByDelProfileMap(delProfileMap, profiles, "localUdid"); + + EXPECT_TRUE(profiles.empty()); +} + +HWTEST_F(DeviceManagerServiceImplFirstTest, DeleteAclByDelProfileMap_002, testing::ext::TestSize.Level1) +{ + std::map delProfileMap; + + std::vector profiles; + DistributedDeviceProfile::AccessControlProfile profile1; + profile1.SetAccessControlId(1); + profiles.push_back(profile1); + + DeviceManagerServiceImpl serviceImpl; + serviceImpl.DeleteAclByDelProfileMap(delProfileMap, profiles, "localUdid"); + + EXPECT_FALSE(profiles.empty()); +} + +HWTEST_F(DeviceManagerServiceImplFirstTest, DeleteAclByDelProfileMap_003, testing::ext::TestSize.Level1) +{ + std::map delProfileMap; + delProfileMap[1] = DistributedDeviceProfile::AccessControlProfile(); + + std::vector profiles; + DistributedDeviceProfile::AccessControlProfile profile1; + profile1.SetAccessControlId(2); + profiles.push_back(profile1); + + DeviceManagerServiceImpl serviceImpl; + serviceImpl.DeleteAclByDelProfileMap(delProfileMap, profiles, "localUdid"); + + EXPECT_FALSE(profiles.empty()); +} + +HWTEST_F(DeviceManagerServiceImplFirstTest, GetDelACLInfoVec_001, testing::ext::TestSize.Level1) +{ + int32_t accessTokenId = 123; + std::vector profiles; + std::vector> delACLInfoVec; + std::vector userIdVec; + uint32_t userId = 456; + std::string deviceId = "device1"; + DevUserInfo info = { deviceId, userId }; + + DistributedDeviceProfile::AccessControlProfile profile1; + profile1.GetAccesser().SetAccesserTokenId(456); + profile1.GetAccessee().SetAccesseeTokenId(789); + profile1.GetAccesser().SetAccesserUserId(userId); + profile1.GetAccessee().SetAccesseeDeviceId("device1"); + profile1.SetAccessControlId(1); + + profiles.push_back(profile1); + + deviceManagerServiceImpl_->GetDelACLInfoVec(accessTokenId, profiles, delACLInfoVec, userIdVec, info); + + EXPECT_TRUE(delACLInfoVec.empty()); + EXPECT_TRUE(userIdVec.empty()); +} + +HWTEST_F(DeviceManagerServiceImplFirstTest, GetDelACLInfoVec_002, testing::ext::TestSize.Level1) +{ + int64_t accessTokenId = 123; + std::vector profiles; + std::vector> delACLInfoVec; + std::vector userIdVec; + int32_t userId = 456; + std::string deviceId = "device1"; + DevUserInfo info = { deviceId, userId }; + + DistributedDeviceProfile::Accesser accesser; + accesser.SetAccesserTokenId(accessTokenId); + accesser.SetAccesserUserId(userId); + + DistributedDeviceProfile::Accessee accessee; + accessee.SetAccesseeTokenId(accessTokenId); + accessee.SetAccesseeDeviceId("device1"); + + DistributedDeviceProfile::AccessControlProfile profileFifth; + profileFifth.SetAccessControlId(1); + profileFifth.SetBindLevel(1); + profileFifth.SetAccesser(accesser); + profileFifth.SetAccessee(accessee); + profiles.push_back(profileFifth); + + deviceManagerServiceImpl_->GetDelACLInfoVec(accessTokenId, profiles, delACLInfoVec, userIdVec, info); + + EXPECT_FALSE(delACLInfoVec.empty()); + EXPECT_FALSE(userIdVec.empty()); +} + +HWTEST_F(DeviceManagerServiceImplFirstTest, GetDelACLInfoVec_003, testing::ext::TestSize.Level1) +{ + int64_t accessTokenId = 123; + std::vector profiles; + std::vector> delACLInfoVec; + std::vector userIdVec; + int32_t userId = 456; + std::string deviceId = "device1"; + DevUserInfo info = { deviceId, userId }; + + DistributedDeviceProfile::Accesser accesser; + accesser.SetAccesserTokenId(accessTokenId); + accesser.SetAccesserDeviceId("device1"); + + DistributedDeviceProfile::Accessee accessee; + accessee.SetAccesseeTokenId(accessTokenId); + accessee.SetAccesseeUserId(userId); + + DistributedDeviceProfile::AccessControlProfile profileFifth; + profileFifth.SetAccessControlId(1); + profileFifth.SetBindLevel(1); + profileFifth.SetAccesser(accesser); + profileFifth.SetAccessee(accessee); + profiles.push_back(profileFifth); + + deviceManagerServiceImpl_->GetDelACLInfoVec(accessTokenId, profiles, delACLInfoVec, userIdVec, info); + + EXPECT_FALSE(delACLInfoVec.empty()); + EXPECT_FALSE(userIdVec.empty()); +} + +HWTEST_F(DeviceManagerServiceImplFirstTest, ProcessAppUninstall_001, testing::ext::TestSize.Level1) +{ + int32_t userId = 1; + int32_t accessTokenId = 2; + + std::vector profiles; + EXPECT_CALL(*deviceProfileConnectorMock_, GetAllAclIncludeLnnAcl()).WillOnce(Return(profiles)); + + int32_t result = deviceManagerServiceImpl_->ProcessAppUninstall(userId, accessTokenId); + + EXPECT_EQ(result, DM_OK); +} + +HWTEST_F(DeviceManagerServiceImplFirstTest, ProcessAppUninstall_002, testing::ext::TestSize.Level1) +{ + int32_t userId = 1; + int32_t accessTokenId = 2; + + std::vector profiles; + AddAccessControlProfileSecond(profiles); + EXPECT_CALL(*deviceProfileConnectorMock_, GetAllAclIncludeLnnAcl()).WillOnce(Return(profiles)); + + int32_t result = deviceManagerServiceImpl_->ProcessAppUninstall(userId, accessTokenId); + + EXPECT_EQ(result, DM_OK); +} + +HWTEST_F(DeviceManagerServiceImplFirstTest, ProcessAppUninstall_003, testing::ext::TestSize.Level1) +{ + int32_t userId = 1; + int32_t accessTokenId = 2; + + std::vector profiles; + AddAccessControlProfileFirst(profiles); + EXPECT_CALL(*deviceProfileConnectorMock_, GetAllAclIncludeLnnAcl()).WillOnce(Return(profiles)); + deviceManagerServiceImpl_->hiChainConnector_ = nullptr; + + int32_t result = deviceManagerServiceImpl_->ProcessAppUninstall(userId, accessTokenId); + + EXPECT_EQ(result, DM_OK); +} + +HWTEST_F(DeviceManagerServiceImplFirstTest, ProcessAppUninstall_004, testing::ext::TestSize.Level1) +{ + int32_t userId = 1; + int32_t accessTokenId = 2; + + std::vector profiles; + AddAccessControlProfileFirst(profiles); + EXPECT_CALL(*deviceProfileConnectorMock_, GetAllAclIncludeLnnAcl()).WillOnce(Return(profiles)); + deviceManagerServiceImpl_->hiChainConnector_ = std::make_shared(); + + int32_t result = deviceManagerServiceImpl_->ProcessAppUninstall(userId, accessTokenId); + + EXPECT_EQ(result, DM_OK); +} } // namespace } // namespace DistributedHardware } // namespace OHOS diff --git a/test/unittest/mock/device_manager_service_impl_mock.h b/test/unittest/mock/device_manager_service_impl_mock.h index 6a31d6008d335490d14d9e1742ede635df578401..a2fa812d9ec61516a3cdcc5cd668ffd8a2f3f288 100644 --- a/test/unittest/mock/device_manager_service_impl_mock.h +++ b/test/unittest/mock/device_manager_service_impl_mock.h @@ -62,6 +62,8 @@ public: MOCK_METHOD(int32_t, UnAuthenticateDevice, (const std::string &, const std::string &, int32_t)); MOCK_METHOD(int32_t, UnBindDevice, (const std::string &, const std::string &, int32_t, const std::string &)); MOCK_METHOD(bool, CheckSharePeerSrc, (const std::string &peerUdid, const std::string &localUdid)); + MOCK_METHOD(void, HandleCredentialDeleted, (const char *, const char *, const std::string &, + std::string &)); MOCK_METHOD(void, HandleCredentialDeleted, (const char *, const char *, const std::string &, std::string &)); MOCK_METHOD(void, HandleShareUnbindBroadCast, (const std::string &, const int32_t &, const std::string &));