diff --git a/tests/python_client/testcases/test_delete.py b/tests/python_client/testcases/test_delete.py index 45bb6516a8d128a89626e46f3170fb335017d45d..78febe2790a2f33c65fce22eb5a14eb6ce9da44b 100644 --- a/tests/python_client/testcases/test_delete.py +++ b/tests/python_client/testcases/test_delete.py @@ -469,6 +469,40 @@ class TestDeleteOperation(TestcaseBase): # since the search requests arrived query nodes earlier than query nodes consume the delete requests. assert len(inter) == 0 + @pytest.mark.tags(CaseLabel.L2) + def test_delete_search_rename_collection(self): + """ + target: test delete and search in the renamed collection + method: search entities after it was deleted + expected: deleted entity is not in the search result + """ + # init collection with nb default data + collection_w, _, _, ids = self.init_collection_general(prefix, insert_data=True)[0:4] + entity, _ = collection_w.query(tmp_expr, output_fields=["%"]) + search_res, _ = collection_w.search([entity[0][ct.default_float_vec_field_name]], + ct.default_float_vec_field_name, + ct.default_search_params, ct.default_limit) + # assert search results contains entity + assert 0 in search_res[0].ids + # rename collection + old_collection_name = collection_w.name + new_collection_name = cf.gen_unique_str(prefix + "new") + self.utility_wrap.rename_collection(old_collection_name, new_collection_name) + collection_w = self.init_collection_wrap(name=new_collection_name) + # delete entities + expr = f'{ct.default_int64_field_name} in {ids[:ct.default_nb // 2]}' + collection_w.delete(expr) + search_res_2, _ = collection_w.search([entity[0][ct.default_float_vec_field_name]], + ct.default_float_vec_field_name, + ct.default_search_params, ct.default_limit) + # assert search result is not equal to entity + log.debug(f"Second search result ids: {search_res_2[0].ids}") + inter = set(ids[:ct.default_nb // 2] + ).intersection(set(search_res_2[0].ids)) + # Using bounded staleness, we could still search the "deleted" entities, + # since the search requests arrived query nodes earlier than query nodes consume the delete requests. + assert len(inter) == 0 + @pytest.mark.tags(CaseLabel.L1) def test_delete_expr_repeated_values(self): """ diff --git a/tests/python_client/testcases/test_utility.py b/tests/python_client/testcases/test_utility.py index ba7b26ee59d1fe6dc9f6fa2deb2809940b063c36..2633085ad5a06454c0705d808f774144ee864854 100644 --- a/tests/python_client/testcases/test_utility.py +++ b/tests/python_client/testcases/test_utility.py @@ -1566,6 +1566,63 @@ class TestUtilityBase(TestcaseBase): assert collection_w_1.aliases[0] == alias_2 assert collection_w_2.aliases[0] == alias_1 + @pytest.mark.tags(CaseLabel.L2) + def test_rename_back_old_collection(self): + """ + target: test rename collection function to single collection + method: rename back to old collection name + expected: collection renamed successfully without any change on aliases + """ + # 1. connect + self._connect() + # 2. create a collection + collection_w, vectors, _, insert_ids, _ = self.init_collection_general(prefix) + old_collection_name = collection_w.name + new_collection_name = cf.gen_unique_str(prefix + "new") + alias = cf.gen_unique_str(prefix + "alias") + # 3. create an alias + self.utility_wrap.create_alias(old_collection_name, alias) + collection_alias = collection_w.aliases + # 4. rename collection + self.utility_wrap.rename_collection(old_collection_name, new_collection_name) + # 5. rename back to old collection name + self.utility_wrap.rename_collection(new_collection_name, old_collection_name) + collection_w = self.init_collection_wrap(name=old_collection_name, + check_task=CheckTasks.check_collection_property, + check_items={exp_name: old_collection_name, + exp_schema: default_schema}) + collections = self.utility_wrap.list_collections()[0] + assert old_collection_name in collections + assert new_collection_name not in collections + assert collection_alias == collection_w.aliases + + @pytest.mark.tags(CaseLabel.L2) + def test_rename_back_old_alias(self): + """ + target: test rename collection function to single collection + method: rename back to old collection alias + expected: collection renamed successfully without any change on aliases + """ + # 1. connect + self._connect() + # 2. create a collection + collection_w, vectors, _, insert_ids, _ = self.init_collection_general(prefix) + old_collection_name = collection_w.name + alias = cf.gen_unique_str(prefix + "alias") + # 3. create an alias + self.utility_wrap.create_alias(old_collection_name, alias) + collection_alias = collection_w.aliases + # 4. drop the alias + self.utility_wrap.drop_alias(collection_alias[0]) + # 5. rename collection to the dropped alias name + self.utility_wrap.rename_collection(old_collection_name, collection_alias[0]) + self.init_collection_wrap(name=collection_alias[0], + check_task=CheckTasks.check_collection_property, + check_items={exp_name: collection_alias[0], + exp_schema: default_schema}) + collections = self.utility_wrap.list_collections()[0] + assert collection_alias[0] in collections + assert old_collection_name not in collections class TestUtilityAdvanced(TestcaseBase): """ Test case of index interface """