def test_partition_max_description_length(self): """ target: verify create a partition with 255 length name and 1024 length description method: 1. create a partition with 255 length name and 1024 length description expected: 1. create successfully """ # create collection collection_w = self.init_collection_wrap() # init partition partition_name = cf.gen_str_by_length(255) description = cf.gen_str_by_length(2048) self.init_partition_wrap(collection_w, partition_name, description=description, check_task=CheckTasks.check_partition_property, check_items={"name": partition_name, "description": description, "is_empty": True} )
def test_partition_maxlength_name(self): """ target: verify create a partition with maxlength(256) name method: 1. create a partition with max length names expected: 1. raise exception """ # create collection collection_w = self.init_collection_wrap() # create partition partition_name = cf.gen_str_by_length(256) self.partition_wrap.init_partition(collection_w.collection, partition_name, check_task=CheckTasks.err_res, check_items={ct.err_code: 1, 'err_msg': "is illegal"} )
class TestPartitionParams(TestcaseBase): """ Test case of partition interface in parameters""" @pytest.mark.tags(CaseLabel.L0) @pytest.mark.parametrize( "partition_name, description", [(cf.gen_unique_str(prefix), cf.gen_unique_str("desc_"))]) def test_partition_default(self, partition_name, description): """ target: verify create a partition method: 1. create a partition expected: 1. create successfully """ # create collection collection_w = self.init_collection_wrap() # create partition self.init_partition_wrap( collection_w, partition_name, description=description, check_task=CheckTasks.check_partition_property, check_items={ "name": partition_name, "description": description, "is_empty": True, "num_entities": 0 }) # check that the partition has been created assert collection_w.has_partition(partition_name)[0] @pytest.mark.tags(CaseLabel.L1) @pytest.mark.xfail(reason="issue #5375") @pytest.mark.parametrize("partition_name", [""]) def test_partition_empty_name(self, partition_name): """ target: verify create a partition with empyt name method: 1. create a partition empty none name expected: 1. raise exception """ # create a collection collection_w = self.init_collection_wrap() # create partition self.partition_wrap.init_partition( collection_w.collection, partition_name, check_task=CheckTasks.err_res, check_items={ ct.err_code: 1, ct.err_msg: "Partition name should not be empty" }) @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize("partition_name, description", [(cf.gen_unique_str(prefix), "")]) def test_partition_empty_description(self, partition_name, description): """ target: verify create a partition with empty description method: 1. create a partition with empty description expected: 1. create successfully """ # create collection collection_w = self.init_collection_wrap() # init partition self.init_partition_wrap( collection_w, partition_name, description=description, check_task=CheckTasks.check_partition_property, check_items={ "name": partition_name, "description": description, "is_empty": True, "num_entities": 0 }) # check that the partition has been created assert collection_w.has_partition(partition_name)[0] @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize( "partition_name, description", [(cf.gen_str_by_length(255), cf.gen_str_by_length(2048))]) def test_partition_max_description_length(self, partition_name, description): """ target: verify create a partition with 255 length name and 1024 length description method: 1. create a partition with 255 length name and 1024 length description expected: 1. create successfully """ # create collection collection_w = self.init_collection_wrap() # init partition self.init_partition_wrap( collection_w, partition_name, description=description, check_task=CheckTasks.check_partition_property, check_items={ "name": partition_name, "description": description, "is_empty": True }) @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize("collection_name, partition_name, description", [ (cf.gen_unique_str(), cf.gen_unique_str(prefix), cf.gen_unique_str()) ]) def test_partition_dup_name(self, collection_name, partition_name, description): """ target: verify create partitions with duplicate name method: 1. create partitions with duplicate name expected: 1. create successfully 2. the same partition returned with diff object id """ # create a collection collection_w = self.init_collection_wrap() # create two partitions partition_w1 = self.init_partition_wrap(collection_w, partition_name, description) partition_w2 = self.init_partition_wrap(collection_w, partition_name, description) # public check func to be extracted assert id(partition_w1.partition) != id(partition_w2.partition) assert partition_w1.name == partition_w2.name assert partition_w1.description == partition_w2.description @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize("description", ct.get_invalid_strs) @pytest.mark.parametrize("partition_name", [cf.gen_unique_str(prefix)]) def test_partition_special_chars_description(self, partition_name, description): """ target: verify create a partition with special characters in description method: 1. create a partition with special characters in description expected: 1. create successfully """ # create collection collection_w = self.init_collection_wrap() # create partition self.init_partition_wrap( collection_w, partition_name, description=description, check_task=CheckTasks.check_partition_property, check_items={ "name": partition_name, "description": description, "is_empty": True, "num_entities": 0 }) assert collection_w.has_partition(partition_name)[0] @pytest.mark.tags(CaseLabel.L1) def test_partition_default_name(self): """ target: verify create a partition with default name method: 1. get the _default partition 2. create a partition with _default name expected: 1. the same partition returned """ # create collection collection_w = self.init_collection_wrap() # check that the default partition exists assert collection_w.has_partition(ct.default_partition_name)[0] # check that can get the _default partition collection, _ = collection_w.partition(ct.default_partition_name) # check that init the _default partition object partition_w = self.init_partition_wrap(collection_w, ct.default_partition_name) assert collection.name == partition_w.name @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize("partition_name", [cf.gen_str_by_length(256)]) def test_partition_maxlength_name(self, partition_name): """ target: verify create a partition with maxlength(256) name method: 1. create a partition with max length names expected: 1. raise exception """ # create collection collection_w = self.init_collection_wrap() # create partition self.partition_wrap.init_partition(collection_w.collection, partition_name, check_task=CheckTasks.err_res, check_items={ ct.err_code: 1, 'err_msg': "is illegal" }) @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize("partition_name", ct.get_invalid_strs) def test_partition_invalid_name(self, partition_name): """ target: verify create a partition with invalid name method: 1. create a partition with invalid names expected: 1. raise exception """ # create collection collection_w = self.init_collection_wrap() # create partition self.partition_wrap.init_partition(collection_w.collection, partition_name, check_task=CheckTasks.err_res, check_items={ ct.err_code: 1, 'err_msg': "is illegal" }) # TODO: need an error code issue #5144 and assert independently @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize("partition_name", [cf.gen_unique_str(prefix)]) def test_partition_none_collection(self, partition_name): """ target: verify create a partition with none collection method: 1. create a partition with none collection expected: 1. raise exception """ # create partition with collection is None self.partition_wrap.init_partition( collection=None, name=partition_name, check_task=CheckTasks.err_res, check_items={ ct.err_code: 1, ct.err_msg: "must be pymilvus_orm.Collection" }) @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize("partition_name", [cf.gen_unique_str(prefix)]) def test_partition_drop(self, partition_name): """ target: verify drop a partition in one collection method: 1. create a partition in one collection 2. drop the partition expected: 1. drop successfully """ # create collection collection_w = self.init_collection_wrap() # create partition partition_w = self.init_partition_wrap(collection_w, partition_name) # check that the partition exists assert collection_w.has_partition(partition_name)[0] # drop partition partition_w.drop() # check that the partition not exists assert not collection_w.has_partition(partition_name)[0] @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize("search_vectors", [cf.gen_vectors(1, ct.default_dim)]) def test_partition_release(self, search_vectors): """ target: verify release partition method: 1. create a collection and several partitions 2. insert data into each partition 3. flush and load the partitions 4. release partition1 5. release partition1 twice expected: 1. the released partition is released 2. the other partition is not released """ # create collection collection_w = self.init_collection_wrap() # create two partitions partition_w1 = self.init_partition_wrap(collection_w) partition_w2 = self.init_partition_wrap(collection_w) # insert data to two partition partition_w1.insert(cf.gen_default_list_data()) partition_w2.insert(cf.gen_default_list_data()) # load two partitions partition_w1.load() partition_w2.load() # search two partitions res1, _ = partition_w1.search( data=search_vectors, anns_field=ct.default_float_vec_field_name, params={"nprobe": 32}, limit=1) res2, _ = partition_w2.search( data=search_vectors, anns_field=ct.default_float_vec_field_name, params={"nprobe": 32}, limit=1) assert len(res1) == 1 and len(res2) == 1 # release the first partition partition_w1.release() # check result res1, _ = partition_w1.search( data=search_vectors, anns_field=ct.default_float_vec_field_name, params={"nprobe": 32}, limit=1, check_task=ct.CheckTasks.err_res, check_items={ ct.err_code: 1, ct.err_msg: "partitions have been released" }) res2, _ = partition_w2.search( data=search_vectors, anns_field=ct.default_float_vec_field_name, params={"nprobe": 32}, limit=1) assert len(res2) == 1 @pytest.mark.tags(CaseLabel.L1) @pytest.mark.parametrize("partition_name", [cf.gen_unique_str(prefix)]) @pytest.mark.parametrize("data, nums", [(cf.gen_default_dataframe_data(10), 10), (cf.gen_default_list_data(1), 1), (cf.gen_default_tuple_data(10), 10)]) def test_partition_insert(self, partition_name, data, nums): """ target: verify insert multi entities by dataFrame method: 1. create a collection and a partition 2. partition.insert(data) 3. insert data again expected: 1. insert data successfully """ # create collection collection_w = self.init_collection_wrap() # create partition partition_w = self.init_partition_wrap( collection_w, partition_name, check_task=CheckTasks.check_partition_property, check_items={ "name": partition_name, "is_empty": True, "num_entities": 0 }) # insert data partition_w.insert(data) self._connect().flush([collection_w.name]) assert not partition_w.is_empty assert partition_w.num_entities == nums # insert data partition_w.insert(data) self._connect().flush([collection_w.name]) assert not partition_w.is_empty assert partition_w.num_entities == (nums + nums)