mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-01-07 19:31:51 +08:00
Add test cases of default value (#24636)
Signed-off-by: nico <cheng.yuan@zilliz.com>
This commit is contained in:
parent
6845bfde2a
commit
48f2d2e534
@ -111,15 +111,15 @@ def gen_int64_field(name=ct.default_int64_field_name, description=ct.default_des
|
||||
return int64_field
|
||||
|
||||
|
||||
def gen_float_field(name=ct.default_float_field_name, is_primary=False, description=ct.default_desc):
|
||||
def gen_float_field(name=ct.default_float_field_name, is_primary=False, description=ct.default_desc, **kwargs):
|
||||
float_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.FLOAT, description=description,
|
||||
is_primary=is_primary)
|
||||
is_primary=is_primary, **kwargs)
|
||||
return float_field
|
||||
|
||||
|
||||
def gen_double_field(name=ct.default_double_field_name, is_primary=False, description=ct.default_desc):
|
||||
double_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.DOUBLE,
|
||||
description=description, is_primary=is_primary)
|
||||
def gen_double_field(name=ct.default_double_field_name, is_primary=False, description=ct.default_desc, **kwargs):
|
||||
double_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.DOUBLE, description=description,
|
||||
is_primary=is_primary, **kwargs)
|
||||
return double_field
|
||||
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ allure-pytest==2.7.0
|
||||
pytest-print==0.2.1
|
||||
pytest-level==0.1.1
|
||||
pytest-xdist==2.5.0
|
||||
pymilvus==2.4.0.dev63
|
||||
pymilvus==2.4.0.dev67
|
||||
pytest-rerunfailures==9.1.1
|
||||
git+https://github.com/Projectplace/pytest-tags
|
||||
ndg-httpsclient
|
||||
|
||||
@ -1657,6 +1657,11 @@ class TestCollectionMultiCollections(TestcaseBase):
|
||||
|
||||
|
||||
class TestCreateCollection(TestcaseBase):
|
||||
|
||||
@pytest.fixture(scope="function", params=[False, True])
|
||||
def auto_id(self, request):
|
||||
yield request.param
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
def test_create_collection_multithread(self):
|
||||
"""
|
||||
@ -1685,6 +1690,30 @@ class TestCreateCollection(TestcaseBase):
|
||||
for item in collection_names:
|
||||
assert item in self.utility_wrap.list_collections()[0]
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
def test_create_collection_using_default_value(self, auto_id):
|
||||
"""
|
||||
target: test create collection with default_value
|
||||
method: create a schema with all fields using default value
|
||||
expected: collections are created
|
||||
"""
|
||||
fields = [
|
||||
cf.gen_int64_field(name='pk', is_primary=True),
|
||||
cf.gen_float_vec_field(),
|
||||
cf.gen_int8_field(default_value=numpy.int8(8)),
|
||||
cf.gen_int16_field(default_value=numpy.int16(16)),
|
||||
cf.gen_int32_field(default_value=numpy.int32(32)),
|
||||
cf.gen_int64_field(default_value=numpy.int64(64)),
|
||||
cf.gen_float_field(default_value=numpy.float32(3.14)),
|
||||
cf.gen_double_field(default_value=numpy.double(3.1415)),
|
||||
cf.gen_bool_field(default_value=False),
|
||||
cf.gen_string_field(default_value="abc")
|
||||
]
|
||||
schema = cf.gen_collection_schema(fields, auto_id=auto_id)
|
||||
self.init_collection_wrap(schema=schema,
|
||||
check_task=CheckTasks.check_collection_property,
|
||||
check_items={"schema": schema})
|
||||
|
||||
|
||||
class TestCreateCollectionInvalid(TestcaseBase):
|
||||
"""
|
||||
@ -1715,6 +1744,61 @@ class TestCreateCollectionInvalid(TestcaseBase):
|
||||
schema, _ = self.collection_schema_wrap.init_collection_schema(fields=field_schema_list)
|
||||
self.init_collection_wrap(name=c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
@pytest.mark.parametrize("default_value", ["abc"])
|
||||
@pytest.mark.skip(reason="issue #24634")
|
||||
def test_create_collection_with_invalid_default_value_string(self, default_value):
|
||||
"""
|
||||
target: test create collection with maximum fields
|
||||
method: create collection with maximum field number
|
||||
expected: raise exception
|
||||
"""
|
||||
fields = [
|
||||
cf.gen_int64_field(name='pk', is_primary=True),
|
||||
cf.gen_float_vec_field(),
|
||||
cf.gen_string_field(max_length=2, default_value=default_value)
|
||||
]
|
||||
schema = cf.gen_collection_schema(fields)
|
||||
self.init_collection_wrap(schema=schema,
|
||||
check_task=CheckTasks.check_collection_property,
|
||||
check_items={"schema": schema})
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
@pytest.mark.parametrize("default_value", ["abc", 9.09, 1, False])
|
||||
def test_create_collection_with_invalid_default_value_float(self, default_value):
|
||||
"""
|
||||
target: test create collection with maximum fields
|
||||
method: create collection with maximum field number
|
||||
expected: raise exception
|
||||
"""
|
||||
fields = [
|
||||
cf.gen_int64_field(name='pk', is_primary=True),
|
||||
cf.gen_float_vec_field(),
|
||||
cf.gen_float_field(default_value=default_value)
|
||||
]
|
||||
schema = cf.gen_collection_schema(fields)
|
||||
self.init_collection_wrap(schema=schema, check_task=CheckTasks.err_res,
|
||||
check_items={ct.err_code: 1,
|
||||
ct.err_msg: "default value type mismatches field schema type"})
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
@pytest.mark.parametrize("default_value", ["abc", 9.09, 1, False])
|
||||
def test_create_collection_with_invalid_default_value_int8(self, default_value):
|
||||
"""
|
||||
target: test create collection with maximum fields
|
||||
method: create collection with maximum field number
|
||||
expected: raise exception
|
||||
"""
|
||||
fields = [
|
||||
cf.gen_int64_field(name='pk', is_primary=True),
|
||||
cf.gen_float_vec_field(),
|
||||
cf.gen_int8_field(default_value=default_value)
|
||||
]
|
||||
schema = cf.gen_collection_schema(fields)
|
||||
self.init_collection_wrap(schema=schema, check_task=CheckTasks.err_res,
|
||||
check_items={ct.err_code: 1,
|
||||
ct.err_msg: "default value type mismatches field schema type"})
|
||||
|
||||
|
||||
class TestDropCollection(TestcaseBase):
|
||||
"""
|
||||
|
||||
@ -413,6 +413,10 @@ class TestInsertOperation(TestcaseBase):
|
||||
def dim(self, request):
|
||||
yield request.param
|
||||
|
||||
@pytest.fixture(scope="function", params=[False, True])
|
||||
def auto_id(self, request):
|
||||
yield request.param
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L2)
|
||||
def test_insert_without_connection(self):
|
||||
"""
|
||||
@ -850,6 +854,67 @@ class TestInsertOperation(TestcaseBase):
|
||||
collection_w.insert(data=data)
|
||||
assert collection_w.num_entities == nb
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.parametrize("default_value", [[], None])
|
||||
def test_insert_one_field_using_default_value(self, default_value, auto_id):
|
||||
"""
|
||||
target: test insert with one field using default value
|
||||
method: 1. create a collection with one field using default value
|
||||
2. insert using []/None to replace the field value
|
||||
expected: insert successfully
|
||||
"""
|
||||
fields = [cf.gen_int64_field(is_primary=True), cf.gen_float_field(),
|
||||
cf.gen_string_field(default_value="abc"), cf.gen_float_vec_field()]
|
||||
schema = cf.gen_collection_schema(fields, auto_id=auto_id)
|
||||
collection_w = self.init_collection_wrap(schema=schema)
|
||||
data = [
|
||||
[i for i in range(ct.default_nb)],
|
||||
[np.float32(i) for i in range(ct.default_nb)],
|
||||
default_value,
|
||||
cf.gen_vectors(ct.default_nb, ct.default_dim)
|
||||
]
|
||||
if auto_id:
|
||||
del data[0]
|
||||
collection_w.insert(data)
|
||||
assert collection_w.num_entities == ct.default_nb
|
||||
|
||||
@pytest.mark.tags(CaseLabel.L1)
|
||||
@pytest.mark.parametrize("default_value", [[], None])
|
||||
def test_insert_multi_fields_using_default_value(self, default_value, auto_id):
|
||||
"""
|
||||
target: test insert with multi fields using default value
|
||||
method: 1. default value fields before vector, insert [], None, fail
|
||||
2. default value fields all after vector field, insert empty, succeed
|
||||
expected: report error and insert successfully
|
||||
"""
|
||||
# 1. default value fields before vector, insert [], None, fail
|
||||
fields = [cf.gen_int64_field(is_primary=True), cf.gen_float_field(default_value=np.float32(1.0)),
|
||||
cf.gen_string_field(default_value="abc"), cf.gen_float_vec_field()]
|
||||
schema = cf.gen_collection_schema(fields, auto_id=auto_id)
|
||||
collection_w = self.init_collection_wrap(schema=schema)
|
||||
data = [[i for i in range(ct.default_nb)], default_value,
|
||||
# if multi default_value fields before vector field, every field must use []/None
|
||||
cf.gen_vectors(ct.default_nb, ct.default_dim)]
|
||||
if auto_id:
|
||||
del data[0]
|
||||
collection_w.insert(data, check_task=CheckTasks.err_res,
|
||||
check_items={ct.err_code: 1,
|
||||
ct.err_msg: "The data type of field varchar doesn't match"})
|
||||
# 2. default value fields all after vector field, insert empty, succeed
|
||||
fields = [cf.gen_int64_field(is_primary=True), cf.gen_float_vec_field(),
|
||||
cf.gen_float_field(default_value=np.float32(1.0)),
|
||||
cf.gen_string_field(default_value="abc")]
|
||||
schema = cf.gen_collection_schema(fields, auto_id=auto_id)
|
||||
collection_w = self.init_collection_wrap(schema=schema)
|
||||
data = [[i for i in range(ct.default_nb)], cf.gen_vectors(ct.default_nb, ct.default_dim)]
|
||||
data1 = [[i for i in range(ct.default_nb)], cf.gen_vectors(ct.default_nb, ct.default_dim),
|
||||
[np.float32(i) for i in range(ct.default_nb)]]
|
||||
if auto_id:
|
||||
del data[0], data1[0]
|
||||
collection_w.insert(data)
|
||||
assert collection_w.num_entities == ct.default_nb
|
||||
collection_w.insert(data1)
|
||||
|
||||
|
||||
class TestInsertAsync(TestcaseBase):
|
||||
"""
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user