Regress and fix issues (#5550)

* add case of insert

Signed-off-by: ThreadDao <yufen.zong@zilliz.com>

* add insert cases

Signed-off-by: ThreadDao <yufen.zong@zilliz.com>

* test insert

Signed-off-by: ThreadDao <yufen.zong@zilliz.com>

* test insert data

Signed-off-by: ThreadDao <yufen.zong@zilliz.com>

* fix codacy

Signed-off-by: ThreadDao <yufen.zong@zilliz.com>

* regress and fix issues

Signed-off-by: ThreadDao <yufen.zong@zilliz.com>

* [skip ci] add binary not match dim case

Signed-off-by: ThreadDao <yufen.zong@zilliz.com>
pull/5560/head
ThreadDao 2021-06-03 10:52:32 +08:00 committed by GitHub
parent 4018dfc5b7
commit c47b157511
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 55 additions and 38 deletions

View File

@ -160,8 +160,9 @@ def gen_invalid_field_types():
def gen_all_type_fields(): def gen_all_type_fields():
fields = [] fields = []
for k, v in DataType.__members__.items(): for k, v in DataType.__members__.items():
field = FieldSchema(name=k.lower(), dtype=v) if v != DataType.UNKNOWN:
fields.append(field) field = FieldSchema(name=k.lower(), dtype=v)
fields.append(field)
return fields return fields

View File

@ -1,6 +1,9 @@
--extra-index-url https://test.pypi.org/simple/
pytest==5.3.4 pytest==5.3.4
sklearn==0.0 sklearn==0.0
numpy==1.18.1 numpy==1.18.1
pandas
numpy
pytest-html==3.1.1 pytest-html==3.1.1
pymilvus-orm==0.0.1
git+https://github.com/Projectplace/pytest-tags git+https://github.com/Projectplace/pytest-tags
pymilvus-orm==2.0a1.dev8

View File

@ -51,10 +51,6 @@ class TestCollectionParams(ApiReq):
pytest.skip("skip []") pytest.skip("skip []")
yield request.param yield request.param
@pytest.fixture(scope="function", params=cf.gen_invalid_field_types())
def get_invalid_field_type(self, request):
yield request.param
@pytest.fixture(scope="function", params=cf.gen_all_type_fields()) @pytest.fixture(scope="function", params=cf.gen_all_type_fields())
def get_unsupported_primary_field(self, request): def get_unsupported_primary_field(self, request):
if request.param.dtype == DataType.INT64: if request.param.dtype == DataType.INT64:
@ -120,11 +116,10 @@ class TestCollectionParams(ApiReq):
assert collection.name == dup_collection.name assert collection.name == dup_collection.name
assert collection.schema == dup_collection.schema assert collection.schema == dup_collection.schema
assert collection.num_entities == dup_collection.num_entities assert collection.num_entities == dup_collection.num_entities
assert id(collection) == id(dup_collection)
assert collection.name in self.utility.list_collections() assert collection.name in self.utility.list_collections()
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@pytest.mark.xfail(reason="issue #5231") @pytest.mark.xfail(reason="issue #5367")
def test_collection_dup_name_with_desc(self): def test_collection_dup_name_with_desc(self):
""" """
target: test collection with dup name target: test collection with dup name
@ -194,7 +189,6 @@ class TestCollectionParams(ApiReq):
assert collection.primary_field is None assert collection.primary_field is None
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@pytest.mark.xfail(reason="issue #5304")
def test_collection_dup_name_invalid_schema_type(self, get_invalid_type_schema): def test_collection_dup_name_invalid_schema_type(self, get_invalid_type_schema):
""" """
target: test collection with dup name and invalid schema target: test collection with dup name and invalid schema
@ -223,23 +217,23 @@ class TestCollectionParams(ApiReq):
assert_default_collection(collection) assert_default_collection(collection)
dup_collection, _ = self.collection.collection_init(c_name, schema=default_schema) dup_collection, _ = self.collection.collection_init(c_name, schema=default_schema)
assert_default_collection(dup_collection, c_name) assert_default_collection(dup_collection, c_name)
assert id(collection) == id(dup_collection)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@pytest.mark.xfail(reason="issue #5302") # @pytest.mark.xfail(reason="issue #5302")
def test_collection_dup_name_none_schema_dataframe(self): def test_collection_dup_name_none_schema_dataframe(self):
""" """
target: test collection with dup name and insert dataframe target: test collection with dup name and insert dataframe
method: create collection with dup name, none schema, dataframe method: create collection with dup name, none schema, dataframe
expected: two collection object is correct expected: two collection object is correct
""" """
self._connect() conn = self._connect()
nb = ct.default_nb nb = ct.default_nb
collection = self._collection() collection = self._collection()
c_name = collection.name c_name = collection.name
assert_default_collection(collection) assert_default_collection(collection)
df = cf.gen_default_dataframe_data(nb) df = cf.gen_default_dataframe_data(nb)
dup_collection, _ = self.collection.collection_init(c_name, schema=None, data=df) dup_collection, _ = self.collection.collection_init(c_name, schema=None, data=df)
conn.flush([c_name])
assert_default_collection(dup_collection, c_name, exp_num=nb) assert_default_collection(dup_collection, c_name, exp_num=nb)
assert collection.num_entities == nb assert collection.num_entities == nb
@ -301,7 +295,6 @@ class TestCollectionParams(ApiReq):
log.error(str(ex)) log.error(str(ex))
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@pytest.mark.xfail(reason="issue #5407")
def test_collection_with_unknown_type(self): def test_collection_with_unknown_type(self):
""" """
target: test collection with unknown type target: test collection with unknown type
@ -310,12 +303,8 @@ class TestCollectionParams(ApiReq):
""" """
self._connect() self._connect()
c_name = cf.gen_unique_str(prefix) c_name = cf.gen_unique_str(prefix)
unknown_field = FieldSchema("unknown", DataType.UNKNOWN) with pytest.raises(Exception, match="Field type not support <DataType.UNKNOWN: 999"):
fields = [unknown_field, cf.gen_float_vec_field()] FieldSchema("unknown", DataType.UNKNOWN)
schema = cf.gen_collection_schema(fields=fields)
ex, _ = self.collection.collection_init(c_name, schema=schema)
log.error(str(ex))
# TODO assert
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
def test_collection_invalid_field_name(self, get_invalid_string): def test_collection_invalid_field_name(self, get_invalid_string):
@ -335,22 +324,33 @@ class TestCollectionParams(ApiReq):
assert message_one or message_two or message_three in str(ex) assert message_one or message_two or message_three in str(ex)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@pytest.mark.xfail(reason="issue #5317") @pytest.mark.parametrize("dtype", [6, [[]], {}, (), "", "a"])
def test_collection_invalid_field_type(self, get_invalid_field_type): def test_collection_invalid_field_type(self, dtype):
""" """
target: test collection with invalid field type target: test collection with invalid field type
method: invalid DataType method: invalid DataType
expected: raise exception expected: raise exception
""" """
self._connect() self._connect()
with pytest.raises(Exception, match="Field type not support"):
FieldSchema(name="test", dtype=dtype)
@pytest.mark.xfail(reason="issue #5317")
def test_collection_float_dtype(self):
"""
target: test collection with float dtype
method: create field with float dtype
expected:
"""
self._connect()
c_name = cf.gen_unique_str(prefix) c_name = cf.gen_unique_str(prefix)
field = FieldSchema(name="test", dtype=get_invalid_field_type) field = FieldSchema(name=ct.default_int64_field_name, dtype=5.0)
schema = cf.gen_collection_schema(fields=[field]) vec_field = cf.gen_float_vec_field()
schema = cf.gen_collection_schema(fields=[field, vec_field])
ex, _ = self.collection.collection_init(c_name, schema=schema) ex, _ = self.collection.collection_init(c_name, schema=schema)
assert "Field type must be of DataType" in str(ex) assert "Field type must be of DataType" in str(ex)
@pytest.mark.tags(CaseLabel.L0) @pytest.mark.tags(CaseLabel.L0)
@pytest.mark.xfail(reason="issue #5312")
def test_collection_empty_fields(self): def test_collection_empty_fields(self):
""" """
target: test collection with empty fields target: test collection with empty fields
@ -361,7 +361,7 @@ class TestCollectionParams(ApiReq):
c_name = cf.gen_unique_str(prefix) c_name = cf.gen_unique_str(prefix)
schema = cf.gen_collection_schema(fields=[]) schema = cf.gen_collection_schema(fields=[])
ex, _ = self.collection.collection_init(c_name, schema=schema) ex, _ = self.collection.collection_init(c_name, schema=schema)
# TODO assert assert "The field of the schema cannot be empty" in str(ex)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
def test_collection_dup_field(self): def test_collection_dup_field(self):
@ -392,6 +392,7 @@ class TestCollectionParams(ApiReq):
c_name = cf.gen_unique_str(prefix) c_name = cf.gen_unique_str(prefix)
schema = cf.gen_collection_schema(fields=[field]) schema = cf.gen_collection_schema(fields=[field])
collection, _ = self.collection.collection_init(c_name, schema=schema) collection, _ = self.collection.collection_init(c_name, schema=schema)
log.debug(collection)
assert_default_collection(collection, c_name, exp_schema=schema) assert_default_collection(collection, c_name, exp_schema=schema)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@ -406,8 +407,8 @@ class TestCollectionParams(ApiReq):
c_name = cf.gen_unique_str(prefix) c_name = cf.gen_unique_str(prefix)
fields = [cf.gen_float_vec_field(), cf.gen_float_vec_field(name="tmp")] fields = [cf.gen_float_vec_field(), cf.gen_float_vec_field(name="tmp")]
schema = cf.gen_collection_schema(fields=fields) schema = cf.gen_collection_schema(fields=fields)
ex, _ = self.collection.collection_init(c_name, schema=schema) collection, _ = self.collection.collection_init(c_name, schema=schema)
log.debug(ex) assert_default_collection(collection, c_name, exp_schema=schema)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@pytest.mark.xfail(reason="issue #5345") @pytest.mark.xfail(reason="issue #5345")
@ -421,11 +422,10 @@ class TestCollectionParams(ApiReq):
c_name = cf.gen_unique_str(prefix) c_name = cf.gen_unique_str(prefix)
fields = [cf.gen_float_vec_field(), cf.gen_binary_vec_field()] fields = [cf.gen_float_vec_field(), cf.gen_binary_vec_field()]
schema = cf.gen_collection_schema(fields=fields) schema = cf.gen_collection_schema(fields=fields)
ex, _ = self.collection.collection_init(c_name, schema=schema) collection, _ = self.collection.collection_init(c_name, schema=schema)
log.debug(ex) assert_default_collection(collection, c_name, exp_schema=schema)
@pytest.mark.tags(CaseLabel.L0) @pytest.mark.tags(CaseLabel.L0)
@pytest.mark.xfail(reason="issue #5285")
def test_collection_without_vectors(self): def test_collection_without_vectors(self):
""" """
target: test collection without vectors target: test collection without vectors
@ -436,7 +436,7 @@ class TestCollectionParams(ApiReq):
c_name = cf.gen_unique_str(prefix) c_name = cf.gen_unique_str(prefix)
schema = cf.gen_collection_schema([cf.gen_int64_field()]) schema = cf.gen_collection_schema([cf.gen_int64_field()])
ex, _ = self.collection.collection_init(c_name, schema=schema) ex, _ = self.collection.collection_init(c_name, schema=schema)
assert "must" in str(ex) assert "The schema must have vector column" in str(ex)
@pytest.mark.tags(CaseLabel.L0) @pytest.mark.tags(CaseLabel.L0)
def test_collection_primary_field(self): def test_collection_primary_field(self):
@ -452,6 +452,7 @@ class TestCollectionParams(ApiReq):
assert collection.primary_field.name == ct.default_int64_field_name assert collection.primary_field.name == ct.default_int64_field_name
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@pytest.mark.xfail(reason="issue #5345")
def test_collection_unsupported_primary_field(self, get_unsupported_primary_field): def test_collection_unsupported_primary_field(self, get_unsupported_primary_field):
""" """
target: test collection with unsupported parimary field type target: test collection with unsupported parimary field type
@ -481,7 +482,6 @@ class TestCollectionParams(ApiReq):
assert "there are more than one primary key" in str(ex) assert "there are more than one primary key" in str(ex)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@pytest.mark.xfail(reason="issue #5349")
def test_collection_primary_inconsistent(self): def test_collection_primary_inconsistent(self):
""" """
target: test collection with different primary field setting target: test collection with different primary field setting
@ -494,8 +494,6 @@ class TestCollectionParams(ApiReq):
float_vec_field = cf.gen_float_vec_field(name="vec") float_vec_field = cf.gen_float_vec_field(name="vec")
schema = cf.gen_collection_schema(fields=[int_field, float_vec_field], primary_field="vec") schema = cf.gen_collection_schema(fields=[int_field, float_vec_field], primary_field="vec")
ex, _ = self.collection.collection_init(c_name, schema=schema) ex, _ = self.collection.collection_init(c_name, schema=schema)
log.info(schema)
log.info(ex.primary_field.name)
assert "there are more than one primary key" in str(ex) assert "there are more than one primary key" in str(ex)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@ -661,14 +659,14 @@ class TestCollectionParams(ApiReq):
assert c_name in self.utility.list_collections()[0] assert c_name in self.utility.list_collections()[0]
@pytest.mark.tags(CaseLabel.L0) @pytest.mark.tags(CaseLabel.L0)
@pytest.mark.xfail(reason="issue #5414") # @pytest.mark.xfail(reason="issue #5414")
def test_collection_binary_with_dataframe(self): def test_collection_binary_with_dataframe(self):
""" """
target: test binary collection with dataframe target: test binary collection with dataframe
method: create binary collection with dataframe method: create binary collection with dataframe
expected: collection num entities equal to nb expected: collection num entities equal to nb
""" """
self._connect() conn = self._connect()
nb = ct.default_nb nb = ct.default_nb
c_name = cf.gen_unique_str(prefix) c_name = cf.gen_unique_str(prefix)
data = cf.gen_default_binary_dataframe_data(3) data = cf.gen_default_binary_dataframe_data(3)

View File

@ -223,12 +223,27 @@ class TestInsertParams(ApiReq):
""" """
self._connect() self._connect()
nb = ct.default_nb nb = ct.default_nb
collection = self._collection() self._collection()
df = cf.gen_default_dataframe_data(nb, dim=129) df = cf.gen_default_dataframe_data(nb, dim=129)
ex, _ = self.collection.insert(data=df) ex, _ = self.collection.insert(data=df)
message = "Collection field dim is {},but entities field dim is {}".format(ct.default_dim, 129) message = "Collection field dim is {},but entities field dim is {}".format(ct.default_dim, 129)
assert message in str(ex) assert message in str(ex)
@pytest.mark.tags(CaseLabel.L1)
def test_insert_binary_dim_not_match(self):
"""
target: test insert binary with dim not match
method: insert binary data dim not equal to schema
expected: raise exception
"""
self._connect()
nb = ct.default_nb
self._collection(schema=cf.gen_default_binary_collection_schema())
df = cf.gen_default_binary_dataframe_data(nb, dim=120)
ex, _ = self.collection.insert(data=df)
message = "Collection field dim is {},but entities field dim is {}".format(ct.default_dim, 129)
assert message in str(ex)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
@pytest.mark.xfail(reason="issue #5499") @pytest.mark.xfail(reason="issue #5499")
def test_insert_field_name_not_match(self): def test_insert_field_name_not_match(self):