diff --git a/tests/unittests/backup_sa/module_ipc/service_stub_test.cpp b/tests/unittests/backup_sa/module_ipc/service_stub_test.cpp index 00723373e1d2af74985991d78237e7ace1c5399a..fbfe78d09f4f9953214cb0b91756f3e6960fd791 100644 --- a/tests/unittests/backup_sa/module_ipc/service_stub_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_stub_test.cpp @@ -36,8 +36,25 @@ using namespace testing; namespace { const string BUNDLE_NAME = "com.example.app2backup"; const string FILE_NAME = "1.tar"; +const string FILE_NAME_MANIFEST = "manifest.rp"; } // namespace +template +static bool WriteParcelableVector(const std::vector &parcelableVector, Parcel &data) +{ + if (!data.WriteUint32(parcelableVector.size())) { + return false; + } + + for (const auto &parcelable : parcelableVector) { + if (!data.WriteParcelable(&parcelable)) { + return false; + } + } + + return true; +} + class MockService final : public ServiceStub { public: MOCK_METHOD1(InitRestoreSession, ErrCode(sptr remote)); @@ -505,4 +522,279 @@ HWTEST_F(ServiceStubTest, SUB_backup_sa_ServiceStub_Release_0100, testing::ext:: } GTEST_LOG_(INFO) << "ServiceStubTest-end SUB_backup_sa_ServiceStub_Release_0100"; } + +/** + * @tc.number: SUB_backup_sa_ServiceStub_GetLocalCapabilitiesIncremental_0100 + * @tc.name: SUB_backup_sa_ServiceStub_GetLocalCapabilitiesIncremental_0100 + * @tc.desc: Test function of GetLocalCapabilitiesIncremental interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I91C0P + */ +HWTEST_F(ServiceStubTest, SUB_backup_sa_ServiceStub_GetLocalCapabilitiesIncremental_0100, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "ServiceStubTest-begin SUB_backup_sa_ServiceStub_GetLocalCapabilitiesIncremental_0100"; + try { + sptr serviceSptr = sptr(new MockService()); + EXPECT_CALL(*serviceSptr, GetLocalCapabilitiesIncremental(_)) + .Times(1) + .WillOnce(Invoke(serviceSptr.GetRefPtr(), &MockService::InvokeGetLocalCapabilities)); + MessageParcel data; + MessageParcel reply; + MessageOption option; + + vector bundleNames; + BIncrementalData data1; + data1.bundleName = BUNDLE_NAME; + data1.lastIncrementalTime = 0; + bundleNames.push_back(data1); + + EXPECT_TRUE(data.WriteInterfaceToken(IService::GetDescriptor())); + EXPECT_TRUE(WriteParcelableVector(bundleNames, data)); + EXPECT_EQ(BError(BError::Codes::OK), + serviceSptr->OnRemoteRequest( + static_cast(IServiceInterfaceCode::SERVICE_CMD_GET_LOCAL_CAPABILITIES_INCREMENTAL), + data, reply, option)); + UniqueFd fd(reply.ReadFileDescriptor()); + EXPECT_GT(fd, BError(BError::Codes::OK)); + GTEST_LOG_(INFO) << "ServiceStubTest-CmdGetLocalCapabilitiesIncremental Brances"; + MessageParcel brances; + EXPECT_TRUE(brances.WriteInterfaceToken(IService::GetDescriptor())); + EXPECT_NE(BError(BError::Codes::OK), + serviceSptr->OnRemoteRequest( + static_cast(IServiceInterfaceCode::SERVICE_CMD_GET_LOCAL_CAPABILITIES_INCREMENTAL), + brances, reply, option)); + serviceSptr = nullptr; + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ServiceStubTest-an exception occurred by GetLocalCapabilitiesIncremental."; + } + GTEST_LOG_(INFO) << "ServiceStubTest-end SUB_backup_sa_ServiceStub_GetLocalCapabilitiesIncremental_0100"; +} + +/** + * @tc.number: SUB_backup_sa_ServiceStub_InitIncrementalBackupSession_0100 + * @tc.name: SUB_backup_sa_ServiceStub_InitIncrementalBackupSession_0100 + * @tc.desc: Test function of InitIncrementalBackupSession interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I91C0P + */ +HWTEST_F(ServiceStubTest, SUB_backup_sa_ServiceStub_InitIncrementalBackupSession_0100, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "ServiceStubTest-begin SUB_backup_sa_ServiceStub_InitIncrementalBackupSession_0100"; + try { + MockService service; + EXPECT_CALL(service, InitIncrementalBackupSession(_)).WillOnce(Return(BError(BError::Codes::OK))); + MessageParcel data; + MessageParcel reply; + MessageOption option; + sptr remote = sptr(new ServiceReverseMock()); + + EXPECT_TRUE(data.WriteInterfaceToken(IService::GetDescriptor())); + EXPECT_TRUE(data.WriteRemoteObject(remote->AsObject().GetRefPtr())); + + EXPECT_EQ(BError(BError::Codes::OK), + service.OnRemoteRequest( + static_cast(IServiceInterfaceCode::SERVICE_CMD_INIT_INCREMENTAL_BACKUP_SESSION), data, + reply, option)); + remote = nullptr; + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ServiceStubTest-an exception occurred by InitIncrementalBackupSession."; + } + GTEST_LOG_(INFO) << "ServiceStubTest-end SUB_backup_sa_ServiceStub_InitIncrementalBackupSession_0100"; +} + +/** + * @tc.number: SUB_backup_sa_ServiceStub_AppendBundlesIncrementalBackupSession_0100 + * @tc.name: SUB_backup_sa_ServiceStub_AppendBundlesIncrementalBackupSession_0100 + * @tc.desc: Test function of AppendBundlesIncrementalBackupSession interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I91C0P + */ +HWTEST_F(ServiceStubTest, + SUB_backup_sa_ServiceStub_AppendBundlesIncrementalBackupSession_0100, + testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "ServiceStubTest-begin SUB_backup_sa_ServiceStub_AppendBundlesIncrementalBackupSession_0100"; + try { + MockService service; + EXPECT_CALL(service, AppendBundlesIncrementalBackupSession(_)).WillOnce(Return(BError(BError::Codes::OK))); + MessageParcel data; + MessageParcel reply; + MessageOption option; + + vector bundleNames; + BIncrementalData data1; + data1.bundleName = BUNDLE_NAME; + data1.lastIncrementalTime = 0; + bundleNames.push_back(data1); + + EXPECT_TRUE(data.WriteInterfaceToken(IService::GetDescriptor())); + EXPECT_TRUE(WriteParcelableVector(bundleNames, data)); + EXPECT_EQ( + BError(BError::Codes::OK), + service.OnRemoteRequest( + static_cast(IServiceInterfaceCode::SERVICE_CMD_APPEND_BUNDLES_INCREMENTAL_BACKUP_SESSION), + data, reply, option)); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ServiceStubTest-an exception occurred by AppendBundlesIncrementalBackupSession."; + } + GTEST_LOG_(INFO) << "ServiceStubTest-end SUB_backup_sa_ServiceStub_AppendBundlesIncrementalBackupSession_0100"; +} + +/** + * @tc.number: SUB_backup_sa_ServiceStub_PublishIncrementalFile_0100 + * @tc.name: SUB_backup_sa_ServiceStub_PublishIncrementalFile_0100 + * @tc.desc: Test function of PublishIncrementalFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I91C0P + */ +HWTEST_F(ServiceStubTest, SUB_backup_sa_ServiceStub_PublishIncrementalFile_0100, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "ServiceStubTest-begin SUB_backup_sa_ServiceStub_PublishIncrementalFile_0100"; + try { + MockService service; + EXPECT_CALL(service, PublishIncrementalFile(_)).WillOnce(Return(BError(BError::Codes::OK))); + MessageParcel data; + MessageParcel reply; + MessageOption option; + + BFileInfo fileInfo {BUNDLE_NAME, FILE_NAME, -1}; + EXPECT_TRUE(data.WriteInterfaceToken(IService::GetDescriptor())); + EXPECT_TRUE(data.WriteParcelable(&fileInfo)); + EXPECT_EQ( + BError(BError::Codes::OK), + service.OnRemoteRequest(static_cast(IServiceInterfaceCode::SERVICE_CMD_PUBLISH_INCREMENTAL_FILE), + data, reply, option)); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ServiceStubTest-an exception occurred by PublishIncrementalFile."; + } + GTEST_LOG_(INFO) << "ServiceStubTest-end SUB_backup_sa_ServiceStub_PublishIncrementalFile_0100"; +} + +/** + * @tc.number: SUB_backup_sa_ServiceStub_AppIncrementalFileReady_0100 + * @tc.name: SUB_backup_sa_ServiceStub_AppIncrementalFileReady_0100 + * @tc.desc: Test function of AppIncrementalFileReady interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I91C0P + */ +HWTEST_F(ServiceStubTest, SUB_backup_sa_ServiceStub_AppIncrementalFileReady_0100, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "ServiceStubTest-begin SUB_backup_sa_ServiceStub_AppIncrementalFileReady_0100"; + try { + MockService service; + EXPECT_CALL(service, AppIncrementalFileReady(_, _, _)).WillOnce(Return(BError(BError::Codes::OK))); + MessageParcel data; + MessageParcel reply; + MessageOption option; + + TestManager tm("ServiceStub_GetFd_0400"); + std::string filePath = tm.GetRootDirCurTest().append(FILE_NAME); + UniqueFd fd(open(filePath.data(), O_RDONLY | O_CREAT, S_IRUSR | S_IWUSR)); + TestManager tm1("ServiceStub_GetFd_0500"); + std::string filePath1 = tm1.GetRootDirCurTest().append(FILE_NAME_MANIFEST); + UniqueFd manifestFd(open(filePath1.data(), O_RDONLY | O_CREAT, S_IRUSR | S_IWUSR)); + + EXPECT_TRUE(data.WriteInterfaceToken(IService::GetDescriptor())); + EXPECT_TRUE(data.WriteString(FILE_NAME)); + EXPECT_TRUE(data.WriteFileDescriptor(fd)); + EXPECT_TRUE(data.WriteFileDescriptor(manifestFd)); + EXPECT_EQ(BError(BError::Codes::OK), + service.OnRemoteRequest( + static_cast(IServiceInterfaceCode::SERVICE_CMD_APP_INCREMENTAL_FILE_READY), data, reply, + option)); + GTEST_LOG_(INFO) << "ServiceStubTest-begin-CmdAppIncrementalFileReady Brances"; + MessageParcel brances; + EXPECT_TRUE(brances.WriteInterfaceToken(IService::GetDescriptor())); + EXPECT_TRUE(brances.WriteString(FILE_NAME)); + EXPECT_NE(BError(BError::Codes::OK), + service.OnRemoteRequest( + static_cast(IServiceInterfaceCode::SERVICE_CMD_APP_INCREMENTAL_FILE_READY), brances, + reply, option)); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ServiceStubTest-an exception occurred by AppIncrementalFileReady."; + } + GTEST_LOG_(INFO) << "ServiceStubTest-end SUB_backup_sa_ServiceStub_AppIncrementalFileReady_0100"; +} + +/** + * @tc.number: SUB_backup_sa_ServiceStub_AppIncrementalDone_0100 + * @tc.name: SUB_backup_sa_ServiceStub_AppIncrementalDone_0100 + * @tc.desc: Test function of AppIncrementalDone interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I91C0P + */ +HWTEST_F(ServiceStubTest, SUB_backup_sa_ServiceStub_AppIncrementalDone_0100, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "ServiceStubTest-begin SUB_backup_sa_ServiceStub_AppIncrementalDone_0100"; + try { + MockService service; + EXPECT_CALL(service, AppIncrementalDone(_)).WillOnce(Return(BError(BError::Codes::OK))); + MessageParcel data; + MessageParcel reply; + MessageOption option; + + EXPECT_TRUE(data.WriteInterfaceToken(IService::GetDescriptor())); + EXPECT_TRUE(data.WriteInt32(BError(BError::Codes::OK))); + EXPECT_EQ( + BError(BError::Codes::OK), + service.OnRemoteRequest(static_cast(IServiceInterfaceCode::SERVICE_CMD_APP_INCREMENTAL_DONE), + data, reply, option)); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ServiceStubTest-an exception occurred by AppIncrementalDone."; + } + GTEST_LOG_(INFO) << "ServiceStubTest-end SUB_backup_sa_ServiceStub_AppIncrementalDone_0100"; +} + +/** + * @tc.number: SUB_backup_sa_ServiceStub_GetIncrementalFileHandle_0100 + * @tc.name: SUB_backup_sa_ServiceStub_GetIncrementalFileHandle_0100 + * @tc.desc: Test function of GetIncrementalFileHandle interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: I91C0P + */ +HWTEST_F(ServiceStubTest, SUB_backup_sa_ServiceStub_GetIncrementalFileHandle_0100, testing::ext::TestSize.Level0) +{ + GTEST_LOG_(INFO) << "ServiceStubTest-begin SUB_backup_sa_ServiceStub_GetIncrementalFileHandle_0100"; + try { + MockService service; + EXPECT_CALL(service, GetIncrementalFileHandle(_, _)).WillOnce(Return(BError(BError::Codes::OK))); + MessageParcel data; + MessageParcel reply; + MessageOption option; + option.SetFlags(MessageOption::TF_ASYNC); + + EXPECT_TRUE(data.WriteInterfaceToken(IService::GetDescriptor())); + EXPECT_TRUE(data.WriteString(BUNDLE_NAME)); + EXPECT_TRUE(data.WriteString(FILE_NAME)); + EXPECT_EQ( + BError(BError::Codes::OK), + service.OnRemoteRequest(static_cast(IServiceInterfaceCode::SERVICE_CMD_GET_INCREMENTAL_FILE_NAME), + data, reply, option)); + EXPECT_NE(BError(BError::Codes::OK), service.OnRemoteRequest(3333, data, reply, option)); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ServiceStubTest-an exception occurred by GetIncrementalFileHandle."; + } + GTEST_LOG_(INFO) << "ServiceStubTest-end SUB_backup_sa_ServiceStub_GetIncrementalFileHandle_0100"; +} } // namespace OHOS::FileManagement::Backup \ No newline at end of file