diff --git a/frameworks/js/napi/file_access_module/file_info/file_info_entity.h b/frameworks/js/napi/file_access_module/file_info/file_info_entity.h index 3450af5b38a9c545f52486ffeba6d19552c5df4d..79f1eef3964e3674e87712e73b37dcf54d796ac5 100644 --- a/frameworks/js/napi/file_access_module/file_info/file_info_entity.h +++ b/frameworks/js/napi/file_access_module/file_info/file_info_entity.h @@ -22,12 +22,11 @@ namespace OHOS { namespace FileAccessFwk { -using namespace DistributedFS; struct FileInfoEntity { FileAccessHelper *fileAccessHelper { nullptr }; FileInfo fileInfo; - FileFilter filter { {}, {}, {}, 0, 0, false, false }; + FileFilter filter { {}, {}, {}, FileFilter::INVALIT_SIZE, FileFilter::INVALIT_MODIFY_AFTER, false, false }; }; } // namespace FileAccessFwk } // namespace OHOS diff --git a/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h b/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h index b945eb29832109c03affd0c6c7e6c2e973233ccb..c6ca4815c2028146d8829a1cb5f51b7293a60a6c 100644 --- a/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h +++ b/frameworks/js/napi/file_access_module/file_info/file_iterator_entity.h @@ -25,7 +25,6 @@ namespace OHOS { namespace FileAccessFwk { -using namespace DistributedFS; constexpr int64_t MAX_COUNT = 1000; // ListFile get file's max count @@ -36,7 +35,7 @@ struct FileIteratorEntity { std::vector fileInfoVec; int64_t offset { 0 }; uint64_t pos { 0 }; - FileFilter filter { {}, {}, {}, 0, 0, false, false }; + FileFilter filter { {}, {}, {}, FileFilter::INVALIT_SIZE, FileFilter::INVALIT_MODIFY_AFTER, false, false }; int flag { 0 }; }; } // namespace FileAccessFwk diff --git a/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp b/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp index 676fd18ed77b06dd32213cf39ce4ee7b7e04555e..82b253f733a7b9da7be0282377ce78c3f1cfc555 100644 --- a/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp +++ b/frameworks/js/napi/file_access_module/file_info/napi_file_info_exporter.cpp @@ -87,7 +87,7 @@ napi_value NapiFileInfoExporter::ListFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, FileFilter::INVALIT_SIZE, FileFilter::INVALIT_MODIFY_AFTER, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { @@ -152,7 +152,7 @@ napi_value NapiFileInfoExporter::ScanFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, FileFilter::INVALIT_SIZE, FileFilter::INVALIT_MODIFY_AFTER, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { diff --git a/frameworks/js/napi/file_access_module/napi_utils.cpp b/frameworks/js/napi/file_access_module/napi_utils.cpp index e093c886cd0c9daa47699a35ad8b16b5251f7f37..5e59a50d882351f6eacacbb9958a9c06678295bb 100644 --- a/frameworks/js/napi/file_access_module/napi_utils.cpp +++ b/frameworks/js/napi/file_access_module/napi_utils.cpp @@ -78,8 +78,6 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) } filter.SetSuffix(suffixs); filter.SetHasFilter(true); - } else { - return EINVAL; } if (argv.HasProp("displayName")) { @@ -113,7 +111,10 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) HILOG_ERROR("FileFilter get fileSizeOver param fail."); return EINVAL; } - + if (fileSizeOver < 0) { + HILOG_ERROR("FileFilter fileSizeOver need more than 0."); + return EINVAL; + } filter.SetFileSizeOver(fileSizeOver); filter.SetHasFilter(true); } @@ -125,7 +126,10 @@ int GetFileFilterParam(const NVal &argv, FileFilter &filter) HILOG_ERROR("FileFilter get lastModifiedAfter param fail."); return EINVAL; } - + if (lastModifiedAfter < 0) { + HILOG_ERROR("FileFilter lastModifiedAfter need more than 0."); + return EINVAL; + } filter.SetLastModifiedAfter(lastModifiedAfter); filter.SetHasFilter(true); } diff --git a/frameworks/js/napi/file_access_module/napi_utils.h b/frameworks/js/napi/file_access_module/napi_utils.h index 345cfb95e90248d08935745bfd609e1cc0bc76bc..619cb1b4e7afe6b84c8c32d934a9fc30b8aea191 100644 --- a/frameworks/js/napi/file_access_module/napi_utils.h +++ b/frameworks/js/napi/file_access_module/napi_utils.h @@ -23,7 +23,6 @@ namespace OHOS { namespace FileAccessFwk { -using namespace DistributedFS; using namespace FileManagement::LibN; int IsDirectory(const int64_t mode); diff --git a/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp b/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp index f8ee7085ccd37fd310f9a8726d71a9cae02df98e..8889d5dbfe660dd6a825a1d746aa80007c30e263 100644 --- a/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp +++ b/frameworks/js/napi/file_access_module/root_info/napi_root_info_exporter.cpp @@ -81,6 +81,61 @@ napi_value NapiRootInfoExporter::Constructor(napi_env env, napi_callback_info in return funcArg.GetThisVar(); } +int GetListFileFilterParam(const NVal &argv, FileFilter &filter) +{ + bool ret = false; + filter.SetHasFilter(false); + if (argv.HasProp("suffix")) { + HILOG_ERROR("The filter of RootInfo does not have the suffix attribute"); + return EINVAL; + } + + if (argv.HasProp("fileSizeOver")) { + HILOG_ERROR("The filter of RootInfo does not have the fileSizeOver attribute"); + return EINVAL; + } + + if (argv.HasProp("lastModifiedAfter")) { + HILOG_ERROR("The filter of RootInfo does not have the lastModifiedAfter attribute"); + return EINVAL; + } + + if (argv.HasProp("excludeMedia")) { + HILOG_ERROR("The filter of RootInfo does not have the excludeMedia attribute"); + return EINVAL; + } + + if (argv.HasProp("displayName")) { + std::vector displayNames; + std::tie(ret, displayNames, std::ignore) = argv.GetProp("displayName").ToStringArray(); + if (!ret) { + HILOG_ERROR("FileFilter get displayName param fail."); + return EINVAL; + } + + filter.SetDisplayName(displayNames); + filter.SetHasFilter(true); + } + + if (argv.HasProp("mimeType")) { + std::vector mimeTypes; + std::tie(ret, mimeTypes, std::ignore) = argv.GetProp("mimeType").ToStringArray(); + if (!ret) { + HILOG_ERROR("FileFilter get mimeType param fail."); + return EINVAL; + } + + filter.SetMimeType(mimeTypes); + filter.SetHasFilter(true); + } + + if (!filter.GetHasFilter()) { + HILOG_ERROR("FileFilter must have one property."); + return EINVAL; + } + return ERR_OK; +} + napi_value NapiRootInfoExporter::ListFile(napi_env env, napi_callback_info info) { NFuncArg funcArg(env, info); @@ -89,9 +144,9 @@ napi_value NapiRootInfoExporter::ListFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, FileFilter::INVALIT_SIZE, FileFilter::INVALIT_MODIFY_AFTER, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { - auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); + auto ret = GetListFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { NError(ret).ThrowErr(env); return nullptr; @@ -152,7 +207,7 @@ napi_value NapiRootInfoExporter::ScanFile(napi_env env, napi_callback_info info) return nullptr; } - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, FileFilter::INVALIT_SIZE, FileFilter::INVALIT_MODIFY_AFTER, false, false); if (funcArg.GetArgc() == NARG_CNT::ONE) { auto ret = GetFileFilterParam(NVal(env, funcArg.GetArg(NARG_POS::FIRST)), filter); if (ret != ERR_OK) { diff --git a/interfaces/inner_api/file_access/BUILD.gn b/interfaces/inner_api/file_access/BUILD.gn index 2deb848aa5eda8fd3d26fcd23e06061749ff8215..0486d5c5dbfd33c36d52dc5806790616cb73a2b1 100644 --- a/interfaces/inner_api/file_access/BUILD.gn +++ b/interfaces/inner_api/file_access/BUILD.gn @@ -25,6 +25,7 @@ config("ability_config") { "${ability_runtime_kits_path}/appkit/native/app/include", "${ability_runtime_napi_path}/inner/napi_common", "${access_token_path}/interfaces/innerkits/accesstoken/include", + "${user_file_service_path}/interfaces/kits/js/src/common", ] cflags = [] diff --git a/interfaces/inner_api/file_access/include/file_access_ext_ability.h b/interfaces/inner_api/file_access/include/file_access_ext_ability.h index 783dc1387be3922893c767acf18e123389d0aa21..8d0d899cdfa33518dfc800a6d8ad582a6aea0db7 100644 --- a/interfaces/inner_api/file_access/include/file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/file_access_ext_ability.h @@ -27,7 +27,6 @@ class Runtime; } namespace FileAccessFwk { using namespace Media; -using namespace DistributedFS; using namespace AbilityRuntime; class FileAccessExtAbility; using CreatorFunc = std::function& runtime)>; diff --git a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h index c884566bb2388fdbc30e3482ab3ef2acce501bfc..9cb5f5d04a1b033c3a069ea9ddb2e80e63322cff 100644 --- a/interfaces/inner_api/file_access/include/ifile_access_ext_base.h +++ b/interfaces/inner_api/file_access/include/ifile_access_ext_base.h @@ -29,7 +29,6 @@ namespace OHOS { namespace FileAccessFwk { -using namespace DistributedFS; using namespace Media; class IFileAccessExtBase : public IRemoteBroker { diff --git a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h index 097771a27bac3bfea26ecdb26e935b8a1f3cbd75..0cc02b40e012051bf47bd950b42de8a8516d75d5 100644 --- a/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h +++ b/interfaces/inner_api/file_access/include/js_file_access_ext_ability.h @@ -68,6 +68,8 @@ public: int Rename(const Uri &sourceFile, const std::string &displayName, Uri &newFile) override; int ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) override; + int ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, + std::vector &fileInfoVec) override; int GetFileInfoFromUri(const Uri &selectFile, FileInfo &fileInfo) override; int GetRoots(std::vector &rootInfoVec) override; int Access(const Uri &uri, bool &isExist) override; @@ -78,7 +80,6 @@ private: int CallJsMethod(const std::string &funcName, JsRuntime &jsRuntime, NativeReference *jsObj, InputArgsParser argParser, ResultValueParser retParser); void GetSrcPath(std::string &srcPath); - JsRuntime &jsRuntime_; std::shared_ptr jsObj_; }; diff --git a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp index 231cc6ff1d093128d56a6f0a1b8e089d7f218153..364ca2241e7646e49a74d7612c80e8a27aaa4431 100644 --- a/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp +++ b/interfaces/inner_api/file_access/src/js_file_access_ext_ability.cpp @@ -47,6 +47,12 @@ using namespace OHOS::AppExecFwk; using namespace OHOS::AbilityRuntime; using OHOS::Security::AccessToken::AccessTokenKit; +struct FilterParam { + FileInfo fileInfo; + int64_t offset; + int64_t maxCount; +}; + JsFileAccessExtAbility* JsFileAccessExtAbility::Create(const std::unique_ptr &runtime) { return new JsFileAccessExtAbility(static_cast(*runtime)); @@ -697,7 +703,7 @@ static int MakeStringNativeArray(NativeEngine &engine, std::vector } bool ret = false; - for (uint32_t i = 0; i < nativeArray->GetLength(); i++) { + for (uint32_t i = 0; i < inputArray.size(); i++) { NativeValue* nativeValue = engine.CreateString(inputArray[i].c_str(), inputArray[i].length()); if (nativeValue == nullptr) { HILOG_ERROR("Create NativeValue fail."); @@ -716,9 +722,9 @@ static int MakeStringNativeArray(NativeEngine &engine, std::vector static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter, NativeValue *nativeFilter) { - nativeFilter = engine.CreateObject(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); + NativeObject *objFilter = ConvertNativeValueTo(nativeFilter); + if (objFilter == nullptr) { + HILOG_ERROR("Convert js object fail."); return E_GETRESULT; } @@ -779,12 +785,6 @@ static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter return E_GETRESULT; } - NativeObject *objFilter = ConvertNativeValueTo(nativeFilter); - if (objFilter == nullptr) { - HILOG_ERROR("Convert js object fail."); - return E_GETRESULT; - } - bool ret = objFilter->SetProperty("suffix", suffixArray); ret = ret && objFilter->SetProperty("displayName", displayNameArray); ret = ret && objFilter->SetProperty("mimeType", mimeTypeArray); @@ -799,6 +799,57 @@ static int MakeJsNativeFileFilter(NativeEngine &engine, const FileFilter &filter return ERR_OK; } +static bool BuildFilterParam(NativeEngine &engine, const FileFilter &filter, const FilterParam ¶m, + NativeValue *argv[], size_t &argc) +{ + string uriStr = param.fileInfo.uri; + NativeValue *uri = engine.CreateString(uriStr.c_str(), uriStr.length()); + if (uri == nullptr) { + HILOG_ERROR("create sourceFile uri native js value fail."); + return false; + } + + NativeValue *nativeOffset = engine.CreateNumber(param.offset); + if (nativeOffset == nullptr) { + HILOG_ERROR("create nativeMaxNum native js value fail."); + return false; + } + + NativeValue *nativeMaxCount = engine.CreateNumber(param.maxCount); + if (nativeMaxCount == nullptr) { + HILOG_ERROR("create nativeMaxNum native js value fail."); + return false; + } + + NativeValue *nativeFilter = nullptr; + if (filter.GetHasFilter()) { + nativeFilter = engine.CreateObject(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } + int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); + if (ret != ERR_OK) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } + } else { + nativeFilter = engine.CreateNull(); + if (nativeFilter == nullptr) { + HILOG_ERROR("Create js NativeValue fail."); + return false; + } + } + + argv[ARGC_ZERO] = uri; + argv[ARGC_ONE] = nativeOffset; + argv[ARGC_TWO] = nativeMaxCount; + argv[ARGC_THREE] = nativeFilter; + argc = ARGC_FOUR; + + return true; +} + int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, const FileFilter &filter, std::vector &fileInfoVec) { @@ -812,46 +863,65 @@ int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t off auto argParser = [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { - NativeValue *uri = engine.CreateString(fileInfo.uri.c_str(), fileInfo.uri.length()); - if (uri == nullptr) { - HILOG_ERROR("create sourceFile uri native js value fail."); - return false; - } - - NativeValue *nativeOffset = engine.CreateNumber(offset); - if (nativeOffset == nullptr) { - HILOG_ERROR("create nativeMaxNum native js value fail."); - return false; - } + struct FilterParam param; + param.fileInfo = fileInfo; + param.offset = offset; + param.maxCount = maxCount; - NativeValue *nativeMaxCount = engine.CreateNumber(maxCount); - if (nativeMaxCount == nullptr) { - HILOG_ERROR("create nativeMaxNum native js value fail."); - return false; - } + return BuildFilterParam(engine, filter, param, argv, argc); + }; - NativeValue* nativeFilter = nullptr; - if (filter.GetHasFilter()) { - int ret = MakeJsNativeFileFilter(engine, filter, nativeFilter); - if (ret != ERR_OK) { - HILOG_ERROR("Create js NativeValue fail."); - return ret; - } - } else { - nativeFilter = engine.CreateNull(); - if (nativeFilter == nullptr) { - HILOG_ERROR("Create js NativeValue fail."); - return E_GETRESULT; - } + auto retParser = [value](NativeEngine &engine, NativeValue *result) -> bool { + Value> fileInfo; + bool ret = ParserListFileJsResult(engine, result, fileInfo); + if (!ret) { + HILOG_ERROR("Parser js value fail."); + return ret; } - argv[ARGC_ZERO] = uri; - argv[ARGC_ONE] = nativeOffset; - argv[ARGC_TWO] = nativeMaxCount; - argv[ARGC_THREE] = nativeFilter; - argc = ARGC_FOUR; + *value = std::move(fileInfo); return true; }; + + auto errCode = CallJsMethod("listFile", jsRuntime_, jsObj_.get(), argParser, retParser); + if (errCode != ERR_OK) { + HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return errCode; + } + + if (value->code != ERR_OK) { + HILOG_ERROR("fileio fail."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return value->code; + } + + fileInfoVec = std::move(value->data); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return ERR_OK; +} + +int JsFileAccessExtAbility::ScanFile(const FileInfo &fileInfo, const int64_t offset, const int64_t maxCount, + const FileFilter &filter, std::vector &fileInfoVec) +{ + StartTrace(HITRACE_TAG_FILEMANAGEMENT, "ScanFile"); + auto value = std::make_shared>>(); + if (value == nullptr) { + HILOG_ERROR("ScanFile value is nullptr."); + FinishTrace(HITRACE_TAG_FILEMANAGEMENT); + return E_GETRESULT; + } + + auto argParser = + [fileInfo, offset, maxCount, filter](NativeEngine &engine, NativeValue *argv[], size_t &argc) -> bool { + struct FilterParam param; + param.fileInfo = fileInfo; + param.offset = offset; + param.maxCount = maxCount; + + return BuildFilterParam(engine, filter, param, argv, argc); + }; + auto retParser = [value](NativeEngine &engine, NativeValue *result) -> bool { Value> fileInfo; bool ret = ParserListFileJsResult(engine, result, fileInfo); @@ -864,7 +934,7 @@ int JsFileAccessExtAbility::ListFile(const FileInfo &fileInfo, const int64_t off return true; }; - auto errCode = CallJsMethod("listFile", jsRuntime_, jsObj_.get(), argParser, retParser); + auto errCode = CallJsMethod("scanFile", jsRuntime_, jsObj_.get(), argParser, retParser); if (errCode != ERR_OK) { HILOG_ERROR("CallJsMethod error, code:%{public}d.", errCode); FinishTrace(HITRACE_TAG_FILEMANAGEMENT); diff --git a/interfaces/kits/js/src/common/file_filter.h b/interfaces/kits/js/src/common/file_filter.h index 694b6f0d20f78718753955e42f1e80c5b942dfbd..6d02aa38331f475eb888ac3ba4ae0d428e12c9d5 100644 --- a/interfaces/kits/js/src/common/file_filter.h +++ b/interfaces/kits/js/src/common/file_filter.h @@ -21,7 +21,7 @@ #include "parcel.h" namespace OHOS { -namespace DistributedFS { +namespace FileAccessFwk { class FileFilter : public Parcelable { public: FileFilter() = default; @@ -32,7 +32,7 @@ public: double lastModifiedAfter, bool excludeMedia, bool hasFilter) : suffix_(suffix), displayName_(displayName), mimeType_(mimeType), fileSizeOver_(fileSizeOver), lastModifiedAfter_(lastModifiedAfter), excludeMedia_(excludeMedia), hasFilter_(hasFilter) {} - explicit FileFilter(std::vector suffix): suffix_(suffix) {} + FileFilter(const FileFilter &filter) = default; FileFilter &operator=(const FileFilter& filter) = default; @@ -160,15 +160,18 @@ public: return true; } + static const int32_t INVALIT_SIZE = -1; + static const int32_t INVALIT_MODIFY_AFTER = -1; + private: std::vector suffix_ = std::vector(); std::vector displayName_ = std::vector(); std::vector mimeType_ = std::vector(); - int64_t fileSizeOver_ = 0; - double lastModifiedAfter_ = 0; + int64_t fileSizeOver_ = -1; + double lastModifiedAfter_ = -1; bool excludeMedia_ = false; bool hasFilter_ = false; }; -} // namespace DistributedFS +} // namespace FileAccessFwk } // namespace OHOS #endif // FILE_FILTER_H \ No newline at end of file diff --git a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts index 0300dea79bcbe171db27e0c09c515438e473c18f..56ef313b52a48239c87a46ecbac02a0be8283976 100644 --- a/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts +++ b/services/file_extension_hap/entry/src/main/ets/FileExtensionAbility/FileExtensionAbility.ts @@ -15,7 +15,7 @@ // @ts-nocheck import Extension from '@ohos.application.FileAccessExtensionAbility'; import fs from '@ohos.file.fs'; -import { init, delVolumeInfo, getVolumeInfoList, path2uri } from './VolumeManager'; +import { init, delVolumeInfo, getVolumeInfoList } from './VolumeManager'; import { onReceiveEvent } from './Subcriber'; import fileExtensionInfo from '@ohos.file.fileExtensionInfo'; import hilog from '@ohos.hilog'; @@ -50,6 +50,26 @@ export default class FileExtAbility extends Extension { }); } + encode(uri): string { + try { + uri = encodeURI(uri); + } catch (e) { + hilog.error(DOMAIN_CODE, TAG, 'The reason of encodeURI: ' + e.message + ' code: ' + e.code); + uri = ''; + } + return uri; + } + + decode(uri): string { + try { + uri = decodeURI(uri); + } catch (e) { + hilog.error(DOMAIN_CODE, TAG, 'The reason of decodeURI: ' + e.message + ' code: ' + e.code); + uri = ''; + } + return uri; + } + checkUri(uri): boolean { try { let uriTmp = new baseUri.URI(uri); @@ -159,6 +179,13 @@ export default class FileExtAbility extends Extension { } openFile(sourceFileUri, flags): {number, number} { + sourceFileUri = this.decode(sourceFileUri); + if (sourceFileUri === '') { + return { + fd: ERR_ERROR, + code: E_URIS, + }; + } if (!this.checkUri(sourceFileUri)) { return { fd: ERR_ERROR, @@ -182,6 +209,13 @@ export default class FileExtAbility extends Extension { } createFile(parentUri, displayName): {string, number} { + parentUri = this.decode(parentUri); + if (parentUri === '') { + return { + uri: '', + code: E_URIS + }; + } if (!this.checkUri(parentUri)) { return { uri: '', @@ -199,6 +233,7 @@ export default class FileExtAbility extends Extension { let path = this.getPath(newFileUri); let file = fs.openSync(path, fs.OpenMode.CREATE); fs.closeSync(file); + newFileUri = encodeURI(newFileUri); return { uri: newFileUri, code: ERR_OK, @@ -213,6 +248,13 @@ export default class FileExtAbility extends Extension { } mkdir(parentUri, displayName): {string, number} { + parentUri = this.decode(parentUri); + if (parentUri === '') { + return { + uri: '', + code: E_URIS + }; + } if (!this.checkUri(parentUri)) { return { uri: '', @@ -222,7 +264,9 @@ export default class FileExtAbility extends Extension { try { let newFileUri = this.genNewFileUri(parentUri, displayName); let path = this.getPath(newFileUri); + fs.mkdirSync(path); + newFileUri = encodeURI(newFileUri); return { uri: newFileUri, code: ERR_OK, @@ -237,6 +281,13 @@ export default class FileExtAbility extends Extension { } delete(selectFileUri): number { + selectFileUri = this.decode(selectFileUri); + if (selectFileUri === '') { + return { + uri: '', + code: E_URIS + }; + } if (!this.checkUri(selectFileUri)) { return E_URIS; } @@ -268,6 +319,15 @@ export default class FileExtAbility extends Extension { } move(sourceFileUri, targetParentUri): {string, number} { + sourceFileUri = this.decode(sourceFileUri); + targetParentUri = this.decode(targetParentUri); + if (sourceFileUri === '' || targetParentUri === '') { + return { + uri: '', + code: E_URIS, + }; + } + if (!this.checkUri(sourceFileUri) || !this.checkUri(targetParentUri)) { return { uri: '', @@ -278,6 +338,14 @@ export default class FileExtAbility extends Extension { let newFileUri = this.genNewFileUri(targetParentUri, displayName); let oldPath = this.getPath(sourceFileUri); let newPath = this.getPath(newFileUri); + newFileUri = this.encode(newFileUri); + if (newFileUri === '') { + return { + uri: '', + code: E_URIS, + }; + } + if (oldPath === newPath) { // move to the same directory return { @@ -337,6 +405,14 @@ export default class FileExtAbility extends Extension { } rename(sourceFileUri, displayName): {string, number} { + sourceFileUri = this.decode(sourceFileUri); + if (sourceFileUri === '') { + return { + uri: '', + code: E_URIS, + }; + } + if (!this.checkUri(sourceFileUri)) { return { uri: '', @@ -348,6 +424,7 @@ export default class FileExtAbility extends Extension { let oldPath = this.getPath(sourceFileUri); let newPath = this.getPath(newFileUri); fs.renameSync(oldPath, newPath); + newFileUri = encodeURI(newFileUri); return { uri: newFileUri, code: ERR_OK, @@ -362,6 +439,13 @@ export default class FileExtAbility extends Extension { } access(sourceFileUri): {boolean, number} { + sourceFileUri = this.decode(sourceFileUri); + if (sourceFileUri === '') { + return { + uri: '', + code: E_URIS, + }; + } if (!this.checkUri(sourceFileUri)) { hilog.error(DOMAIN_CODE, TAG, 'access checkUri fail'); return { @@ -392,62 +476,15 @@ export default class FileExtAbility extends Extension { }; } - listFile(sourceFileUri, offset, count, filter) { - if (!this.checkUri(sourceFileUri)) { + getFileInfoFromUri(selectFileUri) { + selectFileUri = this.decode(selectFileUri); + if (selectFileUri === '') { return { - infos: [], + uri: '', code: E_URIS, }; } - let infos = []; - let path = this.getPath(sourceFileUri); - let statPath = fs.statSync(path); - if (!statPath.isDirectory()) { - return { - infos: [], - code: E_GETRESULT, - }; - } - - try { - let fileName = fs.listFileSync(path); - for (let i = 0; i < fileName.length; i++) { - if (offset > i) { - continue; - } - if (i === (offset + count)) { - break; - } - let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; - let stat = fs.statSync(path + '/' + fileName[i]); - if (stat.isDirectory()) { - mode |= documentFlag.REPRESENTS_DIR; - } else { - mode |= documentFlag.REPRESENTS_FILE; - } - infos.push({ - uri: this.genNewFileUri(sourceFileUri, fileName[i]), - fileName: fileName[i], - mode: mode, - size: stat.size, - mtime: stat.mtime, - mimeType: '', - }); - } - } catch (e) { - hilog.error(DOMAIN_CODE, TAG, 'listFile error ' + e.message); - return { - infos: [], - code: E_GETRESULT, - }; - } - return { - infos: infos, - code: ERR_OK, - }; - } - getFileInfoFromUri(selectFileUri) { if (!this.checkUri(selectFileUri)) { return { fileInfo: {}, @@ -465,6 +502,7 @@ export default class FileExtAbility extends Extension { } else { mode |= documentFlag.REPRESENTS_FILE; } + selectFileUri = encodeURI(selectFileUri); fileInfo = { uri: selectFileUri, fileName: fileName, @@ -532,6 +570,14 @@ export default class FileExtAbility extends Extension { } query(uri, columns): {[], number} { + uri = this.decode(uri); + if (uri === '') { + return { + uri: '', + code: E_URIS, + }; + } + if (!this.checkUri(uri)) { return { results: [], @@ -570,4 +616,177 @@ export default class FileExtAbility extends Extension { code: ERR_OK, }; } + + hasFilter(filter) : boolean { + if (filter === null) { + return false; + } + + let displayNameArray = filter.displayName; + if (displayNameArray !== null && displayNameArray.length > 0) { + return true; + } + + let suffixArray = filter.suffix; + if (suffixArray !== null && suffixArray.length > 0) { + return true; + } + + let lastModifiedAfter = filter.lastModifiedAfter; + if (lastModifiedAfter !== null && lastModifiedAfter >= 0) { + return true; + } + + let fileSizeOver = filter.fileSizeOver; + if (fileSizeOver !== null && fileSizeOver >= 0) { + return true; + } + + return false; + } + + buildDisplayName(displayNameArray) { + let displayNames = []; + for (let i = 0; i < displayNameArray.length; i++) { + if (displayNameArray[i].lastIndexOf('*') === -1) { + let name = '*' + displayNameArray[i]; + displayNames.push(name); + } else { + displayNames.push(displayNameArray[i]); + } + } + return displayNames; + } + + buildFilterOptions(filter, listNum, recursion) { + let optionFilter = {}; + if (filter !== null) { + let suffixArray = filter.suffix; + if (suffixArray !== null && suffixArray.length > 0) { + optionFilter.suffix = suffixArray; + } + let displayNameArray = filter.displayName; + if (displayNameArray !== null && displayNameArray.length > 0) { + optionFilter.displayName = this.buildDiaplayName(displayNameArray); + } + let fileSizeOver = filter.fileSizeOver; + if (fileSizeOver !== null && fileSizeOver >= 0) { + optionFilter.fileSizeOver = fileSizeOver; + } + let lastModifiedAfter = filter.lastModifiedAfter; + if (lastModifiedAfter !== null && lastModifiedAfter >= 0) { + optionFilter.lastModifiedAfter = lastModifiedAfter; + } + } + let options = { + 'recursion': recursion, + 'listNum': listNum, + 'filter': optionFilter, + }; + return options; + } + + buildNoFilterOptions(listNum, recursion) : {boolean, number} { + let options = { + 'recursion': recursion, + 'listNum': listNum, + }; + return options; + } + + getFileInfos(sourceFileUri, offset, count, filter, recursion) { + let infos = []; + let path = this.getPath(sourceFileUri); + let statPath = fs.statSync(path); + if (!statPath.isDirectory()) { + return { + infos: [], + code: E_GETRESULT, + }; + } + + try { + let options; + let listNum = offset + count; + if (this.hasFilter(filter)) { + options = this.buildFilterOptions(filter, listNum, recursion); + } else { + options = this.buildNoFilterOptions(listNum, recursion); + } + let fileNameList = fs.listFileSync(path); + for (let i = 0; i < fileNameList.length; i++) { + if (offset > i) { + continue; + } + if (i === listNum) { + break; + } + let mode = documentFlag.SUPPORTS_READ | documentFlag.SUPPORTS_WRITE; + let stat = fs.statSync(path + '/' + fileNameList[i]); + if (stat.isDirectory()) { + mode |= documentFlag.REPRESENTS_DIR; + } else { + mode |= documentFlag.REPRESENTS_FILE; + } + let newFileUri = this.genNewFileUri(sourceFileUri, fileNameList[i]); + newFileUri = encodeURI(newFileUri); + infos.push({ + uri: newFileUri, + fileName: fileNameList[i], + mode: mode, + size: stat.size, + mtime: stat.mtime, + mimeType: '', + }); + } + } catch (e) { + hilog.error(DOMAIN_CODE, TAG, 'getFileInfos error ' + e.message); + return { + infos: [], + code: E_GETRESULT, + }; + } + return { + infos: infos, + code: ERR_OK, + }; + } + + listFile(sourceFileUri, offset, count, filter) { + sourceFileUri = this.decode(sourceFileUri); + if (sourceFileUri === '') { + return { + uri: '', + code: E_URIS, + }; + } + + if (!this.checkUri(sourceFileUri)) { + return { + infos: [], + code: E_URIS, + }; + } + + return this.getFileInfos(sourceFileUri, offset, count, filter, false); + } + + scanFile(sourceFileUri, offset, count, filter) { + sourceFileUri = this.decode(sourceFileUri); + if (sourceFileUri === '') { + return { + uri: '', + code: E_URIS, + }; + } + + if (!this.checkUri(sourceFileUri)) { + return { + infos: [], + code: E_URIS, + }; + } + + return this.getFileInfos(sourceFileUri, offset, count, filter, true); + } }; \ No newline at end of file diff --git a/test/unittest/external_file_access_test.cpp b/test/unittest/external_file_access_test.cpp index 2067e101473b59a484db98a49f90a2e32a4d379a..fdd241181355ea4bc3337b5a591c296547ce840f 100644 --- a/test/unittest/external_file_access_test.cpp +++ b/test/unittest/external_file_access_test.cpp @@ -44,6 +44,10 @@ int g_num = 0; const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; shared_ptr g_context = nullptr; +const int FILE_COUNT_2 = 2; +const int FILE_COUNT_4 = 4; +const int FILE_COUNT_5 = 5; +const int FILE_COUNT_6 = 6; void SetNativeToken() { @@ -2302,6 +2306,695 @@ HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0005, testing::e GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0005"; } +void WriteData(Uri &uri) +{ + int fd = -1; + std::string buff = "extenal_file_access_test"; + int result = g_fah->OpenFile(uri, WRITE_READ, fd); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + ssize_t fileSize = write(fd, buff.c_str(), buff.size()); + EXPECT_EQ(fileSize, buff.size()); + close(fd); +} + +double GetTime() +{ + struct timespec t{}; + t.tv_sec = 0; + t.tv_nsec = 0; + clock_gettime(CLOCK_REALTIME, &t); + return static_cast(t.tv_sec); +} + +void initListFile6(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0006.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + WriteData(testUri4); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0006_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ListFileFilter6(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); + + FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + FileFilter filter2({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, 0, 0, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 1); + + FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); +} +/** + * @tc.number: user_file_service_external_file_access_ListFile_0006 + * @tc.name: external_file_access_ListFile_0006 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0006, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0006"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + initListFile6(newDirUriTest); + ListFileFilter6(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0006 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0006"; +} + +void InitListFile7(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0007.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0007_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ListFileFilter7(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 4; + int64_t maxCount = 1; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 1); +} + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0007 + * @tc.name: external_file_access_ListFile_0007 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0007, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0007"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitListFile7(newDirUriTest); + ListFileFilter7(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0007 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0007"; +} + +void InitListFile8(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0008.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0008.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0008.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0008.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0008_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "test", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ListFile_01_0008_02.docx", testUri6); +} + +void ListFileFilter8(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({}, {}, {}, -1, 0, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); +} + + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0008 + * @tc.name: external_file_access_ListFile_0008 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0008, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0008"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitListFile8(newDirUriTest); + ListFileFilter8(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0008 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0008"; +} + +void InitListFile9(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0009.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_0009.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0009.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0009.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ListFile_01_0009_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "test", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ListFile_01_0009_02.docx", testUri6); +} + +void ListFileFilter9(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter; + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); +} + +/** + * @tc.number: user_file_service_external_file_access_ListFile_0009 + * @tc.name: external_file_access_ListFile_0009 + * @tc.desc: Test function of ListFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ListFile_0009, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ListFile_0008"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitListFile9(newDirUriTest); + ListFileFilter9(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ListFile_0009 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ListFile_0009"; +} + +void InitScanFile0(Uri newDirUriTest) +{ + Uri forlderUriTest(""); + int result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0000.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + WriteData(testUri4); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0000_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ScanFileFilter0(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); + + FileFilter filter1({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, -1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + FileFilter filter2({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, 0, 0, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter2, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 1); + + FileFilter filter3({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, 1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0000.txt", "0000.docx"}, {}, -1, time, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); +} +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0000 + * @tc.name: external_file_access_ScanFile_0000 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0000, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0000"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile0(newDirUriTest); + ScanFileFilter0(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0000 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0000"; +} + +void InitScanFile1(Uri newDirUriTest) +{ + Uri forlderUriTest(""); + int result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0001.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0001_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ScanFileFilter1(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter; + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0001 + * @tc.name: external_file_access_ScanFile_0001 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0001, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0001"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile1(newDirUriTest); + ScanFileFilter1(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0001 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0001"; +} + +void InitScanFile2(Uri newDirUriTest) +{ + Uri forlderUriTest(""); + int result = g_fah->Mkdir(newDirUriTest, "test", forlderUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri1(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0002.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + Uri testUri3(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(forlderUriTest, "external_file_access_ScanFile_01_0002_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ScanFileFilter2(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 3; + int64_t maxCount = 3; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0002 + * @tc.name: external_file_access_ScanFile_0002 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0002, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0002"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile2(newDirUriTest); + ScanFileFilter2(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0002 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0002"; +} + +void InitScanFile3(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0003.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0003.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0003.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0003.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0003_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "test", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ScanFile_01_0003_02.docx", testUri6); +} + +void ScanFileFilter3(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({}, {}, {}, -1, 0, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); +} + + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0003 + * @tc.name: external_file_access_ScanFile_0003 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0003, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin external_file_access_ScanFile_0003"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile3(newDirUriTest); + ScanFileFilter3(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "external_file_access_ScanFile_0003 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end external_file_access_ScanFile_0003"; +} + +void InitScanFile4(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0004.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_0004.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0004.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0004.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "external_file_access_ScanFile_01_0004_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri folderUri(""); + result = g_fah->Mkdir(newDirUriTest, "test", folderUri); + Uri testUri6(""); + result = g_fah->CreateFile(folderUri, "external_file_access_ScanFile_01_0004_02.docx", testUri6); +} + +void ScanFileFilter4(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter; + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_6); +} + +/** + * @tc.number: user_file_service_external_file_access_ScanFile_0004 + * @tc.name: external_file_access_ScanFile_0004 + * @tc.desc: Test function of ScanFile interface for SUCCESS. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000H0387 + */ +HWTEST_F(FileExtensionHelperTest, external_file_access_ScanFile_0004, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileExtensionHelperTest-begin user_file_service_external_file_access_ScanFile_0004"; + try { + vector info; + int result = g_fah->GetRoots(info); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + for (size_t i = 0; i < info.size(); i++) { + Uri parentUri(info[i].uri); + Uri newDirUriTest(""); + result = g_fah->Mkdir(parentUri, "test", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitScanFile4(newDirUriTest); + ScanFileFilter4(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + } + } catch (...) { + GTEST_LOG_(ERROR) << "user_file_service_external_file_access_ScanFile_0004 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileExtensionHelperTest-end user_file_service_external_file_access_ScanFile_0004"; +} + /** * @tc.number: user_file_service_external_file_access_GetRoots_0000 * @tc.name: external_file_access_GetRoots_0000 diff --git a/test/unittest/medialibrary_file_access_test.cpp b/test/unittest/medialibrary_file_access_test.cpp index a6b2a61bb07d923466197abed14b40320ff34154..81957d8940bd64e1c664d02e1f0d7ddba7fa6d04 100644 --- a/test/unittest/medialibrary_file_access_test.cpp +++ b/test/unittest/medialibrary_file_access_test.cpp @@ -43,7 +43,10 @@ shared_ptr g_fah = nullptr; Uri g_newDirUri(""); const int UID_TRANSFORM_TMP = 20000000; const int UID_DEFAULT = 0; - +const int FILE_COUNT_1 = 1; +const int FILE_COUNT_2 = 2; +const int FILE_COUNT_4 = 4; +const int FILE_COUNT_5 = 5; void SetNativeToken() { uint64_t tokenId; @@ -2086,7 +2089,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0001, testing:: int64_t offset = 0; int64_t maxCount = 1000; vector fileInfoVec; - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), OHOS::FileAccessFwk::ERR_OK); @@ -2122,7 +2125,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0002, testing:: int64_t offset = 0; int64_t maxCount = 1000; vector fileInfoVec; - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_NE(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), OHOS::FileAccessFwk::ERR_OK); @@ -2192,7 +2195,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0004, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".txt"}, {}, {}, 0, 0, false, true); + FileFilter filter({".txt"}, {}, {}, -1, 1, false, true); result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); @@ -2247,7 +2250,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0005, testing:: int64_t maxCount = 1000; std::vector fileInfoVec; g_num = 0; - FileFilter filter({".txt"}, {}, {}, 0, 0, false, true); + FileFilter filter({".txt"}, {}, {}, -1, -1, false, true); for (int j = 0; j < INIT_THREADS_NUMBER; j++) { std::thread execthread(ListFileTdd, g_fah, fileInfo, offset, maxCount, filter, fileInfoVec); execthread.join(); @@ -2261,6 +2264,130 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0005, testing:: GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0005"; } +double GetTime() +{ + struct timespec t{}; + t.tv_sec = 0; + t.tv_nsec = 0; + clock_gettime(CLOCK_REALTIME, &t); + return static_cast(t.tv_sec); +} + +void InitListFile6(Uri newDirUriTest) +{ + Uri testUri1(""); + int result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.txt", testUri1); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri2(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_0006.docx", testUri2); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri3(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.txt", testUri3); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri4(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006.docx", testUri4); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + Uri testUri5(""); + result = g_fah->CreateFile(newDirUriTest, "medialibrary_file_access_ListFile_01_0006_01.docx", testUri5); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); +} + +void ListFileFilter6(Uri newDirUriTest) +{ + FileInfo fileInfo; + fileInfo.uri = newDirUriTest.ToString(); + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt", ".docx"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_5); + + FileFilter filter1({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + FileFilter filter3({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, 1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter3, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_4); + + double time = GetTime(); + FileFilter filter4({".txt", ".docx"}, {"0006.txt", "0006.docx"}, {}, -1, time, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter4, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), 0); +} +/** + * @tc.number: user_file_service_medialibrary_file_access_ListFile_0006 + * @tc.name: medialibrary_file_access_ListFile_0006 + * @tc.desc: Test function of ListFile interface for ERROR which add filter. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000HB855 + */ +HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0006, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileAccessHelperTest-begin medialibrary_file_access_ListFile_0006"; + try { + Uri newDirUriTest(""); + int result = g_fah->Mkdir(g_newDirUri, "ListFile0006", newDirUriTest); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + + InitListFile6(newDirUriTest); + ListFileFilter6(newDirUriTest); + + result = g_fah->Delete(newDirUriTest); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "medialibrary_file_access_ListFile_0006 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0006"; +} + +/** + * @tc.number: user_file_service_medialibrary_file_access_ListFile_0007 + * @tc.name: medialibrary_file_access_ListFile_0007 + * @tc.desc: Test function of ListFile interface for ERROR which add filter. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000HB855 + */ +HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ListFile_0007, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileAccessHelperTest-begin medialibrary_file_access_ListFile_0007"; + try { + FileAccessFwk::FileInfo fileInfo; + std::string relativePath = "Documents/ListTest"; + int ret = g_fah->GetFileInfoFromRelativePath(relativePath, fileInfo); + EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK); + Uri testUri(fileInfo.uri); + + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt"}, {}, {}, -1, -1, false, true); + int result = g_fah->ListFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); + + FileFilter filter1({".txt"}, {}, {}, 0, -1, false, true); + result = g_fah->ListFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_1); + + result = g_fah->Delete(testUri); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "medialibrary_file_access_ListFile_0007 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ListFile_0007"; +} + /** * @tc.number: user_file_service_medialibrary_file_access_ScanFile_0000 * @tc.name: medialibrary_file_access_ScanFile_0000 @@ -2287,7 +2414,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0000, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_GE(fileInfoVec.size(), 1); @@ -2326,7 +2453,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0001, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({}, {}, {}, 0, 0, false, false); + FileFilter filter({}, {}, {}, -1, -1, false, false); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_GE(fileInfoVec.size(), 2); @@ -2367,11 +2494,11 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0002, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); - FileFilter filter1({".q1w2e3r4", ".txt"}, {}, {}, 0, 0, false, true); + FileFilter filter1({".q1w2e3r4", ".txt"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 2); @@ -2408,7 +2535,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0003, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); EXPECT_EQ(fileInfoVec.size(), 1); @@ -2462,7 +2589,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0004, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); g_num = 0; for (int j = 0; j < INIT_THREADS_NUMBER; j++) { std::thread execthread(ScanFileTdd, fileInfo, offset, maxCount, filter, fileInfoVec); @@ -2542,7 +2669,7 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0005, testing:: int64_t offset = 0; int64_t maxCount = 1000; std::vector fileInfoVec; - FileFilter filter({".q1w2e3r4"}, {}, {}, 0, 0, false, true); + FileFilter filter({".q1w2e3r4"}, {}, {}, -1, -1, false, true); result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); EXPECT_EQ(result, OHOS::FileAccessFwk::E_IPCS); EXPECT_EQ(fileInfoVec.size(), 0); @@ -2555,6 +2682,47 @@ HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0005, testing:: GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ScanFile_0005"; } +/** + * @tc.number: user_file_service_medialibrary_file_access_ScanFile_0006 + * @tc.name: medialibrary_file_access_ScanFile_0006 + * @tc.desc: Test function of ListFile interface for ERROR which add filter. + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: SR000HB855 + */ +HWTEST_F(FileAccessHelperTest, medialibrary_file_access_ScanFile_0006, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FileAccessHelperTest-begin medialibrary_file_access_ScanFile_0006"; + try { + FileAccessFwk::FileInfo fileInfo; + std::string relativePath = "Documents/ScanTest"; + int ret = g_fah->GetFileInfoFromRelativePath(relativePath, fileInfo); + EXPECT_EQ(ret, OHOS::FileAccessFwk::ERR_OK); + Uri testUri(fileInfo.uri); + + int64_t offset = 0; + int64_t maxCount = 1000; + std::vector fileInfoVec; + FileFilter filter({".txt"}, {}, {}, -1, -1, false, true); + int result = g_fah->ScanFile(fileInfo, offset, maxCount, filter, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_2); + + FileFilter filter1({".txt"}, {}, {}, 0, -1, false, true); + result = g_fah->ScanFile(fileInfo, offset, maxCount, filter1, fileInfoVec); + EXPECT_EQ(result, OHOS::FileAccessFwk::ERR_OK); + EXPECT_EQ(fileInfoVec.size(), FILE_COUNT_1); + + result = g_fah->Delete(testUri); + EXPECT_GE(result, OHOS::FileAccessFwk::ERR_OK); + } catch (...) { + GTEST_LOG_(ERROR) << "medialibrary_file_access_ScanFile_0006 occurs an exception."; + } + GTEST_LOG_(INFO) << "FileAccessHelperTest-end medialibrary_file_access_ScanFile_0006"; +} + + /** * @tc.number: user_file_service_medialibrary_file_access_GetRoots_0000 * @tc.name: medialibrary_file_access_GetRoots_0000 diff --git a/test/unittest/resources/listscan_testfile/ListScanFilter_001.txt b/test/unittest/resources/listscan_testfile/ListScanFilter_001.txt new file mode 100644 index 0000000000000000000000000000000000000000..30af0fa0bf994164b7e65390237af0253d0793bf --- /dev/null +++ b/test/unittest/resources/listscan_testfile/ListScanFilter_001.txt @@ -0,0 +1 @@ +ListFile and ScanFile \ No newline at end of file diff --git a/test/unittest/resources/listscan_testfile/ListScanFilter_002.txt b/test/unittest/resources/listscan_testfile/ListScanFilter_002.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/test/unittest/resources/ohos_test.xml b/test/unittest/resources/ohos_test.xml index d94c4f2eefa1ff1436076f935ae031b38212e483..b85ed710e7a4d4ae06556ae1605d6aefbd3fe421 100644 --- a/test/unittest/resources/ohos_test.xml +++ b/test/unittest/resources/ohos_test.xml @@ -25,11 +25,18 @@