diff --git a/services/native/file_access_service/src/file_access_service.cpp b/services/native/file_access_service/src/file_access_service.cpp index ad336acc50d9232548984c06b5895dff506c372e..88eeff98a6492c20a1cb72a3c9791d6fbaca96a2 100644 --- a/services/native/file_access_service/src/file_access_service.cpp +++ b/services/native/file_access_service/src/file_access_service.cpp @@ -127,9 +127,11 @@ int32_t FileAccessService::RegisterNotify(Uri uri, bool notifyForDescendants, co // this is new callback, save this context obsContext->Ref(); code = obsManager_.save(obsContext); + HILOG_DEBUG("this is new callback, save this context uri =%{public}s", uri.ToString().c_str()); } else { // this callback is already in manager, add ref. obsManager_.get(code)->Ref(); + HILOG_DEBUG("this callback is already in manager, add ref uri =%{public}s", uri.ToString().c_str()); } string uriStr = uri.ToString(); lock_guard lock(nodeMutex_); @@ -261,6 +263,7 @@ int32_t FileAccessService::UnregisterNotify(Uri uri, const sptrobsCodeList_.erase(haveCodeIter); obsManager_.get(code)->UnRef(); + HILOG_DEBUG("unRef uri: %{public}s", uri.ToString().c_str()); // node has other observers, do not need remove. if (obsNode->obsCodeList_.size() != 0) { HILOG_DEBUG("Has code do not stopWatcher"); @@ -269,6 +272,7 @@ int32_t FileAccessService::UnregisterNotify(Uri uri, const sptrIsValid()) { + HILOG_DEBUG("release this code uri: %{public}s", uri.ToString().c_str()); obsManager_.release(code); } RemoveRelations(uriStr, obsNode); diff --git a/test/unittest/external_notify_test.cpp b/test/unittest/external_notify_test.cpp index 73e9bbde7966e8dbdaf0f8b933de128278a03b4e..f13ed46f12eb0962d9033b4287276ccf3a208dfc 100644 --- a/test/unittest/external_notify_test.cpp +++ b/test/unittest/external_notify_test.cpp @@ -497,6 +497,127 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0003, testing::ext GTEST_LOG_(INFO) << "FileExtensionNotifyTest-end external_file_access_notify_0003"; } +/** + * @tc.number: user_file_service_external_file_access_notify_0004 + * @tc.name: external_file_access_notify_0004 + * @tc.desc: Test function of RegisterNotify and UnregisterNotify interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0386 + */ +HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0004, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionNotifyTest-begin external_file_access_notify_0004"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + bool notifyForDescendants = true; + sptr myObserver1 = new (std::nothrow) MyObserver(); + sptr myObserver2 = new (std::nothrow) MyObserver(); + Uri parentUri(info[1].uri); + Uri newDirUriTest1(""); + result = g_fah->Mkdir(parentUri, "uri_dir14", newDirUriTest1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newDirUriTest2(""); + result = g_fah->Mkdir(parentUri, "uri_dir24", newDirUriTest2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newDirUriTest3(""); + result = g_fah->Mkdir(parentUri, "uri_dir34", newDirUriTest3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newFileUri1(""); + result = g_fah->CreateFile(parentUri, "uri_file14", newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newFileUri2(""); + result = g_fah->CreateFile(parentUri, "uri_file24", newFileUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newFileUri3(""); + result = g_fah->CreateFile(parentUri, "uri_file34", newFileUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newDirUriTest1, notifyForDescendants, myObserver1); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newDirUriTest2, notifyForDescendants, myObserver1); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newDirUriTest3, notifyForDescendants, myObserver1); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver2); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri2, notifyForDescendants, myObserver2); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri3, notifyForDescendants, myObserver2); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + + Uri renameDirUri1(""); + result = g_fah->Rename(newDirUriTest1, "renameDir1", renameDirUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME * 2); + EXPECT_EQ(g_notifyEvent, MOVED_SELF); + EXPECT_EQ(g_notifyUri, newDirUriTest1.ToString()); + Uri renameDirUri2(""); + result = g_fah->Rename(newDirUriTest2, "renameDir2", renameDirUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, MOVED_SELF); + EXPECT_EQ(g_notifyUri, newDirUriTest2.ToString()); + Uri renameDirUri3(""); + result = g_fah->Rename(newDirUriTest3, "renameDir3", renameDirUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, MOVED_SELF); + EXPECT_EQ(g_notifyUri, newDirUriTest3.ToString()); + + Uri renameFileUri1(""); + result = g_fah->Rename(newFileUri1, "renamefile1", renameFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME * 2); + EXPECT_EQ(g_notifyEvent, MOVED_SELF); + Uri renameFileUri2(""); + result = g_fah->Rename(newFileUri2, "renamefile2", renameFileUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, MOVED_SELF); + EXPECT_EQ(g_notifyUri, newFileUri2.ToString()); + Uri renameFileUri3(""); + result = g_fah->Rename(newFileUri3, "renamefile3", renameFileUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, MOVED_SELF); + EXPECT_EQ(g_notifyUri, newFileUri3.ToString()); + + sleep(2); + result = g_fah->UnregisterNotify(newDirUriTest1, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newDirUriTest2, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newDirUriTest3, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri1, myObserver2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri2, myObserver2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri3, myObserver2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + result = g_fah->Delete(renameDirUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(renameDirUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(renameDirUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(renameFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(renameFileUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(renameFileUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_notify_0004 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionNotifyTest-end external_file_access_notify_0004"; +} + /** * @tc.number: user_file_service_external_file_access_notify_0005 * @tc.name: external_file_access_notify_0005