diff --git a/tests/python_client/testcases/test_insert.py b/tests/python_client/testcases/test_insert.py index fce5599da3..b28fffe8ea 100644 --- a/tests/python_client/testcases/test_insert.py +++ b/tests/python_client/testcases/test_insert.py @@ -1502,13 +1502,19 @@ class TestUpsertValid(TestcaseBase): data2, float_values2 = cf.gen_default_data_for_upsert(upsert_nb) # upsert at the same time - def do_upsert(): + def do_upsert1(): collection_w.upsert(data=data1) - t = threading.Thread(target=do_upsert, args=()) - t.start() - collection_w.upsert(data=data2) - t.join() + def do_upsert2(): + collection_w.upsert(data=data2) + + t1 = threading.Thread(target=do_upsert1, args=()) + t2 = threading.Thread(target=do_upsert2, args=()) + + t1.start() + t2.start() + t1.join() + t2.join() # check the result exp = f"int64 >= 0 && int64 <= {upsert_nb}" diff --git a/tests/python_client/testcases/test_query.py b/tests/python_client/testcases/test_query.py index 294b1f721a..4a5c6a66ac 100644 --- a/tests/python_client/testcases/test_query.py +++ b/tests/python_client/testcases/test_query.py @@ -923,6 +923,52 @@ class TestQueryParams(TestcaseBase): for ids in [res[i][default_int_field_name] for i in range(ct.default_nb)]: assert ids < 10000 + @pytest.mark.tags(CaseLabel.L2) + def test_query_ignore_growing_after_upsert(self): + """ + target: test query ignoring growing segment after upsert + method: 1. create a collection, insert data, create index and load + 2. upsert the inserted data + 3. query with param ignore_growing=True + expected: query successfully + """ + # 1. create a collection + collection_w = self.init_collection_general(prefix, True)[0] + + # 2. insert data again + data = cf.gen_default_data_for_upsert()[0] + collection_w.upsert(data) + + # 3. query with param ignore_growing=True + res1 = collection_w.query('int64 >= 0', ignore_growing=True)[0] + res2 = collection_w.query('int64 >= 0')[0] + assert len(res1) == 0 + assert len(res2) == ct.default_nb + + @pytest.mark.tags(CaseLabel.L2) + @pytest.mark.parametrize("ignore_growing", ct.get_invalid_strs[:8]) + def test_query_invalid_ignore_growing_param(self, ignore_growing): + """ + target: test query ignoring growing segment param invalid + method: 1. create a collection, insert data and load + 2. insert data again + 3. query with ignore_growing type invalid + expected: raise exception + """ + if ignore_growing == 1: + pytest.skip("number is valid") + # 1. create a collection + collection_w = self.init_collection_general(prefix, True)[0] + + # 2. insert data again + data = cf.gen_default_dataframe_data(start=10000) + collection_w.insert(data) + + # 3. query with param ignore_growing invalid + error = {ct.err_code: 1, ct.err_msg: "parse search growing failed"} + collection_w.query('int64 >= 0', ignore_growing=ignore_growing, + check_task=CheckTasks.err_res, check_items=error) + @pytest.fixture(scope="function", params=[0, 10, 100]) def offset(self, request): yield request.param diff --git a/tests/python_client/testcases/test_search.py b/tests/python_client/testcases/test_search.py index 0425d17f5a..61b6155fc4 100644 --- a/tests/python_client/testcases/test_search.py +++ b/tests/python_client/testcases/test_search.py @@ -869,6 +869,34 @@ class TestCollectionSearchInvalid(TestcaseBase): check_items={"err_code": 1, "err_msg": f"Field {output_fields[-1]} not exist"}) + @pytest.mark.tags(CaseLabel.L2) + @pytest.mark.parametrize("ignore_growing", ct.get_invalid_strs[:8]) + def test_search_invalid_ignore_growing_param(self, ignore_growing): + """ + target: test search ignoring growing segment + method: 1. create a collection, insert data, create index and load + 2. insert data again + 3. search with param ignore_growing invalid + expected: raise exception + """ + if ignore_growing == 1: + pytest.skip("number is valid") + # 1. create a collection + collection_w = self.init_collection_general(prefix, True)[0] + + # 2. insert data again + data = cf.gen_default_dataframe_data(start=10000) + collection_w.insert(data) + + # 3. search with param ignore_growing=True + search_params = {"metric_type": "L2", "params": {"nprobe": 10}, "ignore_growing": ignore_growing} + vector = [[random.random() for _ in range(default_dim)] for _ in range(nq)] + collection_w.search(vector[:default_nq], default_search_field, search_params, default_limit, + default_search_exp, + check_task=CheckTasks.err_res, + check_items={"err_code": 1, + "err_msg": "parse search growing failed"}) + @pytest.mark.tags(CaseLabel.L2) def test_search_param_invalid_travel_timestamp(self, get_invalid_travel_timestamp): """