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 81d9ff2569ff4c9cf8af98d260783e82fc5f78ba..22fe15ee3f23535c491903a80feb6f1f0f54d0c4 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 @@ -65,7 +65,7 @@ HWTEST_F(DocumentDBApiTest, OpenDBTest001, TestSize.Level0) EXPECT_EQ(GRD_CreateCollection(db, "student", "", 0), GRD_OK); - EXPECT_EQ(GRD_UpsertDoc(db, "student", R""({"_id":"10001"})"", R""({"name":"Tom","age":23})"", 0), 1); + EXPECT_EQ(GRD_UpsertDoc(db, "student", R""({"_id":"10001"})"", R""({"name":"Tom", "age":23})"", 0), 1); EXPECT_EQ(GRD_DropCollection(db, "student", 0), GRD_OK); @@ -190,7 +190,7 @@ HWTEST_F(DocumentDBApiTest, OpenDBConfigTest001, TestSize.Level0) { GRD_DB *db = nullptr; std::string path = "./document.db"; - constexpr int MAX_JSON_LEN = 512 * 1024; + const int MAX_JSON_LEN = 512 * 1024; std::string configStr = std::string(MAX_JSON_LEN, 'a'); int status = GRD_DBOpen(path.c_str(), configStr.c_str(), GRD_DB_OPEN_CREATE, &db); EXPECT_EQ(status, GRD_OVER_LIMIT); @@ -245,7 +245,7 @@ HWTEST_F(DocumentDBApiTest, OpenDBConfigMaxConnNumTest001, TestSize.Level0) R""({"maxConnNum":1000000007})"", R""({"maxConnNum":"16"})"", R""({"maxConnNum":{"value":17}})"", - R""({"maxConnNum":[16,17,18]})"", + R""({"maxConnNum":[16, 17, 18]})"", }; for (const auto &config : configList) { GLOGD("OpenDBConfigMaxConnNumTest001: test with config:%s", config.c_str()); @@ -363,7 +363,7 @@ HWTEST_F(DocumentDBApiTest, OpenDBConfigPageSizeTest001, TestSize.Level0) R""({"pageSize":1000000007})"", R""({"pageSize":"4"})"", R""({"pageSize":{"value":8}})"", - R""({"pageSize":[16,32,64]})"", + R""({"pageSize":[16, 32, 64]})"", }; for (const auto &config : configList) { GLOGD("OpenDBConfigPageSizeTest001: test with config:%s", config.c_str()); @@ -500,11 +500,11 @@ HWTEST_F(DocumentDBApiTest, OpenDBConfigBufferPoolTest001, TestSize.Level0) GRD_DB *db = nullptr; std::string path = "./document.db"; - int status = GRD_DBOpen(path.c_str(), R""({"pageSize":64,"bufferPoolSize":4096})"", GRD_DB_OPEN_CREATE, &db); + int status = GRD_DBOpen(path.c_str(), R""({"pageSize":64, "bufferPoolSize":4096})"", GRD_DB_OPEN_CREATE, &db); EXPECT_EQ(status, GRD_OK); EXPECT_EQ(GRD_DBClose(db, 0), GRD_OK); - status = GRD_DBOpen(path.c_str(), R""({"pageSize":64,"bufferPoolSize":4095})"", GRD_DB_OPEN_CREATE, &db); + status = GRD_DBOpen(path.c_str(), R""({"pageSize":64, "bufferPoolSize":4095})"", GRD_DB_OPEN_CREATE, &db); EXPECT_EQ(status, GRD_INVALID_ARGS); status = GRD_DBOpen(path.c_str(), R""({"bufferPoolSize":1023})"", GRD_DB_OPEN_CREATE, &db); @@ -526,11 +526,11 @@ HWTEST_F(DocumentDBApiTest, OpenDBConfigPubBuffTest001, TestSize.Level0) GRD_DB *db = nullptr; std::string path = "./document.db"; - int status = GRD_DBOpen(path.c_str(), R""({"pageSize":64,"redopubbufsize":4033})"", GRD_DB_OPEN_CREATE, &db); + int status = GRD_DBOpen(path.c_str(), R""({"pageSize":64, "redopubbufsize":4033})"", GRD_DB_OPEN_CREATE, &db); EXPECT_EQ(status, GRD_OK); EXPECT_EQ(GRD_DBClose(db, 0), GRD_OK); - status = GRD_DBOpen(path.c_str(), R""({"pageSize":64,"redopubbufsize":4032})"", GRD_DB_OPEN_CREATE, &db); + status = GRD_DBOpen(path.c_str(), R""({"pageSize":64, "redopubbufsize":4032})"", GRD_DB_OPEN_CREATE, &db); EXPECT_EQ(status, GRD_INVALID_ARGS); status = GRD_DBOpen(path.c_str(), R""({"redopubbufsize":255})"", GRD_DB_OPEN_CREATE, &db); diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_collection_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_collection_test.cpp index 92aedcd5d871f89d2a1bf0154a0c95ba5c118a21..04431be400ba2e7d2c2ad9a79cc68edcf37f4695 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_collection_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_collection_test.cpp @@ -157,7 +157,7 @@ HWTEST_F(DocumentDBCollectionTest, CollectionTest005, TestSize.Level0) R""({"maxDoc":0})"", R""({"maxDoc":"123"})"", R""({"maxDoc":{"value":1024}})"", - R""({"maxDoc":[1,2,4,8]})"", + R""({"maxDoc":[1, 2, 4, 8]})"", R""({"minDoc":1024})"", }; diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_data_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_data_test.cpp index d43519a713f56cc57a3bd5e70ea7683210e5a642..1ea370b55ac52d7a3030dae6a46ad713cfc50cca 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_data_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_data_test.cpp @@ -149,7 +149,7 @@ HWTEST_F(DocumentDBDataTest, UpsertDataTest006, TestSize.Level0) HWTEST_F(DocumentDBDataTest, UpsertDataTest007, TestSize.Level0) { std::string filter = R""({"_id":"1234"})""; - std::string val = R""({"name":"Tmono","age":18,"addr":{"city":"shanghai","postal":200001}})""; + std::string val = R""({"name":"Tmono", "age":18, "addr":{"city":"shanghai", "postal":200001}})""; EXPECT_EQ(GRD_UpsertDoc(g_db, "collection_not_exists", filter.c_str(), val.c_str(), GRD_DOC_REPLACE), GRD_INVALID_ARGS); } @@ -164,10 +164,10 @@ HWTEST_F(DocumentDBDataTest, UpsertDataTest007, TestSize.Level0) HWTEST_F(DocumentDBDataTest, UpsertDataTest008, TestSize.Level0) { std::string filter = R""({"_id":"1234"})""; - std::string document = R""({"name":"Tmn","age":18,"addr":{"city":"shanghai","postal":200001}})""; + std::string document = R""({"name":"Tmn", "age":18, "addr":{"city":"shanghai", "postal":200001}})""; EXPECT_EQ(GRD_UpsertDoc(g_db, g_coll, filter.c_str(), document.c_str(), GRD_DOC_REPLACE), 1); - std::string updateDoc = R""({"name":"Xue","case":2,"age":28,"addr":{"city":"shenzhen","postal":518000}})""; + std::string updateDoc = R""({"name":"Xue", "case":2, "age":28, "addr":{"city":"shenzhen", "postal":518000}})""; EXPECT_EQ(GRD_UpsertDoc(g_db, g_coll, filter.c_str(), updateDoc.c_str(), GRD_DOC_APPEND), 1); } @@ -272,7 +272,7 @@ HWTEST_F(DocumentDBDataTest, UpdateDataTest005, TestSize.Level0) {} HWTEST_F(DocumentDBDataTest, UpdateDataTest006, TestSize.Level0) { std::string filter = R""({"_id":"1234"})""; - std::string document = R""({"name":"Tmono","age":18,"addr":{"city":"shanghai","postal":200001}})""; + std::string document = R""({"name":"Tmono", "age":18, "addr":{"city":"shanghai", "postal":200001}})""; std::vector invalidFlags = { 2, 4, 8, 1024, UINT32_MAX }; for (auto flag : invalidFlags) { GLOGD("UpdateDataTest006: update data with flag: %u", flag); @@ -293,7 +293,7 @@ HWTEST_F(DocumentDBDataTest, UpdateDataTest007, TestSize.Level0) HWTEST_F(DocumentDBDataTest, UpdateDataTest008, TestSize.Level0) { const char *updateStr = - R""({"field2":{"c_field":{"cc_field":{"ccc_field":{"ccc_field":[1,false,1.234e2,["hello world!"]]}}}}})""; + R""({"field2":{"c_field":{"cc_field":{"ccc_field":{"ccc_field":[1, false, 1.234e2, ["hello world!"]]}}}}})""; int result = GRD_UpdateDoc(g_db, g_coll, "{\"field\" : 2}", updateStr, 0); int result2 = GRD_UpsertDoc(g_db, g_coll, "{\"field\" : 2}", updateStr, 0); EXPECT_EQ(result, GRD_INVALID_ARGS); @@ -318,7 +318,8 @@ HWTEST_F(DocumentDBDataTest, UpdateDataTest009, TestSize.Level0) char *value = nullptr; EXPECT_EQ(GRD_GetValue(resultSet, &value), GRD_OK); string valueStr = value; - string repectStr = R""({"_id":"1234","field1":1,"field2":2,"FIELD1":[1,true,1.23456789,"hello world!",null]})""; + string repectStr = R""({"_id":"1234", "field1":1, "field2":2, + "FIELD1":[1, true, 1.23456789, "hello world!", null]})""; EXPECT_EQ((valueStr == repectStr), 1); EXPECT_EQ(GRD_FreeValue(value), GRD_OK); EXPECT_EQ(GRD_FreeResultSet(resultSet), GRD_OK); 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 15e5dce407efa3e5d13cc30a152822e6dd8201b3..8165c73b2d17300929e07ee105f245950929671d 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,7 +29,7 @@ using namespace DocumentDBUnitTest; namespace { constexpr const char *COLLECTION_NAME = "student"; constexpr const char *NULL_JSON_STR = "{}"; -constexpr int MAX_COLLECTION_LENS = 511; +const int MAX_COLLECTION_LENS = 511; std::string g_path = "./document.db"; GRD_DB *g_db = nullptr; diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_find_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_find_test.cpp index 38da55bd95e170e81bfbbfe4017bf4dfd926ab2f..50ac7575d2c1825077e018d5e6bec7f7c19679b0 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_find_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_find_test.cpp @@ -49,7 +49,9 @@ static const char *g_document4 = "{\"_id\" : \"4\", \"name\":\"doc4\",\"item\":\ static const char *g_document5 = "{\"_id\" : \"5\", \"name\":\"doc5\",\"item\":\"journal\",\"personInfo\":\ [{\"sex\" : \"woma\", \"school\" : \"B\", \"age\" : 15}, {\"school\":\"C\", \"age\" : 35}]}"; static const char *g_document6 = "{\"_id\" : \"6\", \"name\":\"doc6\",\"item\":false,\"personInfo\":\ - [{\"school\":\"B\", \"teacher\" : \"mike\",\"age\" : 15}, {\"school\":\"C\", \"teacher\" : \"moon\",\"age\":20}]}"; + [{\"school\":\"B\", \"teacher\" : \"mike\", \"age\" : 15},\ + {\"school\":\"C\", \"teacher\" : \"moon\", \"age\" : 20}]}"; + static const char *g_document7 = "{\"_id\" : \"7\", \"name\":\"doc7\",\"item\":\"fruit\",\"other_Info\":\ [{\"school\":\"BX\", \"age\" : 15}, {\"school\":\"C\", \"age\" : 35}]}"; static const char *g_document8 = "{\"_id\" : \"8\", \"name\":\"doc8\",\"item\":true,\"personInfo\":\ @@ -1438,17 +1440,14 @@ HWTEST_F(DocumentDBFindTest, DocumentDBFindTest061, TestSize.Level1) char *value = nullptr; EXPECT_EQ(GRD_GetValue(resultSet, &value), GRD_OK); CompareValue(value, document061); - EXPECT_EQ(GRD_FreeValue(value), GRD_OK); EXPECT_EQ(GRD_Next(resultSet), GRD_OK); EXPECT_EQ(GRD_GetValue(resultSet, &value), GRD_OK); CompareValue(value, document062); - EXPECT_EQ(GRD_FreeValue(value), GRD_OK); EXPECT_EQ(GRD_Next(resultSet), GRD_OK); EXPECT_EQ(GRD_GetValue(resultSet, &value), GRD_OK); CompareValue(value, document063); - EXPECT_EQ(GRD_FreeValue(value), GRD_OK); EXPECT_EQ(GRD_Next(resultSet), GRD_OK); EXPECT_EQ(GRD_GetValue(resultSet, &value), GRD_OK); diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_insert_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_insert_test.cpp index d2739db211f7acc30b7fcd9d8986539ec4ed8eff..34d52866c2861433f80c5e2c7d5e60b9167d5818 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_insert_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/api/documentdb_insert_test.cpp @@ -15,7 +15,9 @@ #include #include +#include +#include "document_key.h" #include "documentdb_test_utils.h" #include "grd_base/grd_db_api.h" #include "grd_base/grd_error.h" @@ -116,23 +118,29 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest002, TestSize.Level1) const char *document2 = "{\"_id\" : true, \"name\" : \"Chuan\"}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document2, 0), GRD_INVALID_ARGS); /** - * @tc.steps:step2.Insert a document whose _id is NULL - * @tc.expected:step2.GRD_INVALID_ARGS + * @tc.steps:step3.Insert a document whose _id is NULL + * @tc.expected:step3.GRD_INVALID_ARGS */ const char *document3 = "{\"_id\" : null, \"name\" : \"Chuan\"}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document3, 0), GRD_INVALID_ARGS); /** - * @tc.steps:step2.Insert a document whose _id is ARRAY - * @tc.expected:step2.GRD_INVALID_ARGS + * @tc.steps:step4.Insert a document whose _id is ARRAY + * @tc.expected:step4.GRD_INVALID_ARGS */ const char *document4 = "{\"_id\" : [\"2\"], \"name\" : \"Chuan\"}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document4, 0), GRD_INVALID_ARGS); /** - * @tc.steps:step2.Insert a document whose _id is OBJECT - * @tc.expected:step2.GRD_INVALID_ARGS + * @tc.steps:step5.Insert a document whose _id is OBJECT + * @tc.expected:step5.GRD_INVALID_ARGS */ const char *document5 = "{\"_id\" : {\"val\" : \"2\"}, \"name\" : \"Chuan\"}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document5, 0), GRD_INVALID_ARGS); + /** + * @tc.steps:step6.Insert a document whose _id is double type + * @tc.expected:step6 .GRD_INVALID_ARGS + */ + const char *document6 = "{\"_id\" : 1.99999, \"name\" : \"Chuan\"}"; + EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document6, 0), GRD_INVALID_ARGS); } /** @@ -323,21 +331,21 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest014, TestSize.Level1) * @tc.expected:step1.GRD_INVALID_ARGS */ const char *document1 = R""({"level1" : {"level2" : {"level3" : {"level4": {"level5" : 1}}, - "level3_2" : "level3_2_val"}},"_id":"14"})""; + "level3_2" : "level3_2_val"}}})""; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document1, 0), GRD_INVALID_ARGS); /** * @tc.steps:step1.document's JSON depth is larger than 4, which is 5.But with array type. * @tc.expected:step1.GRD_INVALID_ARGS */ const char *document2 = R""({"level1" : {"level2" : {"level3" : [{ "level5" : "level5_1val", - "level5_2":"level5_2_val"}, "level4_val1","level4_val2"], "level3_2" : "level3_2_val"}},"_id":"14"})""; + "level5_2":"level5_2_val"}, "level4_val1","level4_val2"], "level3_2" : "level3_2_val"}}})""; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document2, 0), GRD_INVALID_ARGS); /** * @tc.steps:step1.document's JSON depth is 4 * @tc.expected:step1.GRD_OK */ const char *document3 = R""({"level1" : {"level2" : {"level3" : { "level4" : "level5_1val"}, - "level3_2" : "level3_2_val"}},"_id":"14"})""; + "level3_2" : "level3_2_val"}}})""; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document3, 0), GRD_OK); } @@ -354,7 +362,7 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest015, TestSize.Level1) * @tc.steps:step1.document's JSON is bigger than 512k - 1 * @tc.expected:step1.GRD_INVALID_ARGS */ - string documentPart1 = "{ \"_id\" : \"15\", \"textVal\" : \" "; + string documentPart1 = "{\"textVal\" : \" "; string documentPart2 = "\" }"; string jsonVal = string(512 * 1024 - documentPart1.size() - documentPart2.size(), 'k'); string document = documentPart1 + jsonVal + documentPart2; @@ -380,7 +388,7 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest016, TestSize.Level1) * @tc.steps:step1.document JSON string contains irregular char. * @tc.expected:step1.GRD_OK */ - const char *document1 = "{\"_id\" : \"16\", \"name\" : \"!@#Ori\"}"; + const char *document1 = "{\"name\" : \"!@#Ori\"}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document1, 0), GRD_OK); } @@ -397,7 +405,7 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest017, TestSize.Level1) * @tc.steps:step1.document JSON string contains invalid value type such as BLOB type. * @tc.expected:step1.GRD_INVALID_FORMAT. */ - const char *document = "{\"_id\" : \"17\", \"level1\" : {\"level2\" : {\"level3\" : {\"level4\" : x'1234'\ + const char *document = "{\"level1\" : {\"level2\" : {\"level3\" : {\"level4\" : x'1234'\ } } }, \"level1_2\" : \"level1_2Val\"}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document, 0), GRD_INVALID_FORMAT); } @@ -429,14 +437,49 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest018, TestSize.Level1) HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest019, TestSize.Level1) { /** - * @tc.steps:step1.Insert a normal documents which _id is in the end of the string + * @tc.steps:step1.Insert a normal documents. * @tc.expected:step1.GRD_OK. */ - const char *document1 = "{\"name\" : \"Jack\", \"age\" : 18, \"friend\" : {\"name\" : \" lucy\"}, \"_id\" : " - "\"19\"}"; + const char *document1 = "{\"name\" : \"Jack\", \"age\" : 18, \"friend\" : {\"name\" : \" lucy\"}}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document1, 0), GRD_OK); } +/** + * @tc.name: DocumentDBInsertTest020 + * @tc.desc: Insert a normal documents + * @tc.type: FUNC + * @tc.require: + * @tc.author: mazhao + */ +HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest020, TestSize.Level1) +{ + /** + * @tc.steps:step1.parameter document is NULL + * This will Insert a null document with an auto-generated _id field. + * @tc.expected:step1.GRD_INVALID_ARGS + */ + EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, nullptr, 0), GRD_INVALID_ARGS); +} + +/** + * @tc.name: DocumentDBInsertTest021 + * @tc.desc: Insert ten times, with nullptr parameter document + * This will Insert a null document with an auto-generated _id field. + * @tc.type: FUNC + * @tc.require: + * @tc.author: mazhao + */ +HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest021, TestSize.Level1) +{ + /** + * @tc.steps:step1.Insert ten times, with nullptr parameter document + * This will Insert a null document with an auto-generated _id field. + * @tc.expected:step1.GRD_INVALID_ARGS + */ + for (int i = 0; i < 10; i++) { + EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, NULL, 0), GRD_INVALID_ARGS); + } +} /** * @tc.name: DocumentDBInsertTest022 * @tc.desc: parameter collectionName is equal to 256 charactors @@ -563,14 +606,14 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest025, TestSize.Level1) * @tc.steps:step1.documents JSON depth is 4, which is allowed. * @tc.expected:step1.GRD_OK. */ - const char *document1 = "{\"_id\" : \"25_0\", \"level1\" : { \"level2\" : {\"level3\" :\ - {\"level4\" : \"level4Val\" } } } , \"level1_2\" : \"level1_2Val\" }"; + const char *document1 = "{\"level1\" : {\"level2\" : {\"level3\" :\ + {\"level4\" : \"level4Val\"}}} , \"level1_2\" : \"level1_2Val\" }"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document1, 0), GRD_OK); /** * @tc.steps:step2.documents JSON depth is exactly 4. * @tc.expected:step2.GRD_OK. */ - const char *document2 = "{\"_id\" : \"25_1\", \"class_name\" : \"计算机科学一班\", \"signed_info\" : true, \ + const char *document2 = "{\"class_name\" : \"计算机科学一班\", \"signed_info\" : true, \ \"student_info\" : [{\"name\":\"张三\", \"age\" : 18, \"sex\" : \"男\"}, \ { \"newName1\" : [\"qw\", \"dr\", 0, \"ab\"] }]}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document2, 0), GRD_OK); @@ -578,7 +621,7 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest025, TestSize.Level1) * @tc.steps:step3.documents JSON depth is exactly 4, but the last field in array contains leading number * @tc.expected:step3.GRD_INVALID_ARGS. */ - const char *document3 = "{\"_id\" : \"25_2\", \"class_name\" : \"计算机科学一班\", \"signed_info\" : true, \ + const char *document3 = "{\"class_name\" : \"计算机科学一班\", \"signed_info\" : true, \ \"student_info\" : [{\"name\":\"张三\", \"age\" : 18, \"sex\" : \"男\"}, \ [\"qw\", \"dr\", 0, \"ab\", {\"0ab\" : null}]]}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document3, 0), GRD_INVALID_ARGS); @@ -586,7 +629,7 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest025, TestSize.Level1) * @tc.steps:step4.documents JSON depth is exactly 5. * @tc.expected:step4.GRD_INVALID_ARGS. */ - const char *document4 = "{\"_id\" : \"25_3\", \"class_name\" : \"计算机科学一班\", \"signed_info\" : true, \ + const char *document4 = "{\"class_name\" : \"计算机科学一班\", \"signed_info\" : true, \ \"student_info\" : [{\"name\":\"张三\", \"age\" : 18, \"sex\" : \"男\"}, \ { \"newName1\" : [\"qw\", \"dr\", 0, \"ab\", {\"level5\" : 1}] }]}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document4, 0), GRD_INVALID_ARGS); @@ -605,13 +648,8 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest, TestSize.Level1) * @tc.steps:step1.Insert 100 normal documents continuously * @tc.expected:step1.GRD_OK. */ - string document1 = "{\"_id\" : "; - string document2 = "\""; - string document4 = "\""; - string document5 = ", \"name\" : \"Ori\"}"; + string document = "{\"name\" : \"Ori\"}"; for (int i = 0; i < 5; i++) { - string document_midlle = "26" + std::to_string(i); - string document = document1 + document2 + document_midlle + document4 + document5; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document.c_str(), 0), GRD_OK); } } @@ -631,7 +669,7 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest035, TestSize.Level1) * upper &lower case charactors, numbers and underline. * @tc.expected:step1.GRD_OK. */ - const char *document1 = "{\"_id\" : \"35\", \"A_aBdk_324_\" : \"value\", \"name\" : \"Chuan\"}"; + const char *document1 = "{\"A_aBdk_324_\" : \"value\", \"name\" : \"Chuan\"}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document1, 0), GRD_OK); /** * @tc.steps:step1.Insert a document whose value contains @@ -639,7 +677,7 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest035, TestSize.Level1) * But the field started with number, which is not allowed. * @tc.expected:step1.GRD_OK. */ - const char *document2 = "{\"_id\" : \"35_2\", \"1A_aBdk_324_\" : \"value\", \"name\" : \"Chuan\"}"; + const char *document2 = "{\"1A_aBdk_324_\" : \"value\", \"name\" : \"Chuan\"}"; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document2, 0), GRD_INVALID_ARGS); } @@ -721,90 +759,110 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest038, TestSize.Level1) HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest039, TestSize.Level1) { /** - * @tc.steps:step1.Insert a filter which _id value's lens is larger than MAX_ID_LENS. + * @tc.steps:step1.Insert a filter which _id string len is 899 * @tc.expected:step1.GRD_OVER_LIMIT. */ - string document1 = "{\"_id\" : "; - string document2 = "\""; - string document4 = "\""; - string document5 = ", \"name\" : \"Ori\"}"; - string document_midlle(MAX_ID_LENS + 1, 'k'); - string document = document1 + document2 + document_midlle + document4 + document5; - EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document.c_str(), 0), GRD_OVER_LIMIT); + string head = "{\"_id\" : \""; + string end = "\", \"name\":\"mike\"}"; + string doc = head + std::string(900 - 1, 'k') + end; + EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, doc.c_str(), 0), GRD_OK); /** * @tc.steps:step1.Insert a filter which _id value's lens is equal as MAX_ID_LENS. * @tc.expected:step1.GRD_OK. */ - string document_midlle2(MAX_ID_LENS, 'k'); - document = document1 + document2 + document_midlle2 + document4 + document5; - EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document.c_str(), 0), GRD_OK); + string doc1 = head + std::string(900, 'k') + end; + EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, doc1.c_str(), 0), GRD_OVER_LIMIT); } /** * @tc.name: DocumentUpdataApiTest040 - * @tc.desc: Insert a filter which _id value's lens is larger than MAX_ID_LENS + * @tc.desc: Test insert under condition with multiple connection * @tc.type: FUNC * @tc.require: * @tc.author: mazhao */ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest040, TestSize.Level1) { - const char *filter = "{\"_id\" : \"1\"}"; - const char *updata2 = "{\"objectInfo.child.child\" : {\"child\":{\"child\":null}}}"; - EXPECT_EQ(GRD_UpdateDoc(g_db, RIGHT_COLLECTION_NAME, filter, updata2, 0), GRD_INVALID_ARGS); + /** + * @tc.steps:step1.create multiple collection. + * @tc.expected:step1.GRD_OK. + */ + string head = "{\"_id\" : \""; + string end = "\", \"name\":\"mike\"}"; + string doc = ""; + const int connectCnt = 16; + GRD_DB *dbVec[connectCnt] = { g_db }; + for (int i = 1; i < connectCnt; i++) { + int status = GRD_DBOpen(g_path.c_str(), nullptr, GRD_DB_OPEN_CREATE, &dbVec[i]); + EXPECT_EQ(status, GRD_OK); + } + /** + * @tc.steps:step2. Insert document(with and without _id) using multiple collection + * @tc.expected:step2.GRD_OK. + */ + string doc2 = "{\"name\": \"doc\"}"; + for (int i = 1; i < connectCnt; i++) { + doc = head + std::to_string(i) + 'a' + end; + EXPECT_EQ(GRD_InsertDoc(dbVec[i], RIGHT_COLLECTION_NAME, doc.c_str(), 0), GRD_OK); + EXPECT_EQ(GRD_InsertDoc(dbVec[i], RIGHT_COLLECTION_NAME, doc2.c_str(), 0), GRD_OK); + } + /** + * @tc.steps:step3. Close the connection created before + * @tc.expected:step3.GRD_OK. + */ + for (int i = 1; i < connectCnt; i++) { + EXPECT_EQ(GRD_DBClose(dbVec[i], 0), GRD_OK); + } } -/** - * @tc.name: DocumentUpdataApiTest041 - * @tc.desc: Insert a filter which _id value's lens is larger than MAX_ID_LENS - * @tc.type: FUNC - * @tc.require: - * @tc.author: mazhao - */ -HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest041, TestSize.Level1) +static void CreateDbAndInsert(int i) { - const char *filter = "{\"_id\" : \"1\"}"; - const char *updata1 = "{\"_id\" : \"6\"}"; - EXPECT_EQ(GRD_UpdateDoc(g_db, RIGHT_COLLECTION_NAME, filter, updata1, 0), GRD_INVALID_ARGS); + GRD_DB *db = nullptr; + string head = "{\"_id\" : \""; + string end = "\", \"name\":\"mike\"}"; + string doc = head + std::to_string(i) + 'b' + end; + string doc2 = "{\"name\": \"doc\"}"; + int status = GRD_DBOpen(g_path.c_str(), nullptr, GRD_DB_OPEN_CREATE, &db); + EXPECT_EQ(status, GRD_OK); + EXPECT_EQ(GRD_InsertDoc(db, RIGHT_COLLECTION_NAME, doc.c_str(), 0), GRD_OK); + EXPECT_EQ(GRD_InsertDoc(db, RIGHT_COLLECTION_NAME, doc2.c_str(), 0), GRD_OK); + EXPECT_EQ(GRD_DBClose(db, 0), GRD_OK); } -/** - * @tc.name: DocumentUpdataApiTest042 - * @tc.desc: Insert a filter which _id value's lens is larger than MAX_ID_LENS - * @tc.type: FUNC - * @tc.require: - * @tc.author: mazhao - */ -HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest042, TestSize.Level1) +static void CreateAndDropCollection(int i) { - const char *filter = "{\"_id\" : \"1\"}"; - const char *updata1 = "{\"age$\" : \"21\"}"; - const char *updata2 = "{\"bonus..traffic\" : 100}"; - const char *updata3 = "{\"0item\" : 100}"; - const char *updata4 = "{\"item\" : 1.79769313486232e308}"; - EXPECT_EQ(GRD_UpdateDoc(g_db, RIGHT_COLLECTION_NAME, filter, updata1, 0), GRD_INVALID_ARGS); - EXPECT_EQ(GRD_UpdateDoc(g_db, RIGHT_COLLECTION_NAME, filter, updata2, 0), GRD_INVALID_ARGS); - EXPECT_EQ(GRD_UpdateDoc(g_db, RIGHT_COLLECTION_NAME, filter, updata3, 0), GRD_INVALID_ARGS); - EXPECT_EQ(GRD_UpdateDoc(g_db, RIGHT_COLLECTION_NAME, filter, updata4, 0), GRD_INVALID_ARGS); + string collection = "collection" + std::to_string(i); + EXPECT_EQ(GRD_CreateCollection(g_db, collection.c_str(), "", 0), GRD_OK); + EXPECT_EQ(GRD_DropCollection(g_db, collection.c_str(), 0), GRD_OK); } +struct CreateDbAndInsertThread { + CreateDbAndInsertThread(int id) : m_id(id) {} + void operator()() const + { + CreateDbAndInsert(m_id); + } + int m_id; +}; + /** - * @tc.name: DocumentUpdataApiTest043 - * @tc.desc: Insert a filter which _id value's lens is larger than MAX_ID_LENS + * @tc.name: DocumentInsertApiTest041 + * @tc.desc: Test insert under multi-thread condition * @tc.type: FUNC * @tc.require: * @tc.author: mazhao */ -HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest043, TestSize.Level1) +HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest041, TestSize.Level1) { - const char *filter = "{\"_id\" : \"1\"}"; - const char *updata1 = "{\"age\" : 21}"; - EXPECT_EQ(GRD_UpdateDoc(g_db, NULL, filter, updata1, 0), GRD_INVALID_ARGS); - EXPECT_EQ(GRD_UpdateDoc(g_db, "", filter, updata1, 0), GRD_INVALID_ARGS); - EXPECT_EQ(GRD_UpdateDoc(NULL, RIGHT_COLLECTION_NAME, filter, updata1, 0), GRD_INVALID_ARGS); - EXPECT_EQ(GRD_UpdateDoc(g_db, RIGHT_COLLECTION_NAME, NULL, updata1, 0), GRD_INVALID_ARGS); - EXPECT_EQ(GRD_UpdateDoc(g_db, RIGHT_COLLECTION_NAME, filter, NULL, 0), GRD_INVALID_ARGS); + vector threads; + const int numThreads = 16; + for (int i = 1; i < numThreads; i++) { + threads.emplace_back(std::thread(CreateDbAndInsertThread(i))); + } + for (auto &thread : threads) { + thread.join(); + } } HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest044, TestSize.Level1) @@ -826,4 +884,42 @@ HWTEST_F(DocumentDBInsertTest, DocumentDBInsertTest046, TestSize.Level1) const char *document1 = R""({})""; EXPECT_EQ(GRD_InsertDoc(g_db, RIGHT_COLLECTION_NAME, document1, 0), GRD_OK); } + +/** + * @tc.name: GetOidKey003 + * @tc.desc: Check the range of key which is not repeated + * @tc.type: FUNC + * @tc.require: + * @tc.author: mazhao + */ +HWTEST_F(DocumentDBInsertTest, GetOidKey003, TestSize.Level1) +{ + std::set keySet; + DocumentDB::DocKey docKey; + uint32_t curTime = time(nullptr); + int num = 0; + for (int i = 0; i < 77777; ++i) { // 77777 is a random num greater than uint16. + /** + * @tc.steps:step1. Get objectId key. + * @tc.expected:step1. Return GRD_OK and key is not NULL. + */ + EXPECT_EQ(DocumentDB::DocumentKey::GetOidDocKey(docKey), GRD_OK); + EXPECT_NE(docKey.key.empty(), true); + /** + * @tc.steps:step2. Cache the hex key + * @tc.expected:step2. Up to 65536 keys are not equal in one second. + */ + uint32_t now = 0; + sscanf(docKey.key.c_str(), "%08x", &now); + if (curTime != now) { + break; + } + if (num > 65535) { + EXPECT_NE(keySet.find(docKey.key), keySet.end()); + } + num++; + EXPECT_EQ(keySet.find(docKey.key), keySet.end()); + keySet.insert(docKey.key); + } +} } // namespace diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/oh_adapter/documentdb_json_common_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/oh_adapter/documentdb_json_common_test.cpp index bfe3a8463d90bc7e4e1c786c92ee91fb95100e0b..bec7c70ae6d54df431a954fdf29d6fa6a836869a 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/oh_adapter/documentdb_json_common_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/oh_adapter/documentdb_json_common_test.cpp @@ -44,9 +44,9 @@ void DocumentDBJsonCommonTest::TearDown(void) {} HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest001, TestSize.Level0) { - std::string document = R""({"name":"Tmn","age":18,"addr":{"city":"shanghai","postal":200001}})""; - std::string updateDoc = R""({"name":"Xue","case":{"field1":1,"field2":"string","field3":[1,2,3]}, - "age":28,"addr":{"city":"shenzhen","postal":518000}})""; + std::string document = R""({"name":"Tmn", "age":18, "addr":{"city":"shanghai", "postal":200001}})""; + std::string updateDoc = R""({"name":"Xue", "case":{"field1":1, "field2":"string", "field3":[1, 2, 3]}, + "age":28, "addr":{"city":"shenzhen", "postal":518000}})""; int errCode = E_OK; JsonObject src = JsonObject::Parse(document, errCode); @@ -68,9 +68,10 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest001, TestSize.Level0) HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest002, TestSize.Level0) { - std::string document = R""({"name":"Tmn","case":2,"age":[1,2,3],"addr":{"city":"shanghai","postal":200001}})""; - std::string updateDoc = R""({"name":["Xue","Neco","Lip"],"grade":99,"age":18,"addr": - [{"city":"shanghai","postal":200001},{"city":"beijing","postal":100000}]})""; + std::string document = R""({"name":"Tmn", "case":2, "age":[1, 2, 3], + "addr":{"city":"shanghai", "postal":200001}})""; + std::string updateDoc = R""({"name":["Xue", "Neco", "Lip"], "grade":99, "age":18, "addr": + [{"city":"shanghai", "postal":200001}, {"city":"beijing", "postal":100000}]})""; int errCode = E_OK; JsonObject src = JsonObject::Parse(document, errCode); @@ -91,10 +92,10 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest002, TestSize.Level0) HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest003, TestSize.Level0) { - std::string document = R""({"name":["Tmn","BB","Alice"],"age":[1,2,3],"addr":[{"city":"shanghai","postal":200001}, - {"city":"wuhan","postal":430000}]})""; - std::string updateDoc = R""({"name":["Xue","Neco","Lip"],"age":18,"addr":[{"city":"shanghai","postal":200001}, - {"city":"beijing","postal":100000}]})""; + std::string document = R""({"name":["Tmn", "BB", "Alice"], "age":[1, 2, 3], + "addr":[{"city":"shanghai", "postal":200001}, {"city":"wuhan", "postal":430000}]})""; + std::string updateDoc = R""({"name":["Xue", "Neco", "Lip"], "age":18, "addr":[{"city":"shanghai", "postal":200001}, + {"city":"beijing", "postal":100000}]})""; int errCode = E_OK; JsonObject src = JsonObject::Parse(document, errCode); @@ -129,7 +130,7 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest004, TestSize.Level0) HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest005, TestSize.Level0) { - std::string document = R""({"name":["Tmn","BB","Alice"]})""; + std::string document = R""({"name":["Tmn", "BB", "Alice"]})""; std::string updateDoc = R""({"name.2":"GG"})""; int errCode = E_OK; @@ -148,7 +149,7 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest005, TestSize.Level0) HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest006, TestSize.Level0) { - std::string document = R""({"name":{"first":"Tno","last":"moray"}})""; + std::string document = R""({"name":{"first":"Tno", "last":"moray"}})""; std::string updateDoc = R""({"name":{"midle.AA":"GG"}})""; int errCode = E_OK; @@ -167,7 +168,7 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest006, TestSize.Level0) HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest007, TestSize.Level0) { - std::string document = R""({"name":{"first":["XX","CC"],"last":"moray"}})""; + std::string document = R""({"name":{"first":["XX", "CC"], "last":"moray"}})""; std::string updateDoc = R""({"name.first.0":"LL"})""; int errCode = E_OK; @@ -186,8 +187,8 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest007, TestSize.Level0) HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest008, TestSize.Level0) { - std::string document = R""({"name":{"first":"XX","last":"moray"}})""; - std::string updateDoc = R""({"name":{"first":["XXX","BBB","CCC"]}})""; + std::string document = R""({"name":{"first":"XX", "last":"moray"}})""; + std::string updateDoc = R""({"name":{"first":["XXX", "BBB", "CCC"]}})""; int errCode = E_OK; JsonObject src = JsonObject::Parse(document, errCode); @@ -205,7 +206,7 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest008, TestSize.Level0) HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest009, TestSize.Level0) { - std::string document = R""({"name":{"first":["XXX","BBB","CCC"],"last":"moray"}})""; + std::string document = R""({"name":{"first":["XXX", "BBB", "CCC"], "last":"moray"}})""; std::string updateDoc = R""({"name":{"first":"XX"}})""; int errCode = E_OK; @@ -286,8 +287,8 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest013, TestSize.Level0) HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest014, TestSize.Level0) { - std::string document = R""({"name":{"first":"Xue","second":"Lang"}, "info":"AA"})""; - std::string updateDoc = R""({"info":"GG", "name.0":"GG"})""; + std::string document = R""({"name":{"first":"Xue", "second":"Lang"}})""; + std::string updateDoc = R""({"name.0":"GG"})""; int errCode = E_OK; JsonObject src = JsonObject::Parse(document, errCode); @@ -301,7 +302,7 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest014, TestSize.Level0) HWTEST_F(DocumentDBJsonCommonTest, JsonObjectAppendTest015, TestSize.Level0) { std::string document = R""({"name":{"first":"Xue","second":"Lang"}})""; - std::string updateDoc = R""({"name.first":["GG","MM"]})""; + std::string updateDoc = R""({"name.first":["GG", "MM"]})""; int errCode = E_OK; JsonObject src = JsonObject::Parse(document, errCode); @@ -459,7 +460,7 @@ HWTEST_F(DocumentDBJsonCommonTest, JsonObjectisFilterCheckTest012, TestSize.Leve { std::string document = R""({"item" : "journal", "instock" : [{"warehose" : "A", "qty" : 5}, {"warehose" : "C", "qty" : 15}]})""; - std::string filter = R""({"instock" : {"warehose" : "A", "bad" : "2" ,"qty" : 5}})""; + std::string filter = R""({"instock" : {"warehose" : "A", "bad" : "2" , "qty" : 5}})""; int errCode = E_OK; JsonObject srcObj = JsonObject::Parse(document, errCode); EXPECT_EQ(errCode, E_OK); diff --git a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/oh_adapter/documentdb_jsonobject_test.cpp b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/oh_adapter/documentdb_jsonobject_test.cpp index 93d46974db1f0e372d108a60bd25a64023e5c246..604f2c386eeb5e9d5a9f019633c9dcc4404be2ab 100644 --- a/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/oh_adapter/documentdb_jsonobject_test.cpp +++ b/services/distributeddataservice/service/data_share/gaussdb_rd/test/unittest/oh_adapter/documentdb_jsonobject_test.cpp @@ -49,7 +49,7 @@ void DocumentDBJsonObjectTest::TearDown(void) {} */ HWTEST_F(DocumentDBJsonObjectTest, JsonObjectTest001, TestSize.Level0) { - const std::string config = R""({"a":123,"b":{"c":234,"d":"12345"}})""; + const std::string config = R""({"a":123, "b":{"c":234, "d":"12345"}})""; int ret = E_OK; JsonObject conf = JsonObject::Parse(config, ret);