diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/include/doc_errno.h b/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/include/doc_errno.h index 274bc84148347b069bcf4b0ff3e0552420db7715..75f636b55da36eeec89ec0476e85807df1c99e9f 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/include/doc_errno.h +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/include/doc_errno.h @@ -40,6 +40,7 @@ constexpr int E_RESOURCE_BUSY = E_BASE + 50; constexpr int E_FAILED_MEMORY_ALLOCATE = E_BASE + 51; constexpr int E_INNER_ERROR = E_BASE + 52; constexpr int E_INVALID_FILE_FORMAT = E_BASE + 53; +constexpr int E_FAILED_FILE_OPERATION = E_BASE + 54; int TransferDocErr(int err); } // namespace DocumentDB diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/src/doc_errno.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/src/doc_errno.cpp index 3c8887e957e606842de03c51a4ee26afbaaedc06..bf9dca10b3fba2ae988d605ec65d609531dd49e9 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/src/doc_errno.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/src/doc_errno.cpp @@ -21,8 +21,8 @@ namespace DocumentDB { int GetErrorCategory(int errCode) { int categoryCode = errCode % 1000000; // 1000000: mod to get last 6 digits - categoryCode /= 1000; // 1000: deviced to remove first 3 digits - categoryCode *= 1000; // 1000: multiply to pad the output + categoryCode /= 1000; // 1000: deviced to remove first 3 digits + categoryCode *= 1000; // 1000: multiply to pad the output return categoryCode; } @@ -63,6 +63,8 @@ int TransferDocErr(int err) return GetErrorCategory(GRD_FAILED_MEMORY_ALLOCATE); case -E_INVALID_FILE_FORMAT: return GetErrorCategory(GRD_INVALID_FILE_FORMAT); + case -E_FAILED_FILE_OPERATION: + return GetErrorCategory(GRD_FAILED_FILE_OPERATION); case -E_INNER_ERROR: default: return GetErrorCategory(GRD_INNER_ERR); diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/src/document_store_manager.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/src/document_store_manager.cpp index 138c86ab99caf2062b166fd4350508b56684b05e..c9a91cecc6c7fa65490020aa2c9ab94bfafc29ae 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/src/document_store_manager.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/src/interface/src/document_store_manager.cpp @@ -133,7 +133,7 @@ int DocumentStoreManager::CheckDBPath(const std::string &path, std::string &cano if (path.back() == '/') { GLOGE("Invalid path end with slash"); - return -E_INVALID_ARGS; + return -E_FAILED_FILE_OPERATION; } std::string dirPath; diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/src/oh_adapter/src/sqlite_utils.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/src/oh_adapter/src/sqlite_utils.cpp index de37d418eafebb1e530ce2cd9f2465f45d3b7f5c..5281df56adb54d18e83329d890a5747d801239e3 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/src/oh_adapter/src/sqlite_utils.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/src/oh_adapter/src/sqlite_utils.cpp @@ -36,6 +36,7 @@ int MapSqliteError(int errCode) return E_OK; case SQLITE_PERM: case SQLITE_CANTOPEN: + return -E_INVALID_ARGS; case SQLITE_READONLY: return -E_FILE_OPERATION; case SQLITE_NOTADB: diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_api_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_api_test.cpp index d4518ff6eb2bd2b33ffe1a405bf5fb48e087de69..c127bfed9a0fd896338aa4a844f88a1734489d68 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_api_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_api_test.cpp @@ -156,7 +156,7 @@ HWTEST_F(DocumentDBApiTest, OpenDBTest004, TestSize.Level0) HWTEST_F(DocumentDBApiTest, OpenDBPathTest001, TestSize.Level0) { GRD_DB *db = nullptr; - std::vector invalidPath = { nullptr, "", "/a/b/c/" }; + std::vector invalidPath = { nullptr, ""}; for (auto path : invalidPath) { GLOGD("OpenDBPathTest001: open db with path: %s", path); int status = GRD_DBOpen(path, nullptr, GRD_DB_OPEN_CREATE, &db); @@ -179,6 +179,36 @@ HWTEST_F(DocumentDBApiTest, OpenDBPathTest002, TestSize.Level0) EXPECT_EQ(status, GRD_FAILED_FILE_OPERATION); } +/** + * @tc.name: OpenDBPathTest003 + * @tc.desc: call GRD_DBOpen, input dbFile end with '\' + * @tc.type: FUNC + * @tc.require: + * @tc.author: mazhao + */ +HWTEST_F(DocumentDBApiTest, OpenDBPathTest003, TestSize.Level0) +{ + GRD_DB *db = nullptr; + std::string pathNoPerm = "/root/document.db/"; + int status = GRD_DBOpen(pathNoPerm.c_str(), nullptr, GRD_DB_OPEN_CREATE, &db); + EXPECT_EQ(status, GRD_FAILED_FILE_OPERATION); +} + +/** + * @tc.name: OpenDBPathTest004 + * @tc.desc: call GRD_DBOpen, input dbFile as existed menu + * @tc.type: FUNC + * @tc.require: + * @tc.author: mazhao + */ +HWTEST_F(DocumentDBApiTest, OpenDBPathTest004, TestSize.Level0) +{ + GRD_DB *db = nullptr; + std::string pathNoPerm = "../build"; + int status = GRD_DBOpen(pathNoPerm.c_str(), nullptr, GRD_DB_OPEN_CREATE, &db); + EXPECT_EQ(status, GRD_INVALID_ARGS); +} + /** * @tc.name: OpenDBConfigTest001 * @tc.desc: Test open document db with invalid config option