Add test cases of default value (#24636)

Signed-off-by: nico <cheng.yuan@zilliz.com>
This commit is contained in:
nico 2023-06-06 12:06:41 +08:00 committed by GitHub
parent 6845bfde2a
commit 48f2d2e534
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 155 additions and 6 deletions

View File

@ -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

View File

@ -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

View File

@ -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):
"""

View File

@ -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):
"""