diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_delete_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_delete_test.cpp index 4debaabfeaa3b44580b38ae5ed666ff3c0b41dcc..b1ba79740b6ddd1d13b99730b0454ee60253feff 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_delete_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_delete_test.cpp @@ -29,8 +29,8 @@ using namespace DocumentDBUnitTest; namespace { constexpr const char *COLLECTION_NAME = "student"; constexpr const char *NULL_JSON_STR = "{}"; -constexpr int MAX_COLLECTION_LENS = 511; -std::string path = "./document.db"; +const int MAX_COLLECTION_LENS = 511; +std::string g_path = "./document.db"; GRD_DB *g_db = nullptr; class DocumentDBDeleteTest : public testing::Test { @@ -138,14 +138,21 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest001, TestSize.Level1) { /** * @tc.steps:step1. Delete all the document - * @tc.expected: step1. GRD_INVALID_ARGS + * @tc.expected: step1. 1, means 1 document has been deleted. */ EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, NULL_JSON_STR, 0), 1); + EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, NULL_JSON_STR, 0), 1); + EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, NULL_JSON_STR, 0), 1); + /** + * @tc.steps:step2. Check whether doc has been deleted compeletely + * @tc.expected: step2. GRD_OK + */ + ChkDeleteResWithFilter(NULL_JSON_STR); } /** * @tc.name: DocumentDelete002 - * @tc.desc: Delete with filter which has no _id + * @tc.desc: Delete document for person whose name is David * @tc.type: FUNC * @tc.require: * @tc.author: mazhao @@ -153,16 +160,22 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest001, TestSize.Level1) HWTEST_F(DocumentDBDeleteTest, DeleteDBTest002, TestSize.Level1) { /** - * @tc.steps:step1. Delete with filter which has no _id - * @tc.expected: step1. GRD_INVALID_ARGS + * @tc.steps:step1. Test delete with normal filter + * Delete document for person whose name is David + * @tc.expected: step1. 1, means 1 document has been deleted. */ - const char *filter = "{\"age\" : 15}"; + const char *filter = "{\"name\" : \"David\"}"; EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter, 0), 1); + /** + * @tc.steps:step2. Check whether doc has been deleted compeletely. + * @tc.expected: step2. GRD_OK + */ + ChkDeleteResWithFilter(filter); } /** * @tc.name: DocumentDelete003 - * @tc.desc: Delete with filter which has more than one fields. + * @tc.desc: Test delete with nest-json-filter * @tc.type: FUNC * @tc.require: * @tc.author: mazhao @@ -170,11 +183,17 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest002, TestSize.Level1) HWTEST_F(DocumentDBDeleteTest, DeleteDBTest003, TestSize.Level1) { /** - * @tc.steps:step1. Delete with filter which has more than one fields. - * @tc.expected: step1. GRD_INVALID_ARGS + * @tc.steps:step1. Test delete with nest-json-filter + * Delete document for person whose friend is David. + * @tc.expected: step1. GRD_OK. */ - const char *filter = "{\"_id\" : \"1\", \"age\" : 15}"; - EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter, 0), 1); + const char *filter = "{\"friend\" : {\"name\": \"David\"}}"; + EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter, 0), GRD_OK); + /** + * @tc.steps:step2. Check whether doc has been deleted compeletely. + * @tc.expected: step2. GRD_OK + */ + ChkDeleteResWithFilter(filter); } /** @@ -190,20 +209,29 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest004, TestSize.Level1) * @tc.steps:step1. Test delete with un-zero flags * @tc.expected: step1. GRD_INVALID_ARGS */ - const char *filter1 = "{\"_id\" : \"1\"}"; - EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter1, 1), GRD_INVALID_ARGS); + EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, NULL_JSON_STR, 1), GRD_INVALID_ARGS); /** * @tc.steps:step2. Test delete with NULL collection name * @tc.expected: step2. GRD_INVALID_ARGS */ - const char *filter2 = "{\"_id\" : \"1\"}"; - EXPECT_EQ(GRD_DeleteDoc(g_db, NULL, filter2, 0), GRD_INVALID_ARGS); + EXPECT_EQ(GRD_DeleteDoc(g_db, NULL, NULL_JSON_STR, 0), GRD_INVALID_ARGS); /** * @tc.steps:step3. Test delete with empty collection name * @tc.expected: step3. GRD_INVALID_ARGS */ - const char *filter3 = "{\"_id\" : \"1\"}"; - EXPECT_EQ(GRD_DeleteDoc(g_db, "", filter3, 1), GRD_INVALID_ARGS); + EXPECT_EQ(GRD_DeleteDoc(g_db, "", NULL_JSON_STR, 0), GRD_INVALID_ARGS); + /** + * @tc.steps:step4. Test with filter whose json value is over the limit of double. + * @tc.expected: step4. GRD_INVALID_ARGS + */ + const char *filter1 = "{\"age\" : 1.79769313486232e308}"; + EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter1, 0), GRD_INVALID_ARGS); + /** + * @tc.steps:step5. Test with normal filter + * @tc.expected: step5. 1, meas 1 document has been deleted + */ + const char *filter2 = "{\"age\" : 15}"; + EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter2, 0), 1); } /** @@ -219,10 +247,10 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest005, TestSize.Level1) /** * @tc.step1: Test delete with same collection name * but one is uppercase(delete) and the other is lowercase(insert) - * @tc.expected: step1. GRD_INVALID_ARGS + * @tc.expected: step1. GRD_OK */ - const char *filter = "{\"_id\" : \"1\"}"; - EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter, 0), 1); + const char *filter = "{\"friend\" : {\"name\" : \"David\"}}"; + EXPECT_EQ(GRD_DeleteDoc(g_db, "STUDENT", filter, 0), GRD_OK); /** * @tc.step2: Check whether doc has been deleted compeletely * @tc.expected: step2. GRD_OK @@ -241,13 +269,15 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest006, TestSize.Level1) { /** * @tc.step1: Create filter with _id and get the record according to filter condition. - * @tc.expected: step1. GRD_OK + * @tc.expected: step1. succeed to get the record, the matching record is g_document6. */ - const char *filter = "{\"_id\" : \"1\"}"; + const char *collectionName = "stuDENT"; + const char *filter = "{\"name\" : \"xiaoming\"}"; GRD_ResultSet *resultSet = nullptr; Query query = { filter, "{}" }; - EXPECT_EQ(GRD_FindDoc(g_db, COLLECTION_NAME, query, 0, &resultSet), GRD_OK); - EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter, 0), 1); + EXPECT_EQ(GRD_FindDoc(g_db, collectionName, query, 0, &resultSet), GRD_OK); + int expectedCount = 1; // return 1 count + EXPECT_EQ(GRD_DeleteDoc(g_db, collectionName, filter, 0), expectedCount); /** * @tc.step2: Invoke GRD_Next to get the next matching value. Release resultSet. * @tc.expected: step2. Cannot get next record, return GRD_NO_DATA. @@ -265,7 +295,7 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest006, TestSize.Level1) */ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest007, TestSize.Level1) { - const char *filter = "{\"_id\" : \"1\"}"; + const char *filter = "{\"name\":\"doc1\"}"; string collectionName1(MAX_COLLECTION_LENS, 'a'); EXPECT_EQ(GRD_CreateCollection(g_db, collectionName1.c_str(), "", 0), GRD_OK); EXPECT_EQ(GRD_DeleteDoc(g_db, collectionName1.c_str(), filter, 0), 0); @@ -273,6 +303,7 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest007, TestSize.Level1) string collectionName2(MAX_COLLECTION_LENS + 1, 'a'); EXPECT_EQ(GRD_DeleteDoc(g_db, collectionName2.c_str(), filter, 0), GRD_OVER_LIMIT); + EXPECT_EQ(GRD_DeleteDoc(g_db, "", filter, 0), GRD_INVALID_ARGS); } /** @@ -288,7 +319,7 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest008, TestSize.Level1) * @tc.steps:step1. Delete with filter which has more than one fields. * @tc.expected: step1. GRD_INVALID_ARGS */ - const char *filter = "{\"_id\" : \"1\"}"; + const char *filter = "{\"name\" : \"doc1\"}"; EXPECT_EQ(GRD_DeleteDoc(NULL, COLLECTION_NAME, filter, 0), GRD_INVALID_ARGS); EXPECT_EQ(GRD_DeleteDoc(g_db, NULL, filter, 0), GRD_INVALID_ARGS); EXPECT_EQ(GRD_DeleteDoc(g_db, "", filter, 0), GRD_INVALID_ARGS); @@ -321,7 +352,7 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest010, TestSize.Level1) /** * @tc.name: DocumentDelete011 - * @tc.desc: + * @tc.desc: Test delete when filter id string len is larger than max. * @tc.type: FUNC * @tc.require: * @tc.author: mazhao @@ -329,21 +360,19 @@ HWTEST_F(DocumentDBDeleteTest, DeleteDBTest010, TestSize.Level1) HWTEST_F(DocumentDBDeleteTest, DeleteDBTest011, TestSize.Level1) { /** - * @tc.step1: Create filter with _id and get the record according to filter condition. - * @tc.expected: step1. GRD_OK - */ - const char *filter = "{\"_id\" : \"1\"}"; - const char *filter2 = "{\"subject.info\" : \"exam\"}"; - GRD_ResultSet *resultSet = nullptr; - Query query = { filter, "{}" }; - EXPECT_EQ(GRD_FindDoc(g_db, COLLECTION_NAME, query, 0, &resultSet), GRD_OK); - EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter2, 0), 1); + * @tc.step1: delete document whose id string len is 899 + * @tc.expected: step1. GRD_OK + */ + std::string head = "{\"_id\":\""; + std::string end = "\", \"name\": \"mike\"}"; + std::string filter = head + std::string(900 - 1, 'k') + end; + EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter.c_str(), 0), 0); /** - * @tc.step2: Invoke GRD_Next to get the next matching value. Release resultSet. - * @tc.expected: step2. Cannot get next record, return GRD_NO_DATA. - */ - EXPECT_EQ(GRD_Next(resultSet), GRD_NO_DATA); - EXPECT_EQ(GRD_FreeResultSet(resultSet), GRD_OK); + * @tc.steps: step2. delete document whose id string len is 900. + * @tc.expected: step2. GRD_OVER_LIMIT. + */ + std::string filter1 = head + std::string(900, 'k') + end; + EXPECT_EQ(GRD_DeleteDoc(g_db, COLLECTION_NAME, filter1.c_str(), 0), GRD_OVER_LIMIT); } /**