From bb5fdeba7497bab1b8dc358bbf2f2e63af648a07 Mon Sep 17 00:00:00 2001 From: dengjun Date: Fri, 26 Jan 2024 21:21:59 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix=20:=E4=BF=9D=E9=9A=9Clist=E5=A4=9A?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E7=BA=BF=E7=A8=8B=E5=AE=89=E5=85=A8=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: dengjun --- .../napi_fileaccess_helper.cpp | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp index 7282e9c8..506305c0 100644 --- a/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp +++ b/frameworks/js/napi/file_access_module/napi_fileaccess_helper.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include "file_access_framework_errno.h" #include "file_access_helper.h" @@ -49,7 +50,24 @@ namespace { using CallbackComplete = std::function; } -std::list> g_fileAccessHelperList = {}; +static std::mutex g_fileAccessHelperMutex; +static std::list> g_fileAccessHelperList = {}; + +static void AddFileAccessHelperList(std::pair, int> &createResult) +{ + std::lock_guard lock(g_fileAccessHelperMutex); + g_fileAccessHelperList.emplace_back(createResult.first); + HILOG_INFO("g_fileAccessHelperList size %{public}zu", g_fileAccessHelperList.size()); +} + +static void RemoveFileAccessHelperList(FileAccessHelper *objectInfo) +{ + std::lock_guard lock(g_fileAccessHelperMutex); + g_fileAccessHelperList.remove_if([objectInfo](const std::shared_ptr &fileAccessHelper) { + return objectInfo == fileAccessHelper.get(); + }); + HILOG_INFO("g_fileAccessHelperList size %{public}zu", g_fileAccessHelperList.size()); +} static napi_value FileAccessHelperConstructor(napi_env env, napi_callback_info info) { @@ -80,15 +98,12 @@ static napi_value FileAccessHelperConstructor(napi_env env, napi_callback_info i CHECK_STATUS_RETURN(!(createResult.first == nullptr || createResult.second != ERR_OK), NapiFileInfoExporter::ThrowError(env, createResult.second), "FileAccessHelperConstructor: Creator failed ret=%{public}d", createResult.second); - g_fileAccessHelperList.emplace_back(createResult.first); - HILOG_INFO("g_fileAccessHelperList size %{public}zu", g_fileAccessHelperList.size()); + AddFileAccessHelperList(createResult); auto finalize = [](napi_env env, void *data, void *hint) { FileAccessHelper *objectInfo = static_cast(data); if (objectInfo != nullptr) { objectInfo->Release(); - g_fileAccessHelperList.remove_if([objectInfo](const std::shared_ptr &fileAccessHelper) { - return objectInfo == fileAccessHelper.get(); - }); + RemoveFileAccessHelperList(objectInfo); objectInfo = nullptr; } }; -- Gitee From c7e6f2fe8b2dffc44ad487038a573f2de1f195fc Mon Sep 17 00:00:00 2001 From: caochuan Date: Fri, 20 Oct 2023 15:25:27 +0800 Subject: [PATCH 2/4] aggregated test Signed-off-by: caochuan --- test/unittest/BUILD.gn | 5 +- test/unittest/external_notify_test.cpp | 634 +++++++++++++++---------- 2 files changed, 387 insertions(+), 252 deletions(-) diff --git a/test/unittest/BUILD.gn b/test/unittest/BUILD.gn index 9f70161b..996390c5 100644 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -60,7 +60,10 @@ ohos_unittest("medialibrary_file_access_test") { ohos_unittest("external_file_access_test") { module_out_path = "user_file_service/tests" - sources = [ "external_file_access_test.cpp" ] + sources = [ + "external_file_access_test.cpp", + "external_notify_test.cpp", + ] include_dirs = [ "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context", diff --git a/test/unittest/external_notify_test.cpp b/test/unittest/external_notify_test.cpp index 5618df0f..ec79d19f 100644 --- a/test/unittest/external_notify_test.cpp +++ b/test/unittest/external_notify_test.cpp @@ -45,7 +45,8 @@ shared_ptr g_fah = nullptr; int g_notifyEvent = -1; int g_notifyFlag = -1; string g_notifyUri = ""; -const int SLEEP_TIME = 100 * 1000; +vector g_notifyUris; +const int SLEEP_TIME = 600 * 1000; const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; shared_ptr g_context = nullptr; @@ -129,7 +130,8 @@ void MyObserver::OnChange(NotifyMessage ¬ifyMessage) g_notifyEvent = static_cast(notifyMessage.notifyType_); std::string notifyUri = notifyMessage.uris_[0]; g_notifyUri = notifyUri; - GTEST_LOG_(INFO) << "enter notify uri =" + notifyUri + "type =" + std::to_string(g_notifyEvent); + GTEST_LOG_(INFO) << "enter notify uri =" + notifyUri + " type =" + std::to_string(g_notifyEvent) +" uri size" + + std::to_string(notifyMessage.uris_.size()); } class TestObserver : public ObserverCallbackStub { @@ -143,6 +145,7 @@ void TestObserver::OnChange(NotifyMessage ¬ifyMessage) { g_notifyFlag = static_cast(notifyMessage.notifyType_); std::string notifyUri = notifyMessage.uris_[0]; + g_notifyUris = notifyMessage.uris_; GTEST_LOG_(INFO) << "enter TestObserver uri =" + notifyUri + "type =" + std::to_string(g_notifyFlag); } @@ -261,53 +264,51 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0001, testing::ext sptr myObserver1 = new (std::nothrow) MyObserver(); sptr myObserver2 = new (std::nothrow) MyObserver(); sptr myObserver3 = new (std::nothrow) MyObserver(); - for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); - Uri newFileUri1(""); - result = g_fah->CreateFile(parentUri, "uri_file1", newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri newFileUri2(""); - result = g_fah->CreateFile(parentUri, "uri_file2", newFileUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri newFileUri3(""); - result = g_fah->CreateFile(parentUri, "uri_file3", newFileUri3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri parentUri(info[1].uri); + Uri newFileUri1(""); + result = g_fah->CreateFile(parentUri, "uri_file1", newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newFileUri2(""); + result = g_fah->CreateFile(parentUri, "uri_file2", newFileUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newFileUri3(""); + result = g_fah->CreateFile(parentUri, "uri_file3", newFileUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants1, myObserver1); - EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileUri2, notifyForDescendants1, myObserver2); - EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileUri3, notifyForDescendants2, myObserver3); - EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants1, myObserver1); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri2, notifyForDescendants1, myObserver2); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri3, notifyForDescendants2, myObserver3); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); - Uri renameFileUri1(""); - result = g_fah->Rename(newFileUri1, "renamefile", renameFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - usleep(SLEEP_TIME); - EXPECT_EQ(g_notifyEvent, MOVED_SELF); - EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); - - result = g_fah->Delete(newFileUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - usleep(SLEEP_TIME); - EXPECT_EQ(g_notifyEvent, DELETE_EVENT); - EXPECT_EQ(g_notifyUri, newFileUri2.ToString()); - result = g_fah->Delete(newFileUri3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - usleep(SLEEP_TIME); - EXPECT_EQ(g_notifyEvent, DELETE_EVENT); - EXPECT_EQ(g_notifyUri, newFileUri3.ToString()); + Uri renameFileUri1(""); + result = g_fah->Rename(newFileUri1, "renamefile", renameFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, MOVED_SELF); + EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); - sleep(1); - result = g_fah->UnregisterNotify(newFileUri1, myObserver1); - 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, myObserver3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(renameFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - } + result = g_fah->Delete(newFileUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, DELETE_EVENT); + EXPECT_EQ(g_notifyUri, newFileUri2.ToString()); + result = g_fah->Delete(newFileUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, DELETE_EVENT); + EXPECT_EQ(g_notifyUri, newFileUri3.ToString()); + + sleep(1); + result = g_fah->UnregisterNotify(newFileUri1, myObserver1); + 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, myObserver3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(renameFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "external_file_access_notify_0001 occurs an exception."; } @@ -388,6 +389,7 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0002, testing::ext Uri testFile(""); result = g_fah->CreateFile(newDirUriTest1, "test_file", testFile); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); Uri renameDirUri1(""); result = g_fah->Rename(newDirUriTest1, "renameDir", renameDirUri1); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); @@ -465,32 +467,30 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0003, testing::ext bool notifyForDescendants = true; sptr myObserver1 = new (std::nothrow) MyObserver(); sptr myObserver2 = new (std::nothrow) MyObserver(); - for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); - Uri newDirUriTest1(""); - result = g_fah->Mkdir(parentUri, "uri_dir1", newDirUriTest1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri newFileUri1(""); - result = g_fah->CreateFile(parentUri, "uri_file1", newFileUri1); - 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(newDirUriTest1, notifyForDescendants, myObserver1); - EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + Uri parentUri(info[1].uri); + Uri newDirUriTest1(""); + result = g_fah->Mkdir(parentUri, "uri_dir1", newDirUriTest1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newFileUri1(""); + result = g_fah->CreateFile(parentUri, "uri_file1", newFileUri1); + 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(newDirUriTest1, 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(newFileUri1, notifyForDescendants, myObserver2); - EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newDirUriTest1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(newDirUriTest1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - } + result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver2); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver2); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newDirUriTest1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(newDirUriTest1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "external_file_access_notify_0003 occurs an exception."; } @@ -515,56 +515,55 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0005, testing::ext EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); bool notifyForDescendants = true; sptr myObserver1 = new (std::nothrow) MyObserver(); - for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); - Uri uri_dir(""); - result = g_fah->Mkdir(parentUri, "uri_dir123", uri_dir); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri uri_dirSub1(""); - result = g_fah->Mkdir(uri_dir, "uri_dirSub1", uri_dirSub1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(uri_dir, notifyForDescendants, myObserver1); - EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(uri_dirSub1, notifyForDescendants, myObserver1); - EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); - Uri uri_dirSub2(""); - result = g_fah->Mkdir(uri_dir, "uri_dirSub2", uri_dirSub2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - usleep(SLEEP_TIME); - EXPECT_EQ(g_notifyEvent, ADD_EVENT); - EXPECT_EQ(g_notifyUri, uri_dirSub2.ToString()); - result = g_fah->RegisterNotify(uri_dirSub2, notifyForDescendants, myObserver1); - EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); - Uri renameDirUri1(""); - result = g_fah->Rename(uri_dirSub2, "renameDir1", renameDirUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - usleep(SLEEP_TIME); - if (g_notifyEvent != MOVED_TO) { - if (g_notifyEvent != MOVED_SELF) { - EXPECT_EQ(g_notifyEvent, MOVED_FROM); - EXPECT_EQ(g_notifyUri, uri_dirSub2.ToString()); - } else { - EXPECT_EQ(g_notifyEvent, MOVED_SELF); - EXPECT_EQ(g_notifyUri, uri_dirSub2.ToString()); - } + Uri parentUri(info[1].uri); + Uri uri_dir(""); + result = g_fah->Mkdir(parentUri, "uri_dir123", uri_dir); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri uri_dirSub1(""); + result = g_fah->Mkdir(uri_dir, "uri_dirSub1", uri_dirSub1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(uri_dir, notifyForDescendants, myObserver1); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(uri_dirSub1, notifyForDescendants, myObserver1); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + Uri uri_dirSub2(""); + result = g_fah->Mkdir(uri_dir, "uri_dirSub2", uri_dirSub2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, ADD_EVENT); + EXPECT_EQ(g_notifyUri, uri_dirSub2.ToString()); + result = g_fah->RegisterNotify(uri_dirSub2, notifyForDescendants, myObserver1); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + Uri renameDirUri1(""); + result = g_fah->Rename(uri_dirSub2, "renameDir1", renameDirUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + if (g_notifyEvent != MOVED_TO) { + if (g_notifyEvent != MOVED_SELF) { + EXPECT_EQ(g_notifyEvent, MOVED_FROM); + EXPECT_EQ(g_notifyUri, uri_dirSub2.ToString()); } else { - EXPECT_EQ(g_notifyEvent, MOVED_TO); - EXPECT_EQ(g_notifyUri, renameDirUri1.ToString()); + EXPECT_EQ(g_notifyEvent, MOVED_SELF); + EXPECT_EQ(g_notifyUri, uri_dirSub2.ToString()); } - result = g_fah->Delete(uri_dirSub1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - usleep(SLEEP_TIME); - EXPECT_EQ(g_notifyEvent, DELETE_EVENT); - EXPECT_EQ(g_notifyUri, uri_dirSub1.ToString()); - - sleep(2); - result = g_fah->UnregisterNotify(uri_dir, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(renameDirUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(uri_dir); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } else { + EXPECT_EQ(g_notifyEvent, MOVED_TO); + EXPECT_EQ(g_notifyUri, renameDirUri1.ToString()); } + result = g_fah->Delete(uri_dirSub1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, DELETE_EVENT); + EXPECT_EQ(g_notifyUri, uri_dirSub1.ToString()); + + sleep(2); + result = g_fah->UnregisterNotify(uri_dir, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(renameDirUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(uri_dir); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + sleep(1); } catch (...) { GTEST_LOG_(ERROR) << "external_file_access_notify_0005 occurs an exception."; } @@ -589,24 +588,22 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0006, testing::ext EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); bool notifyForDescendants = true; sptr myObserver1 = new (std::nothrow) MyObserver(); - for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); - Uri newFileUri1(""); - result = g_fah->CreateFile(parentUri, "uri_file", newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - usleep(SLEEP_TIME); - EXPECT_EQ(g_notifyEvent, DELETE_EVENT); - EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); - sleep(1); - result = g_fah->UnregisterNotify(newFileUri1, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileUri1, myObserver1); - EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); - } + Uri parentUri(info[1].uri); + Uri newFileUri1(""); + result = g_fah->CreateFile(parentUri, "uri_file", newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, DELETE_EVENT); + EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); + sleep(1); + result = g_fah->UnregisterNotify(newFileUri1, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri1, myObserver1); + EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "external_file_access_notify_0006 occurs an exception."; } @@ -631,18 +628,16 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0007, testing::ext EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); sptr myObserver1 = nullptr; bool notifyForDescendants = true; - for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); - Uri newFileUri1(""); - result = g_fah->CreateFile(parentUri, "uri_file007", newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver1); - EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileUri1, myObserver1); - EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - } + Uri parentUri(info[1].uri); + Uri newFileUri1(""); + result = g_fah->CreateFile(parentUri, "uri_file007", newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver1); + EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri1, myObserver1); + EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "external_file_access_notify_0007 occurs an exception."; } @@ -679,7 +674,24 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0008, testing::ext } /** - * @tc.number: user_file_service_external_file_access_notify_0009 + * @tc.number: user_file_service_external_file_access_notify_0009 Uri parentUri(info[1].uri); + Uri newFileDir1(""); + result = g_fah->Mkdir(parentUri, "uri_dir0016", newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + result = g_fah->UnregisterNotify(newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileDir1, myObserver1); + EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); + + result = g_fah->Delete(newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); * @tc.name: external_file_access_notify_0009 * @tc.desc: Test function of RegisterNotify and UnregisterNotify interface for SUCCESS when the file is Chinese name. * @tc.size: MEDIUM @@ -696,22 +708,20 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0009, testing::ext EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); bool notifyForDescendants = true; sptr myObserver1 = new (std::nothrow) MyObserver(); - for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); - Uri newFileUri1(""); - result = g_fah->CreateFile(parentUri, "测试文件", newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(newFileUri1); - usleep(SLEEP_TIME); - EXPECT_EQ(g_notifyEvent, DELETE_EVENT); - EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); - sleep(1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileUri1, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - } + Uri parentUri(info[1].uri); + Uri newFileUri1(""); + result = g_fah->CreateFile(parentUri, "测试文件", newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(newFileUri1); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, DELETE_EVENT); + EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); + sleep(1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri1, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "external_file_access_notify_0009 occurs an exception."; } @@ -737,30 +747,28 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0010, testing::ext bool notifyForDescendants = true; sptr myObserver1 = new (std::nothrow) MyObserver(); sptr myObserver2 = new (std::nothrow) MyObserver(); - for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); - Uri newFileUri1(""); - result = g_fah->CreateFile(parentUri, "uri_file1", newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri newFileUri2(""); - result = g_fah->CreateFile(parentUri, "uri_file2", newFileUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileUri2, notifyForDescendants, myObserver2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri parentUri(info[1].uri); + Uri newFileUri1(""); + result = g_fah->CreateFile(parentUri, "uri_file1", newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newFileUri2(""); + result = g_fah->CreateFile(parentUri, "uri_file2", newFileUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri2, notifyForDescendants, myObserver2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileUri1, myObserver2); - EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileUri1, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileUri2, myObserver2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(newFileUri2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - } + result = g_fah->UnregisterNotify(newFileUri1, myObserver2); + EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri1, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri2, myObserver2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(newFileUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "external_file_access_notify_0010 occurs an exception."; } @@ -788,53 +796,51 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0011, testing::ext bool notifyForDescendants2 = false; sptr myObserver1 = new (std::nothrow) TestObserver(); sptr myObserver2 = new (std::nothrow) MyObserver(); - for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); - Uri newFileDir1(""); - result = g_fah->Mkdir(parentUri, "uri_dir11", newFileDir1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri newFileUri1(""); - result = g_fah->CreateFile(newFileDir1, "uri_file11", newFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - sleep(1); - result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants1, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants1, myObserver2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - Uri renameFileUri1(""); - result = g_fah->Rename(newFileUri1, "renamefile1", renameFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - usleep(SLEEP_TIME * 2); - if (g_notifyEvent != MOVED_TO) { - if (g_notifyEvent != MOVED_SELF) { - EXPECT_EQ(g_notifyEvent, MOVED_FROM); - EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); - } else { - EXPECT_EQ(g_notifyEvent, MOVED_SELF); - EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); - } + Uri parentUri(info[1].uri); + Uri newFileDir1(""); + result = g_fah->Mkdir(parentUri, "uri_dir11", newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri newFileUri1(""); + result = g_fah->CreateFile(newFileDir1, "uri_file11", newFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + sleep(1); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants1, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileUri1, notifyForDescendants1, myObserver2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri renameFileUri1(""); + result = g_fah->Rename(newFileUri1, "renamefile1", renameFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME * 2); + if (g_notifyEvent != MOVED_TO) { + if (g_notifyEvent != MOVED_SELF) { + EXPECT_EQ(g_notifyEvent, MOVED_FROM); + EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); } else { - EXPECT_EQ(g_notifyEvent, MOVED_TO); - EXPECT_EQ(g_notifyUri, renameFileUri1.ToString()); + EXPECT_EQ(g_notifyEvent, MOVED_SELF); + EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); } - result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants2, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - sleep(2); - result = g_fah->Delete(renameFileUri1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - usleep(SLEEP_TIME); - EXPECT_EQ(g_notifyEvent, DELETE_EVENT); - EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); - EXPECT_NE(g_notifyFlag, DELETE_EVENT); - - sleep(1); - result = g_fah->UnregisterNotify(newFileDir1, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileUri1, myObserver2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(newFileDir1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } else { + EXPECT_EQ(g_notifyEvent, MOVED_TO); + EXPECT_EQ(g_notifyUri, renameFileUri1.ToString()); } + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants2, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + sleep(2); + result = g_fah->Delete(renameFileUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, DELETE_EVENT); + EXPECT_EQ(g_notifyUri, newFileUri1.ToString()); + EXPECT_NE(g_notifyFlag, DELETE_EVENT); + + sleep(1); + result = g_fah->UnregisterNotify(newFileDir1, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileUri1, myObserver2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->Delete(newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { GTEST_LOG_(ERROR) << "external_file_access_notify_0011 occurs an exception."; } @@ -856,8 +862,7 @@ static void RegisterDirNotify(Uri parentUri, std::string dirName, IFileAccessObs EXPECT_EQ(g_notifyEvent, DELETE_EVENT); EXPECT_EQ(g_notifyUri, newDirUriTest.ToString()); sleep(2); - result = g_fah->UnregisterNotify(newDirUriTest, myObserver); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + g_fah->UnregisterNotify(newDirUriTest, myObserver); } /** @@ -1011,29 +1016,156 @@ HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0016, testing::ext sptr myObserver1 = new (std::nothrow) MyObserver(); sptr myObserver2 = new (std::nothrow) MyObserver(); sptr myObserver3 = new (std::nothrow) MyObserver(); - for (size_t i = 0; i < info.size(); i++) { - Uri parentUri(info[i].uri); - Uri newFileDir1(""); - result = g_fah->Mkdir(parentUri, "uri_dir0016", newFileDir1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver1); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver2); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver3); - EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri parentUri(info[1].uri); + Uri newFileDir1(""); + result = g_fah->Mkdir(parentUri, "uri_dir0016", newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + result = g_fah->UnregisterNotify(newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->UnregisterNotify(newFileDir1, myObserver1); + EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); + + result = g_fah->Delete(newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_notify_0016 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionNotifyTest-end external_file_access_notify_0016"; +} + +/** + * @tc.number: user_file_service_external_file_access_notify_0017 + * @tc.name: external_file_access_notify_0017 + * @tc.desc: Test event changes exceeding 500ms trigger callback + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0386 + */ +HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0017, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionNotifyTest-begin external_file_access_notify_0017"; + 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(); + Uri parentUri(info[1].uri); + Uri newFileDir1(""); + result = g_fah->Mkdir(parentUri, "uri_dir", newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri fileUri(""); + result = g_fah->CreateFile(newFileDir1, "uri_file", fileUri); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + usleep(SLEEP_TIME / 10); + EXPECT_NE(g_notifyEvent, ADD_EVENT); + usleep(SLEEP_TIME); + EXPECT_EQ(g_notifyEvent, ADD_EVENT); + + result = g_fah->UnregisterNotify(newFileDir1, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileDir1); + result = g_fah->Delete(newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_notify_0017 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionNotifyTest-end external_file_access_notify_0017"; +} + +/** + * @tc.number: user_file_service_external_file_access_notify_0018 + * @tc.name: external_file_access_notify_0018 + * @tc.desc: Test event changes More than 32 notifications callback + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0386 + */ +HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0018, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionNotifyTest-begin external_file_access_notify_0018"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + bool notifyForDescendants = true; + sptr myObserver1 = new (std::nothrow) TestObserver(); + Uri parentUri(info[1].uri); + Uri newFileDir1(""); + result = g_fah->Mkdir(parentUri, "uri_dir", newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri fileUri(""); + for (int i = 0; i < 64; i++) { + result = g_fah->CreateFile(newFileDir1, "uri_file" + to_string(i), fileUri); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->UnregisterNotify(newFileDir1, myObserver1); - EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); + } + sleep(1); + EXPECT_LE(g_notifyUris.size(), 32); + g_notifyUris.clear(); + result = g_fah->UnregisterNotify(newFileDir1, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); - result = g_fah->Delete(newFileDir1); + result = g_fah->Delete(newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_notify_0018 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionNotifyTest-end external_file_access_notify_0018"; +} + +/** + * @tc.number: user_file_service_external_file_access_notify_0019 + * @tc.name: external_file_access_notify_0019 + * @tc.desc: Test event changes More than one notifications callback + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0386 + */ +HWTEST_F(FileExtensionNotifyTest, external_file_access_notify_0019, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionNotifyTest-begin external_file_access_notify_0019"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + bool notifyForDescendants = true; + sptr myObserver1 = new (std::nothrow) TestObserver(); + Uri parentUri(info[1].uri); + Uri newFileDir1(""); + result = g_fah->Mkdir(parentUri, "uri_dir", newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + result = g_fah->RegisterNotify(newFileDir1, notifyForDescendants, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri fileUri(""); + for (int i = 0; i < 10; i++) { + result = g_fah->CreateFile(newFileDir1, "uri_file" + to_string(i), fileUri); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } + usleep(SLEEP_TIME); + EXPECT_GT(g_notifyUris.size(), 1); + g_notifyUris.clear(); + result = g_fah->UnregisterNotify(newFileDir1, myObserver1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + result = g_fah->Delete(newFileDir1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); } catch (...) { - GTEST_LOG_(ERROR) << "external_file_access_notify_0016 occurs an exception."; + GTEST_LOG_(ERROR) << "external_file_access_notify_0019 occurs an exception."; } - GTEST_LOG_(INFO) << "FileExtensionNotifyTest-end external_file_access_notify_0016"; + GTEST_LOG_(INFO) << "FileExtensionNotifyTest-end external_file_access_notify_0019"; } } // namespace -- Gitee From 13faa8086d4ea0fb120f1d18102ec658109b366d Mon Sep 17 00:00:00 2001 From: wangpggg Date: Sat, 27 Jan 2024 19:15:59 +0800 Subject: [PATCH 3/4] add testcases to cover JsFileAccessExtAbility branches Signed-off-by: wangpeng --- test/unittest/BUILD.gn | 88 ++- .../file_access_service_proxy_test.cpp | 27 +- .../js_file_access_ext_ability_test.cpp | 737 +++++++++--------- test/unittest/mock/assistant.h | 44 +- .../mock/file_access_ext_ability_mock.h | 2 +- test/unittest/mock/js_native_api_mock.cpp | 94 +++ test/unittest/mock/native_reference_mock.h | 44 ++ 7 files changed, 611 insertions(+), 425 deletions(-) create mode 100644 test/unittest/mock/js_native_api_mock.cpp create mode 100644 test/unittest/mock/native_reference_mock.h diff --git a/test/unittest/BUILD.gn b/test/unittest/BUILD.gn index 3378d7a7..c0fd4a1c 100644 --- a/test/unittest/BUILD.gn +++ b/test/unittest/BUILD.gn @@ -155,44 +155,6 @@ ohos_unittest("abnormal_file_access_test") { ] } -ohos_unittest("js_file_access_ext_ability_test") { - module_out_path = "user_file_service/tests" - - sources = [ "js_file_access_ext_ability_test.cpp" ] - - include_dirs = [ - "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context", - "//third_party/googletest/googlemock/include/gmock", - "${user_file_service_path}/interfaces/inner_api/file_access/include", - ".", - ] - - configs = [ "//build/config/compiler:exceptions" ] - - deps = [ - "${user_file_service_path}/interfaces/inner_api/file_access:file_access_extension_ability_kit", - "//third_party/googletest:gmock_main", - ] - - external_deps = [ - "ability_base:zuri", - "ability_runtime:ability_manager", - "ability_runtime:app_context", - "ability_runtime:extensionkit_native", - "ability_runtime:napi_common", - "ability_runtime:runtime", - "access_token:libaccesstoken_sdk", - "access_token:libtokenid_sdk", - "bundle_framework:appexecfwk_base", - "bundle_framework:appexecfwk_core", - "c_utils:utils", - "hilog:libhilog", - "hitrace:hitrace_meter", - "napi:ace_napi", - "samgr:samgr_proxy", - ] -} - ohos_unittest("file_access_ext_stub_impl_test") { module_out_path = "user_file_service/tests" @@ -264,6 +226,7 @@ ohos_unittest("file_access_service_proxy_test") { "hitrace:hitrace_meter", "image_framework:image", "ipc:ipc_core", + "napi:ace_napi", "safwk:system_ability_fwk", ] @@ -272,6 +235,55 @@ ohos_unittest("file_access_service_proxy_test") { use_exceptions = true } +ohos_unittest("js_file_access_ext_ability_test") { + module_out_path = "user_file_service/tests" + + include_dirs = [ + "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context", + "${commonlibrary_path}/c_utils/base/include", + "${file_api_path}/utils/filemgmt_libn/include", + "${user_file_service_path}/interfaces/inner_api/file_access/include", + "${user_file_service_path}/interfaces/kits/js/src/common", + "${user_file_service_path}/services/native/file_access_service/include", + "${user_file_service_path}/utils", + "//third_party/googletest/googlemock/include/gmock", + "mock", + ] + + sources = [ + "${user_file_service_path}/interfaces/inner_api/file_access/src/file_access_ext_stub_impl.cpp", + "${user_file_service_path}/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp", + "${user_file_service_path}/interfaces/inner_api/file_access/src/napi_common_fileaccess.cpp", + "js_file_access_ext_ability_test.cpp", + "mock/js_native_api_mock.cpp", + ] + + deps = [ + "//third_party/googletest:gmock_main", + "//third_party/googletest:gtest_main", + ] + + external_deps = [ + "ability_base:zuri", + "ability_runtime:app_context", + "ability_runtime:extensionkit_native", + "ability_runtime:napi_common", + "ability_runtime:runtime", + "access_token:libaccesstoken_sdk", + "c_utils:utils", + "hilog:libhilog", + "hitrace:hitrace_meter", + "init:libbegetutil", + "ipc:ipc_core", + "napi:ace_napi", + "os_account:os_account_innerkits", + ] + + defines = [ "private=public" ] + + use_exceptions = true +} + group("user_file_service_unit_test") { testonly = true diff --git a/test/unittest/file_access_service_proxy_test.cpp b/test/unittest/file_access_service_proxy_test.cpp index ba767902..79bcf57a 100644 --- a/test/unittest/file_access_service_proxy_test.cpp +++ b/test/unittest/file_access_service_proxy_test.cpp @@ -37,8 +37,6 @@ using namespace std; using namespace testing; using namespace testing::ext; -std::shared_ptr Assistant::ins_ = nullptr; - FileAccessServiceStub::FileAccessServiceStub() {} FileAccessServiceStub::~FileAccessServiceStub() {} @@ -57,19 +55,25 @@ public: class FileAccessServiceProxyTest : public testing::Test { public: - static void SetUpTestCase(void) {} - static void TearDownTestCase() {} - void SetUp() + static void SetUpTestCase(void) { Assistant::ins_ = insMoc; SystemAbilityManagerClient::GetInstance().systemAbilityManager_ = sptr(samgr); } + static void TearDownTestCase() + { + insMoc = nullptr; + samgr = nullptr; + impl = nullptr; + Assistant::ins_ = nullptr; + SystemAbilityManagerClient::GetInstance().systemAbilityManager_ = nullptr; + } + void SetUp() {} void TearDown() {} public: - shared_ptr insMoc = make_shared(); - sptr impl = sptr(new FileAccessServiceMock()); -public: - ISystemAbilityManagerMock* samgr = new ISystemAbilityManagerMock(); + static inline shared_ptr insMoc = make_shared(); + static inline sptr impl = sptr(new FileAccessServiceMock()); + static inline ISystemAbilityManagerMock* samgr = new ISystemAbilityManagerMock(); }; /** @@ -86,9 +90,10 @@ HWTEST_F(FileAccessServiceProxyTest, file_access_service_proxy_GetInstance_0000, GTEST_LOG_(INFO) << "FileAccessServiceProxyTest-begin file_access_service_proxy_GetInstance_0000"; try { shared_ptr proxy = make_shared(impl); - proxy->serviceProxy_ = sptr(new FileAccessServiceProxy(impl)); + proxy->serviceProxy_ = iface_cast(impl); + auto result = proxy->GetInstance(); - EXPECT_FALSE(static_cast(result.GetRefPtr()) == impl.GetRefPtr()); + EXPECT_TRUE(static_cast(result.GetRefPtr()) == impl.GetRefPtr()); } catch (...) { GTEST_LOG_(ERROR) << "FileAccessServiceProxyTest occurs an exception."; } diff --git a/test/unittest/js_file_access_ext_ability_test.cpp b/test/unittest/js_file_access_ext_ability_test.cpp index 575424ec..a49204dd 100644 --- a/test/unittest/js_file_access_ext_ability_test.cpp +++ b/test/unittest/js_file_access_ext_ability_test.cpp @@ -13,470 +13,461 @@ * limitations under the License. */ -#include -#include +#include #include -#include "ability_info.h" -#include "accesstoken_kit.h" -#include "context_impl.h" -#include "extension_base.h" +#include "assistant.h" #include "extension_context.h" -#include "file_access_ext_ability.h" -#include "file_access_ext_stub_impl.h" -#include "file_access_observer_common.h" -#include "file_access_extension_info.h" -#include "file_access_framework_errno.h" -#include "hilog_wrapper.h" -#include "hitrace_meter.h" -#include "runtime.h" -#include "js_runtime.h" -#include "js_runtime_utils.h" +#include "file_access_ext_stub.h" +#include "file_access_service_mock.h" +#include "file_access_service_proxy.h" #include "js_file_access_ext_ability.h" +#include "js_native_api_types.h" +#include "native_reference_mock.h" -namespace { +namespace OHOS::FileAccessFwk { using namespace std; -using namespace OHOS::FileAccessFwk; +using namespace testing; +using namespace testing::ext; -using namespace OHOS::AbilityRuntime; -FileAccessExtAbility* g_ability = nullptr ; -Uri g_newDirUri(""); +FileAccessServiceStub::FileAccessServiceStub() {} -class JsFileAccessExtAbilityTest : public testing::Test { -public: - static void SetUpTestCase(void) - { - cout << "JsFileAccessExtAbilityTest code test" < runtime = JsRuntime::Create(options_); - g_ability = FileAccessExtAbility::Create(runtime); - } - static void TearDownTestCase() - { - delete g_ability; - g_ability = nullptr; - }; - void SetUp(){}; - void TearDown(){}; -}; +FileAccessServiceStub::~FileAccessServiceStub() {} -/** - * @tc.number: user_file_service_js_file_access_ext_ability_OpenFile_0000 - * @tc.name: js_file_access_ext_ability_OpenFile_0000 - * @tc.desc: Test function of OpenFile for error which CallJsMethod error - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0000, testing::ext::TestSize.Level1) +int32_t FileAccessServiceStub::OnRemoteRequest(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, + OHOS::MessageOption&) { - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0000"; - try{ - Uri uri(""); - int flags = WRITE_READ; - int fd; - int result = g_ability -> OpenFile(uri, flags, fd); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_OpenFile_0000 occurs an exception."; - } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0000"; + return 0; } -/** - * @tc.number: user_file_service_js_file_access_OpenFile_0001 - * @tc.name: js_file_access_OpenFile_0001 - * @tc.desc: Test function of OpenFile interface for failed which openfile's fd is failed. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: SR000H0386 - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0001, testing::ext::TestSize.Level1) +int32_t FileAccessServiceProxy::OnChange(Uri uri, NotifyType notifyType) { - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0001"; - try{ - Uri uri(""); - int flags = WRITE_READ; - int fd; - g_ability -> OpenFile(uri, flags, fd); - EXPECT_LE(fd, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_OpenFile_0001 occurs an exception."; - } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0001"; + return ERR_OK; } -/** - * @tc.number: user_file_service_js_file_access_OpenFile_0002 - * @tc.name: js_file_access_OpenFile_0002 - * @tc.desc: Test function of OpenFile interface for failed which openfile's uri is null. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: SR000H0386 - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0002, testing::ext::TestSize.Level1) +int32_t FileAccessServiceProxy::GetExensionProxy(const std::shared_ptr &, + sptr &) { - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0002"; - try{ - Uri uri(""); - int flags = WRITE_READ; - int fd; - int result = g_ability -> OpenFile(uri, flags, fd); - EXPECT_NE(result, E_URIS); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_OpenFile_0002 occurs an exception."; - } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0002"; + return 0; } -/** - * @tc.number: user_file_service_js_file_access_OpenFile_0003 - * @tc.name: js_file_access_OpenFile_0002 - * @tc.desc: Test function of OpenFile interface success. - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: SR000H0386 - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0003, testing::ext::TestSize.Level1) +int32_t FileAccessServiceProxy::RegisterNotify(Uri, bool, const sptr &, + const std::shared_ptr &) { - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0003"; - try{ - Uri uri(""); - int flags = WRITE_READ; - int fd; - std::string displayName = "test1.txt"; - int result = g_ability->CreateFile(g_newDirUri, displayName, uri); - EXPECT_GT(result, ERR_OK); - result = g_ability -> OpenFile(uri, flags, fd); - EXPECT_GT(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_OpenFile_0003 occurs an exception."; - } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0003"; -} -/** - * @tc.number: user_file_service_js_file_access_ext_ability_CreateFile_0000 - * @tc.name: js_file_access_ext_ability_CreateFile_0000 - * @tc.desc: Test function of CreateFile for error which CallJsMethod error - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_CreateFile_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_CreateFile_0000"; - try { - Uri parent(""); - std::string displayName("testFile"); - Uri newFile(""); - int result = g_ability->CreateFile(parent, displayName, newFile); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_CreateFile_0000 occurs an exception."; - } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_CreateFile_0000"; + return 0; } -/** - * @tc.number: user_file_service_js_file_access_ext_ability_Mkdir_0000 - * @tc.name: js_file_access_ext_ability_Mkdir_0000 - * @tc.desc: Test function of Mkdir for error which CallJsMethod error - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Mkdir_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Mkdir_0000"; - try { - Uri parent(""); - std::string displayName("testFile"); - Uri newFile(""); - int result = g_ability->Mkdir(parent, displayName, newFile); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Mkdir_0000 occurs an exception."; - } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Mkdir_0000"; +int32_t FileAccessServiceProxy::UnregisterNotify(Uri, const sptr &, + const std::shared_ptr &) +{ + return 0; } -/** - * @tc.number: user_file_service_js_file_access_ext_ability_Delete_0000 - * @tc.name: js_file_access_ext_ability_Delete_0000 - * @tc.desc: Test function of Delete for error which CallJsMethod error - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Delete_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Delete_0000"; - try { - Uri sourcefile(""); - int result = g_ability->Delete(sourcefile); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Delete_0000 occurs an exception."; - } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Delete_0000"; +void FileAccessExtAbility::Init(const std::shared_ptr &record, + const std::shared_ptr &application, + std::shared_ptr &handler, + const sptr &token) +{ + ExtensionBase<>::Init(record, application, handler, token); } -/** - * @tc.number: user_file_service_js_file_access_ext_ability_Move_0000 - * @tc.name: js_file_access_ext_ability_Move_0000 - * @tc.desc: Test function of Move for error which CallJsMethod error - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Move_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Move_0000"; - try { - Uri sourcefile(""); - Uri targetParent(""); - Uri newFile(""); - int result = g_ability->Move(sourcefile, targetParent, newFile); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Move_0000 occurs an exception."; - } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Move_0000"; -} +FileAccessExtStub::FileAccessExtStub() {} -/** - * @tc.number: user_file_service_js_file_access_ext_ability_Rename_0000 - * @tc.name: js_file_access_ext_ability_Rename_0000 - * @tc.desc: Test function of Rename for error which CallJsMethod error - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Rename_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Rename_0000"; - try { - Uri sourcefile(""); - std::string displayName("testFile"); - Uri newFile(""); - int result = g_ability->Rename(sourcefile, displayName, newFile); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Rename_0000 occurs an exception."; - } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Rename_0000"; +FileAccessExtStub::~FileAccessExtStub() {} + +int32_t FileAccessExtStub::OnRemoteRequest(unsigned int, OHOS::MessageParcel&, OHOS::MessageParcel&, + OHOS::MessageOption&) +{ + return 0; } -/** - * @tc.number: user_file_service_js_file_access_ext_ability_ListFile_0000 - * @tc.name: js_file_access_ext_ability_ListFile_0000 - * @tc.desc: Test function of ListFile for error which CallJsMethod error - * @tc.size: MEDIUM - * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX - */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_ListFile_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_ListFile_0000"; - try { - FileInfo fileInfo; - int64_t offset = 0; - int64_t maxCount = 0; - FileFilter filter; - std::vector fileInfoVec; - int result = g_ability->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_ListFile_0000 occurs an exception."; +class JsFileAccessExtAbilityTest : public testing::Test { +public: + static void SetUpTestCase(void) + { + Assistant::ins_ = insMoc; + } + static void TearDownTestCase() + { + impl = nullptr; + insMoc = nullptr; + ability = nullptr; + jsRuntime = nullptr; + Assistant::ins_ = nullptr; } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_ListFile_0000"; + void SetUp() {} + void TearDown() {} +public: + static inline shared_ptr insMoc = make_shared(); + static inline unique_ptr jsRuntime = make_unique(); + static inline shared_ptr ability = make_shared(*jsRuntime); + static inline sptr impl = sptr(new FileAccessServiceMock()); + static inline napi_env env = reinterpret_cast(&(jsRuntime->GetNativeEngine())); +}; + +sptr FileAccessServiceProxy::GetInstance() +{ + return iface_cast(JsFileAccessExtAbilityTest::impl); } /** - * @tc.number: user_file_service_js_file_access_ext_ability_ScanFile_0000 - * @tc.name: js_file_access_ext_ability_ScanFile_0000 - * @tc.desc: Test function of ScanFile for error which CallJsMethod error + * @tc.number: user_file_service_js_file_access_ext_ability_CallObjectMethod_0000 + * @tc.name: js_file_access_ext_ability_CallObjectMethod_0000 + * @tc.desc: Test function of CallObjectMethod interface for ERROR. * @tc.size: MEDIUM * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_ScanFile_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_ScanFile_0000"; +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_CallObjectMethod_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_CallObjectMethod_0000"; try { - FileInfo fileInfo; - int64_t offset = 0; - int64_t maxCount = 0; - FileFilter filter; - std::vector fileInfoVec; - int result = g_ability->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_ScanFile_0000 occurs an exception."; + auto result = ability->CallObjectMethod(nullptr, nullptr, 0); + EXPECT_TRUE(result == nullptr); + + auto ref = make_shared(); + ability->jsObj_ = ref; + EXPECT_CALL(*ref, GetNapiValue()).WillOnce(Return(nullptr)); + result = ability->CallObjectMethod(nullptr, nullptr, 0); + EXPECT_TRUE(result == nullptr); + + napi_value rslt; + EXPECT_CALL(*ref, GetNapiValue()).WillOnce(Return(reinterpret_cast(&rslt))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok)); + result = ability->CallObjectMethod(nullptr, nullptr, 0); + EXPECT_TRUE(result == nullptr); + + EXPECT_CALL(*ref, GetNapiValue()).WillOnce(Return(reinterpret_cast(&rslt))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_invalid_arg)); + result = ability->CallObjectMethod(nullptr, nullptr, 0); + EXPECT_TRUE(result == nullptr); + + EXPECT_CALL(*ref, GetNapiValue()).WillOnce(Return(reinterpret_cast(&rslt))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)).WillOnce(Return(napi_ok)); + result = ability->CallObjectMethod(nullptr, nullptr, 0); + EXPECT_TRUE(result == nullptr); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_ScanFile_0000"; + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_CallObjectMethod_0000"; } /** - * @tc.number: user_file_service_js_file_access_ext_ability_GetRoots_0000 - * @tc.name: js_file_access_ext_ability_GetRoots_0000 - * @tc.desc: Test function of GetRoots for error which CallJsMethod error + * @tc.number: user_file_service_js_file_access_ext_ability_CallJsMethod_0000 + * @tc.name: js_file_access_ext_ability_CallJsMethod_0000 + * @tc.desc: Test function of CallJsMethod interface for ERROR. * @tc.size: MEDIUM * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_GetRoots_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_GetRoots_0000"; +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_CallJsMethod_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_CallJsMethod_0000"; try { - std::vector rootInfoVec; - int result = g_ability->GetRoots(rootInfoVec); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_ScanFile_0000 occurs an exception."; + string funcNameIn; + NativeReference *jsObj = nullptr; + InputArgsParser argParser = [](napi_env &env, napi_value *argv, size_t &argc) -> bool { + return false; + }; + ResultValueParser retParser = nullptr; + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg)); + auto result = ability->CallJsMethod(funcNameIn, *jsRuntime, jsObj, argParser, retParser); + EXPECT_EQ(result, EINVAL); + + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(-1)); + result = ability->CallJsMethod(funcNameIn, *jsRuntime, jsObj, argParser, retParser); + EXPECT_EQ(result, EINVAL); + + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + result = ability->CallJsMethod(funcNameIn, *jsRuntime, jsObj, argParser, retParser); + EXPECT_EQ(result, ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_ScanFile_0000"; + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_CallJsMethod_0000"; } /** - * @tc.number: user_file_service_js_file_access_ext_ability_Access_0000 - * @tc.name: js_file_access_ext_ability_Access_0000 - * @tc.desc: Test function of Access for error which CallJsMethod error + * @tc.number: user_file_service_js_file_access_ext_ability_DoCallJsMethod_0000 + * @tc.name: js_file_access_ext_ability_DoCallJsMethod_0000 + * @tc.desc: Test function of DoCallJsMethod interface for ERROR. * @tc.size: MEDIUM * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Access_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Access_0000"; +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_DoCallJsMethod_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_DoCallJsMethod_0000"; try { - Uri uri("someUriString"); - bool isExist = true; - int result = g_ability->Access(uri, isExist); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Access_0000 occurs an exception."; + string funcNameIn; + napi_value rslt; + NativeReference *jsObj = nullptr; + InputArgsParser argParser = [](napi_env &env, napi_value *argv, size_t &argc) -> bool { + return false; + }; + ResultValueParser retParser = nullptr; + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(-1)); + auto result = ability->CallJsMethod(funcNameIn, *jsRuntime, jsObj, argParser, retParser); + EXPECT_EQ(result, EINVAL); + + argParser = nullptr; + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(-1)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)).WillOnce(Return(napi_ok)); + result = ability->CallJsMethod(funcNameIn, *jsRuntime, jsObj, argParser, retParser); + EXPECT_EQ(result, EINVAL); + + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(-1)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)).WillOnce(Return(napi_ok)); + result = ability->CallJsMethod(funcNameIn, *jsRuntime, jsObj, argParser, retParser); + EXPECT_EQ(result, EINVAL); + + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(-1)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + result = ability->CallJsMethod(funcNameIn, *jsRuntime, jsObj, argParser, retParser); + EXPECT_EQ(result, EINVAL); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Access_0000"; + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_DoCallJsMethod_0000"; } /** - * @tc.number: user_file_service_js_file_access_ext_ability_Query_0000 - * @tc.name: js_file_access_ext_ability_Query_0000 - * @tc.desc: Test function of Query for error which CallJsMethod error + * @tc.number: user_file_service_js_file_access_ext_ability_DoCallJsMethod_0001 + * @tc.name: js_file_access_ext_ability_DoCallJsMethod_0001 + * @tc.desc: Test function of DoCallJsMethod interface for ERROR. * @tc.size: MEDIUM * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Query_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_Query_0000"; +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_DoCallJsMethod_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_DoCallJsMethod_0001"; try { - Uri uri("someUriString"); - std::vector columns; - std::vector results; - int result = g_ability->Query(uri, columns, results); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_Query_0000 occurs an exception."; + string funcNameIn; + napi_value rslt; + NativeReference *jsObj = nullptr; + InputArgsParser argParser = nullptr; + ResultValueParser retParser = [](napi_env&, napi_value) -> bool { + return false; + }; + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(-1)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)).WillOnce(Return(napi_ok)); + auto result = ability->CallJsMethod(funcNameIn, *jsRuntime, jsObj, argParser, retParser); + EXPECT_EQ(result, EINVAL); + + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(-1)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)).WillOnce(Return(napi_ok)); + result = ability->CallJsMethod(funcNameIn, *jsRuntime, jsObj, argParser, retParser); + EXPECT_EQ(result, EINVAL); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Query_0000"; + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_DoCallJsMethod_0001"; } /** - * @tc.number: user_file_service_js_file_access_ext_ability_GetFileInfoFromUri_0000 - * @tc.name: js_file_access_ext_ability_GetFileInfoFromUri_0000 - * @tc.desc: Test function of GetFileInfoFromUri for error which CallJsMethod error + * @tc.number: user_file_service_js_file_access_ext_ability_OpenFile_0000 + * @tc.name: js_file_access_ext_ability_OpenFile_0000 + * @tc.desc: Test function of OpenFile interface for ERROR. * @tc.size: MEDIUM * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_GetFileInfoFromUri_0000, - testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_GetFileInfoFromUri_0000"; +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0000"; try { - Uri uri("someUriString"); - FileInfo fileInfo; - int result = g_ability->GetFileInfoFromUri(uri, fileInfo); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_GetFileInfoFromUri_0000 occurs an exception."; + const Uri uri(""); + int fd = -1; + + // 模拟调用CallJsMethod失败 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg)); + auto result = ability->OpenFile(uri, 0, fd); + EXPECT_EQ(result, EINVAL); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_GetFileInfoFromUri_0000"; + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0000"; } /** - * @tc.number: user_file_service_js_file_access_ext_ability_GetFileInfoFromRelativePath_0000 - * @tc.name: js_file_access_ext_ability_GetFileInfoFromRelativePath_0000 - * @tc.desc: Test function of GetFileInfoFromRelativePath for error which CallJsMethod error + * @tc.number: user_file_service_js_file_access_ext_ability_OpenFile_0001 + * @tc.name: js_file_access_ext_ability_OpenFile_0001 + * @tc.desc: Test function of OpenFile interface for ERROR. * @tc.size: MEDIUM * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_GetFileInfoFromRelativePath_0000, - testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_GetFileInfoFromRelativePath_0000"; +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0001"; try { - std::string selectFileRealtivePath; - FileInfo fileInfo; - int result = g_ability->GetFileInfoFromRelativePath(selectFileRealtivePath, fileInfo); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_GetFileInfoFromRelativePath_0000 occurs an exception."; + napi_value rslt; + const Uri uri(""); + int fd = -1; + ability->jsObj_ = make_shared(); + + // 模拟获取nativeUri为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_create_int32(_, _, _)).WillOnce(Return(napi_ok)); + auto result = ability->OpenFile(uri, 0, fd); + EXPECT_EQ(result, ERR_OK); + + // 模拟获取nativeFlags为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_int32(_, _, _)).WillOnce(Return(napi_ok)); + result = ability->OpenFile(uri, 0, fd); + EXPECT_EQ(result, ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_GetFileInfoFromRelativePath_0000"; + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0001"; } /** - * @tc.number: user_file_service_js_file_access_ext_ability_StartWatcher_0000 - * @tc.name: js_file_access_ext_ability_StartWatcher_0000 - * @tc.desc: Test function of StartWatcher for error which CallJsMethod error + * @tc.number: user_file_service_js_file_access_ext_ability_OpenFile_0002 + * @tc.name: js_file_access_ext_ability_OpenFile_0002 + * @tc.desc: Test function of OpenFile interface for ERROR. * @tc.size: MEDIUM * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_StartWatcher_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_StartWatcher_0000"; +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0002"; try { - Uri uri("someUriString"); - int result = g_ability->StartWatcher(uri); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_StartWatcher_0000 occurs an exception."; + napi_value rslt; + const Uri uri(""); + int fd = -1; + ability->jsObj_ = make_shared(); + + // 模拟获取value->code失败 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_int32(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)).WillOnce(Return(napi_ok)) + .WillOnce(DoAll(SetArgPointee<2>(E_IPCS), Return(napi_ok))); + auto result = ability->OpenFile(uri, 0, fd); + EXPECT_EQ(result, E_IPCS); + + // 模拟获取value->data为-1 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_int32(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(fd), Return(napi_ok))).WillOnce(Return(napi_ok)); + result = ability->OpenFile(uri, 0, fd); + EXPECT_EQ(result, E_GETRESULT); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_StartWatcher_0000"; + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0002"; } /** - * @tc.number: user_file_service_js_file_access_ext_ability_StopWatcher_0000 - * @tc.name: js_file_access_ext_ability_StopWatcher_0000 - * @tc.desc: Test function of StopWatcher for error which CallJsMethod error + * @tc.number: user_file_service_js_file_access_ext_ability_OpenFile_0003 + * @tc.name: js_file_access_ext_ability_OpenFile_0003 + * @tc.desc: Test function of OpenFile interface for SUCCESS. * @tc.size: MEDIUM * @tc.type: FUNC - * @tc.level Level 1 - * @tc.require: I7U2SX + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T */ -HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_StopWatcher_0000, testing::ext::TestSize.Level1) { - GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin js_file_access_ext_ability_StopWatcher_0000"; +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0003, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_OpenFile_0003"; try { - Uri uri("someUriString"); - int result = g_ability->StopWatcher(uri); - EXPECT_NE(result, ERR_OK); - } catch(...) { - GTEST_LOG_(ERROR) << "js_file_access_ext_ability_StopWatcher_0000 occurs an exception."; + napi_value rslt; + const Uri uri(""); + int fd = -1; + ability->jsObj_ = make_shared(); + + // 模拟OpenFile调用成功 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_int32(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + auto result = ability->OpenFile(uri, 0, fd); + EXPECT_EQ(result, ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; } - GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_StopWatcher_0000"; -} + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0003"; } +} \ No newline at end of file diff --git a/test/unittest/mock/assistant.h b/test/unittest/mock/assistant.h index 7ce086dc..a859eb7c 100644 --- a/test/unittest/mock/assistant.h +++ b/test/unittest/mock/assistant.h @@ -18,6 +18,14 @@ #include +#ifdef FILE_SUBSYSTEM_DEBUG_LOCAL +#include +#else +#include "napi/native_api.h" +#include "napi/native_node_api.h" +#endif +#include "uv.h" + namespace OHOS { namespace FileAccessFwk { class Assistant { @@ -26,15 +34,47 @@ public: virtual bool Bool() = 0; virtual int Int() = 0; public: - static std::shared_ptr ins_; + virtual napi_status napi_get_uv_event_loop(napi_env, struct uv_loop_s**) = 0; + virtual napi_status napi_call_function(napi_env, napi_value, napi_value, size_t, const napi_value*, napi_value*) + = 0; + virtual napi_status napi_get_reference_value(napi_env, napi_ref, napi_value*) = 0; + virtual napi_status napi_get_named_property(napi_env, napi_value, const char*, napi_value*) = 0; + virtual int uv_queue_work(uv_loop_t*, uv_work_t*, uv_work_cb, uv_after_work_cb) = 0; + virtual napi_status napi_get_value_int32(napi_env, napi_value, int32_t*) = 0; + virtual napi_status napi_create_string_utf8(napi_env, const char*, size_t, napi_value*) = 0; + virtual napi_status napi_create_int32(napi_env, int32_t, napi_value*) = 0; + virtual napi_status napi_get_value_string_utf8(napi_env, napi_value, char*, size_t, size_t*) = 0; + virtual napi_status napi_get_boolean(napi_env, bool, napi_value*) = 0; + virtual napi_status napi_create_array(napi_env, napi_value*) = 0; + virtual napi_status napi_get_array_length(napi_env, napi_value, uint32_t*) = 0; + virtual napi_status napi_get_element(napi_env, napi_value, uint32_t, napi_value*) = 0; + virtual napi_status napi_escape_handle(napi_env, napi_escapable_handle_scope, napi_value, napi_value*) = 0; +public: + static inline std::shared_ptr ins_ = nullptr; }; class AssistantMock : public Assistant { public: MOCK_METHOD0(Bool, bool()); MOCK_METHOD0(Int, int()); +public: + MOCK_METHOD2(napi_get_uv_event_loop, napi_status(napi_env, struct uv_loop_s**)); + MOCK_METHOD6(napi_call_function, napi_status(napi_env, napi_value, napi_value, size_t, const napi_value*, + napi_value*)); + MOCK_METHOD3(napi_get_reference_value, napi_status(napi_env, napi_ref, napi_value*)); + MOCK_METHOD4(napi_get_named_property, napi_status(napi_env, napi_value, const char*, napi_value*)); + MOCK_METHOD4(uv_queue_work, int(uv_loop_t*, uv_work_t*, uv_work_cb, uv_after_work_cb)); + MOCK_METHOD3(napi_get_value_int32, napi_status(napi_env, napi_value, int32_t*)); + MOCK_METHOD4(napi_create_string_utf8, napi_status(napi_env, const char*, size_t, napi_value*)); + MOCK_METHOD3(napi_create_int32, napi_status(napi_env, int32_t, napi_value*)); + MOCK_METHOD5(napi_get_value_string_utf8, napi_status(napi_env, napi_value, char*, size_t, size_t*)); + MOCK_METHOD3(napi_get_boolean, napi_status(napi_env, bool, napi_value*)); + MOCK_METHOD2(napi_create_array, napi_status(napi_env, napi_value*)); + MOCK_METHOD3(napi_get_array_length, napi_status(napi_env, napi_value, uint32_t*)); + MOCK_METHOD4(napi_get_element, napi_status(napi_env, napi_value, uint32_t, napi_value*)); + MOCK_METHOD4(napi_escape_handle, napi_status(napi_env, napi_escapable_handle_scope, napi_value, napi_value*)); }; -} // End of namespace NativePreferences +} // End of namespace FileAccessFwk } // End of namespace OHOS #endif // TEST_UNITTEST_MOCK_FILE_ASSISTANT_H \ No newline at end of file diff --git a/test/unittest/mock/file_access_ext_ability_mock.h b/test/unittest/mock/file_access_ext_ability_mock.h index 3e06bbae..ca448c3f 100644 --- a/test/unittest/mock/file_access_ext_ability_mock.h +++ b/test/unittest/mock/file_access_ext_ability_mock.h @@ -55,6 +55,6 @@ public: MOCK_METHOD4(GetFileInfoNum, int(const std::string &sourceFileUri, const FileFilter &filter, bool recursion, uint32_t &counts)); }; -} // End of namespace NativePreferences +} // End of namespace FileAccessFwk } // End of namespace OHOS #endif // TEST_UNITTEST_MOCK_FILE_ACCESS_EXT_ABILITY_MOCK_H \ No newline at end of file diff --git a/test/unittest/mock/js_native_api_mock.cpp b/test/unittest/mock/js_native_api_mock.cpp new file mode 100644 index 00000000..366f1b0d --- /dev/null +++ b/test/unittest/mock/js_native_api_mock.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "assistant.h" +#include "uv.h" + +int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb, uv_after_work_cb after_work_cb) +{ + if (work_cb) { + work_cb(req); + } + if (after_work_cb) { + after_work_cb(req, 0); + } + return OHOS::FileAccessFwk::Assistant::ins_->uv_queue_work(loop, req, work_cb, after_work_cb); +} + +napi_status napi_get_uv_event_loop(napi_env env, struct uv_loop_s** loop) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_get_uv_event_loop(env, loop); +} + +napi_status napi_call_function(napi_env env, napi_value recv, napi_value func, size_t argc, const napi_value* argv, + napi_value* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_call_function(env, recv, func, argc, argv, result); +} + +napi_status napi_get_reference_value(napi_env env, napi_ref ref, napi_value* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_get_reference_value(env, ref, result); +} + +napi_status napi_get_named_property(napi_env env, napi_value object, const char* utf8name, napi_value* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_get_named_property(env, object, utf8name, result); +} + +napi_status napi_get_value_int32(napi_env env, napi_value value, int32_t* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_get_value_int32(env, value, result); +} + +napi_status napi_create_string_utf8(napi_env env, const char* str, size_t length, napi_value* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_create_string_utf8(env, str, length, result); +} + +napi_status napi_create_int32(napi_env env, int32_t value, napi_value* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_create_int32(env, value, result); +} + +napi_status napi_get_value_string_utf8(napi_env env, napi_value value, char* buf, size_t bufsize, size_t* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_get_value_string_utf8(env, value, buf, bufsize, result); +} + +napi_status napi_get_boolean(napi_env env, bool value, napi_value* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_get_boolean(env, value, result); +} + +napi_status napi_create_array(napi_env env, napi_value* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_create_array(env, result); +} + +napi_status napi_get_array_length(napi_env env, napi_value value, uint32_t* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_get_array_length(env, value, result); +} + +napi_status napi_get_element(napi_env env, napi_value object, uint32_t index, napi_value* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_get_element(env, object, index, result); +} + +napi_status napi_escape_handle(napi_env env, napi_escapable_handle_scope scope, napi_value escapee, napi_value* result) +{ + return OHOS::FileAccessFwk::Assistant::ins_->napi_escape_handle(env, scope, escapee, result); +} \ No newline at end of file diff --git a/test/unittest/mock/native_reference_mock.h b/test/unittest/mock/native_reference_mock.h new file mode 100644 index 00000000..2b2bad1e --- /dev/null +++ b/test/unittest/mock/native_reference_mock.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef TEST_UNITTEST_MOCK_NATIVE_REFERENCE_MOCK_H +#define TEST_UNITTEST_MOCK_NATIVE_REFERENCE_MOCK_H + +#include + +#include "native_engine/native_reference.h" + +namespace OHOS { +namespace FileAccessFwk { +class NativeReferenceMock : public NativeReference { +public: + NativeReferenceMock() = default; + virtual ~NativeReferenceMock() = default; + MOCK_METHOD0(Ref, uint32_t()); + MOCK_METHOD0(Unref, uint32_t()); + MOCK_METHOD0(Get, napi_value()); + MOCK_METHOD0(GetData, void*()); + virtual operator napi_value() override + { + return reinterpret_cast(this); + } + MOCK_METHOD0(SetDeleteSelf, void()); + MOCK_METHOD0(GetRefCount, uint32_t()); + MOCK_METHOD0(GetFinalRun, bool()); + MOCK_METHOD0(GetNapiValue, napi_value()); +}; +} // End of namespace FileAccessFwk +} // End of namespace OHOS +#endif // TEST_UNITTEST_MOCK_NATIVE_REFERENCE_MOCK_H \ No newline at end of file -- Gitee From 98ca4ace38be2ece80544e501b35b2e83280043c Mon Sep 17 00:00:00 2001 From: zhaoyongjin1 Date: Wed, 31 Jan 2024 16:38:24 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=96=B0=E5=A2=9Etdd=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhaoyongjin1 --- .../js_file_access_ext_ability_test.cpp | 651 ++++++++++++++++++ 1 file changed, 651 insertions(+) diff --git a/test/unittest/js_file_access_ext_ability_test.cpp b/test/unittest/js_file_access_ext_ability_test.cpp index a49204dd..cdd78643 100644 --- a/test/unittest/js_file_access_ext_ability_test.cpp +++ b/test/unittest/js_file_access_ext_ability_test.cpp @@ -470,4 +470,655 @@ HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_OpenFile_0003, t } GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_OpenFile_0003"; } + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_CreateFile_0000 + * @tc.name: js_file_access_ext_ability_CreateFile_0000 + * @tc.desc: Test function of CreateFile interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_CreateFile_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_CreateFile_0000"; + try { + Uri parent(""); + string displayName(""); + Uri newFile(""); + + // 模拟调用CallJsMethod失败 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg)); + auto result = ability->CreateFile(parent, displayName, newFile); + EXPECT_EQ(result, EINVAL); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_CreateFile_0000"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_CreateFile_0001 + * @tc.name: js_file_access_ext_ability_CreateFile_0001 + * @tc.desc: Test function of CreateFile interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_CreateFile_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_CreateFile_0001"; + try { + napi_value rslt; + Uri parent(""); + string displayName(""); + Uri newFile(""); + ability->jsObj_ = make_shared(); + + // 模拟获取nativeParent为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + auto result = ability->CreateFile(parent, displayName, newFile); + EXPECT_EQ(result, E_GETRESULT); + + // 模拟获取nativeDisplayName为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)); + result = ability->CreateFile(parent, displayName, newFile); + EXPECT_EQ(result, E_GETRESULT); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_CreateFile_0001"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_CreateFile_0002 + * @tc.name: js_file_access_ext_ability_CreateFile_0002 + * @tc.desc: Test function of CreateFile interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_CreateFile_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_CreateFile_0002"; + try { + napi_value rslt; + Uri parent(""); + string displayName(""); + Uri newFile(""); + ability->jsObj_ = make_shared(); + + // 模拟获取value->code失败 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillRepeatedly(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_string_utf8(_, _, _, _, _)) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)).WillOnce(DoAll(SetArgPointee<2>(E_IPCS), Return(napi_ok))); + auto result = ability->CreateFile(parent, displayName, newFile); + EXPECT_EQ(result, E_IPCS); + + // 模拟获取value->data为-1 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillRepeatedly(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_string_utf8(_, _, _, _, _)) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)) + .WillOnce(Return(napi_ok)); + result = ability->CreateFile(parent, displayName, newFile); + EXPECT_EQ(result, E_GETRESULT); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_CreateFile_0002"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_CreateFile_0003 + * @tc.name: js_file_access_ext_ability_CreateFile_0003 + * @tc.desc: Test function of CreateFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_CreateFile_0003, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_CreateFile_0003"; + try { + napi_value rslt; + string path = "test"; + Uri parent(""); + string displayName(""); + Uri newFile(""); + ability->jsObj_ = make_shared(); + + // 模拟CreateFile调用成功 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)) + .WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_string_utf8(_, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<4>(path.length()), Return(napi_ok))) + .WillOnce(DoAll(SetArrayArgument<2>(path.begin(), path.end()), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)).WillOnce(Return(napi_ok)); + auto result = ability->CreateFile(parent, displayName, newFile); + EXPECT_EQ(result, ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_CreateFile_0003"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Mkdir_0000 + * @tc.name: js_file_access_ext_ability_Mkdir_0000 + * @tc.desc: Test function of Mkdir interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Mkdir_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Mkdir_0000"; + try { + Uri parent(""); + string displayName(""); + Uri newFile(""); + + // 模拟调用CallJsMethod失败 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg)); + auto result = ability->Mkdir(parent, displayName, newFile); + EXPECT_EQ(result, EINVAL); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Mkdir_0000"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Mkdir_0001 + * @tc.name: js_file_access_ext_ability_Mkdir_0001 + * @tc.desc: Test function of Mkdir interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Mkdir_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Mkdir_0001"; + try { + napi_value rslt; + Uri parent(""); + string displayName(""); + Uri newFile(""); + ability->jsObj_ = make_shared(); + + // 模拟获取nativeParent为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + auto result = ability->Mkdir(parent, displayName, newFile); + EXPECT_EQ(result, E_GETRESULT); + + // 模拟获取nativeDisplayName为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)); + result = ability->Mkdir(parent, displayName, newFile); + EXPECT_EQ(result, E_GETRESULT); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Mkdir_0001"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Mkdir_0002 + * @tc.name: js_file_access_ext_ability_Mkdir_0002 + * @tc.desc: Test function of Mkdir interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Mkdir_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Mkdir_0002"; + try { + napi_value rslt; + Uri parent(""); + string displayName(""); + Uri newFile(""); + ability->jsObj_ = make_shared(); + + // 模拟获取value->code失败 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillRepeatedly(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_string_utf8(_, _, _, _, _)) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)).WillOnce(DoAll(SetArgPointee<2>(E_IPCS), Return(napi_ok))); + auto result = ability->Mkdir(parent, displayName, newFile); + EXPECT_EQ(result, E_IPCS); + + // 模拟获取value->data为-1 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillRepeatedly(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_string_utf8(_, _, _, _, _)) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)).WillOnce(Return(napi_ok)); + result = ability->Mkdir(parent, displayName, newFile); + EXPECT_EQ(result, E_GETRESULT); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Mkdir_0002"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Mkdir_0003 + * @tc.name: js_file_access_ext_ability_Mkdir_0003 + * @tc.desc: Test function of Mkdir interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Mkdir_0003, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Mkdir_0003"; + try { + napi_value rslt; + string path = "test"; + Uri parent(""); + string displayName(""); + Uri newFile(""); + ability->jsObj_ = make_shared(); + + // 模拟Mkdir调用成功 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)) + .WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_string_utf8(_, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<4>(path.length()), Return(napi_ok))) + .WillOnce(DoAll(SetArrayArgument<2>(path.begin(), path.end()), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)).WillOnce(Return(napi_ok)); + auto result = ability->Mkdir(parent, displayName, newFile); + EXPECT_EQ(result, ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Mkdir_0003"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Delete_0000 + * @tc.name: js_file_access_ext_ability_Delete_0000 + * @tc.desc: Test function of Delete interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Delete_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Delete_0000"; + try { + Uri sourceFile(""); + + // 模拟调用CallJsMethod失败 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg)); + auto result = ability->Delete(sourceFile); + EXPECT_EQ(result, EINVAL); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Delete_0000"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Delete_0001 + * @tc.name: js_file_access_ext_ability_Delete_0001 + * @tc.desc: Test function of Delete interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Delete_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Delete_0001"; + try { + napi_value rslt; + Uri sourceFile(""); + ability->jsObj_ = make_shared(); + + // 模拟获取nativeUri为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)).WillOnce(Return(napi_ok)); + auto result = ability->Delete(sourceFile); + EXPECT_EQ(result, ERR_OK); + + // 模拟获取nativeDisplayName为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(E_IPCS), Return(napi_invalid_arg))); + result = ability->Delete(sourceFile); + EXPECT_EQ(result, E_IPCS); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Delete_0001"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Delete_0002 + * @tc.name: js_file_access_ext_ability_Delete_0002 + * @tc.desc: Test function of Delete interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Delete_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Delete_0002"; + try { + napi_value rslt; + Uri sourceFile(""); + ability->jsObj_ = make_shared(); + + // 模拟Delete调用成功 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(ERR_OK), Return(napi_ok))); + auto result = ability->Delete(sourceFile); + EXPECT_EQ(result, ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Delete_0002"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Move_0000 + * @tc.name: js_file_access_ext_ability_Move_0000 + * @tc.desc: Test function of Move interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Move_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Move_0000"; + try { + Uri sourceFile(""); + Uri targetParent(""); + Uri newFile(""); + + // 模拟调用CallJsMethod失败 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg)); + auto result = ability->Move(sourceFile, targetParent, newFile); + EXPECT_EQ(result, EINVAL); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Move_0000"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Move_0001 + * @tc.name: js_file_access_ext_ability_Move_0001 + * @tc.desc: Test function of Move interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Move_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Move_0001"; + try { + napi_value rslt; + Uri sourceFile(""); + Uri targetParent(""); + Uri newFile(""); + ability->jsObj_ = make_shared(); + + // 模拟获取srcUri为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)).WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + auto result = ability->Move(sourceFile, targetParent, newFile); + EXPECT_EQ(result, E_GETRESULT); + + // 模拟获取dstUri为空 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)); + result = ability->Move(sourceFile, targetParent, newFile); + EXPECT_EQ(result, E_GETRESULT); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Move_0001"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Move_0002 + * @tc.name: js_file_access_ext_ability_Move_0002 + * @tc.desc: Test function of Move interface for ERROR. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Move_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Move_0002"; + try { + napi_value rslt; + Uri sourceFile(""); + Uri targetParent(""); + Uri newFile(""); + ability->jsObj_ = make_shared(); + + // 模拟获取value->code失败 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillRepeatedly(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_string_utf8(_, _, _, _, _)) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)).WillOnce(DoAll(SetArgPointee<2>(E_IPCS), Return(napi_ok))); + auto result = ability->Move(sourceFile, targetParent, newFile); + EXPECT_EQ(result, E_IPCS); + + // 模拟获取value->data为-1 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillRepeatedly(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_string_utf8(_, _, _, _, _)) + .WillOnce(Return(napi_ok)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)) + .WillOnce(Return(napi_ok)); + result = ability->Move(sourceFile, targetParent, newFile); + EXPECT_EQ(result, E_GETRESULT); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Move_0002"; +} + +/** + * @tc.number: user_file_service_js_file_access_ext_ability_Move_0003 + * @tc.name: js_file_access_ext_ability_Move_0003 + * @tc.desc: Test function of Move interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 3 + * @tc.require: issuesI8ZE8T + */ +HWTEST_F(JsFileAccessExtAbilityTest, js_file_access_ext_ability_Move_0003, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-begin js_file_access_ext_ability_Move_0003"; + try { + napi_value rslt; + string path = "test"; + Uri sourceFile(""); + Uri targetParent(""); + Uri newFile(""); + ability->jsObj_ = make_shared(); + + // 模拟Move调用成功 + EXPECT_CALL(*insMoc, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, uv_queue_work(_, _, _, _)).WillOnce(Return(0)); + EXPECT_CALL(*insMoc, napi_get_reference_value(_, _, _)) + .WillOnce(DoAll(SetArgPointee<2>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_named_property(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(Return(napi_ok)) + .WillOnce(Return(napi_ok)); + EXPECT_CALL(*insMoc, napi_call_function(_, _, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<5>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_escape_handle(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_create_string_utf8(_, _, _, _)) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))) + .WillOnce(DoAll(SetArgPointee<3>(reinterpret_cast(&rslt)), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_string_utf8(_, _, _, _, _)) + .WillOnce(DoAll(SetArgPointee<4>(path.length()), Return(napi_ok))) + .WillOnce(DoAll(SetArrayArgument<2>(path.begin(), path.end()), Return(napi_ok))); + EXPECT_CALL(*insMoc, napi_get_value_int32(_, _, _)).WillOnce(Return(napi_ok)); + auto result = ability->Move(sourceFile, targetParent, newFile); + EXPECT_EQ(result, ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "JsFileAccessExtAbilityTest occurs an exception."; + } + GTEST_LOG_(INFO) << "JsFileAccessExtAbilityTest-end js_file_access_ext_ability_Move_0003"; +} } \ No newline at end of file -- Gitee