Add test alias case for calling function (#8690)

Signed-off-by: zhuwenxing <wenxing.zhu@zilliz.com>
pull/8713/head
zhuwenxing 2021-09-27 19:26:02 +08:00 committed by GitHub
parent 99b08a53df
commit 40d2490bb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 127 additions and 12 deletions

View File

@ -5,6 +5,7 @@ numpy==1.19.5
pytest-cov==2.8.1 pytest-cov==2.8.1
sklearn==0.0 sklearn==0.0
pytest==6.2.2 pytest==6.2.2
pytest-assume==2.4.3
pytest-timeout==1.3.3 pytest-timeout==1.3.3
pytest-repeat==0.8.0 pytest-repeat==0.8.0
allure-pytest==2.7.0 allure-pytest==2.7.0

View File

@ -1,7 +1,8 @@
from typing import Collection
import pytest import pytest
import random
from base.client_base import TestcaseBase from base.client_base import TestcaseBase
from utils.util_log import test_log as log
from common import common_func as cf from common import common_func as cf
from common import common_type as ct from common import common_type as ct
from common.common_type import CaseLabel, CheckTasks from common.common_type import CaseLabel, CheckTasks
@ -155,8 +156,8 @@ class TestAliasOperation(TestcaseBase):
2.collection create a alias 2.collection create a alias
3.collection drop the alias 3.collection drop the alias
expected: expected:
in step 2, collection is equal to alias after step 2, collection is equal to alias
in step 3, collection with alias name is exist after step 3, collection with alias name is not exist
""" """
self._connect() self._connect()
c_name = cf.gen_unique_str("collection") c_name = cf.gen_unique_str("collection")
@ -184,15 +185,27 @@ class TestAliasOperation(TestcaseBase):
check_items=error) check_items=error)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
def test_alias_insert_data_default(self): @pytest.mark.xfail(reason="issue #8614: can't use alias to create index")
def test_alias_exec_operations_as_collection(self):
""" """
target: test alias inserting data target: test alias
method: 1.creating partition,
1.create a collection with alias 2.inserting data,
2.collection insert data by alias 3.creating index,
expected: inserting data by alias can work and the result is same as inserting data directly 4.loading collection,
5.searching,
6.releasing collection,
method: follow the steps in target
expected: all steps operated by alias can work
""" """
create_partition_flag = True
insert_data_flag = True
create_index_flag = True
load_collection_flag = True
search_flag = True
release_collection_flag = True
self._connect() self._connect()
c_name = cf.gen_unique_str("collection") c_name = cf.gen_unique_str("collection")
collection_w = self.init_collection_wrap(name=c_name, schema=default_schema, collection_w = self.init_collection_wrap(name=c_name, schema=default_schema,
@ -203,11 +216,89 @@ class TestAliasOperation(TestcaseBase):
collection_alias, _ = self.collection_wrap.init_collection(name=alias_name, collection_alias, _ = self.collection_wrap.init_collection(name=alias_name,
check_task=CheckTasks.check_collection_property, check_task=CheckTasks.check_collection_property,
check_items={exp_name: alias_name, exp_schema: default_schema}) check_items={exp_name: alias_name, exp_schema: default_schema})
df = cf.gen_default_dataframe_data(ct.default_nb)
collection_alias.insert(data=df)
assert collection_w.num_entities == ct.default_nb # create partition by alias
assert collection_alias.num_entities == ct.default_nb partition_name = cf.gen_unique_str("partition")
try:
collection_alias.create_partition(partition_name)
except Exception as e:
log.info(f"alias create partition failed with exception {e}")
create_partition_flag = False
collection_w.create_partition(partition_name)
# assert partition
pytest.assume(create_partition_flag == True and
[p.name for p in collection_alias.partitions] == [p.name for p in collection_w.partitions])
# insert data by alias
df = cf.gen_default_dataframe_data(ct.default_nb)
try:
collection_alias.insert(data=df)
except Exception as e:
log.info(f"alias insert data failed with exception {e}")
insert_data_flag = False
collection_w.insert(data=df)
# assert insert data
pytest.assume(insert_data_flag == True and
collection_alias.num_entities == ct.default_nb and
collection_w.num_entities == ct.default_nb)
# create index by alias
default_index = {"index_type": "IVF_FLAT", "params": {"nlist": 128}, "metric_type": "L2"}
try:
collection_alias.create_index(field_name="float_vector", index_params=default_index)
except Exception as e:
log.info(f"alias create index failed with exception {e}")
create_index_flag = False
collection_w.create_index(field_name="float_vector", index_params=default_index)
# assert create index
pytest.assume(create_index_flag == True and
collection_alias.has_index == True and
collection_w.has_index()[0] == True)
# load by alias
try:
collection_alias.load()
except Exception as e:
log.info(f"alias load collection failed with exception {e}")
load_collection_flag = False
collection_w.load()
# assert load
pytest.assume(load_collection_flag == True)
# search by alias
topK = 5
search_params = {"metric_type": "L2", "params": {"nprobe": 10}}
query = [[random.random() for _ in range(ct.default_dim)] for _ in range(1)]
try:
alias_res = collection_alias.search(
query, "float_vector", search_params, topK,
"int64 >= 0", output_fields=["int64"]
)
except Exception as e:
log.info(f"alias search failed with exception {e}")
search_flag = False
collection_res, _ = collection_w.search(
query, "float_vector", search_params, topK,
"int64 >= 0", output_fields=["int64"]
)
# assert search
pytest.assume(search_flag == True and alias_res[0].ids == collection_res[0].ids)
# release by alias
try:
collection_alias.release()
except Exception as e:
log.info(f"alias release failed with exception {e}")
release_collection_flag = False
collection_w.release()
# assert release
pytest.assume(release_collection_flag == True)
@pytest.mark.tags(CaseLabel.L1) @pytest.mark.tags(CaseLabel.L1)
def test_alias_create_index_default(self, nq=2, dim=8, auto_id=True): def test_alias_create_index_default(self, nq=2, dim=8, auto_id=True):
@ -364,3 +455,26 @@ class TestAliasOperationInvalid(TestcaseBase):
self.init_collection_wrap(alias_name, schema=default_binary_schema, self.init_collection_wrap(alias_name, schema=default_binary_schema,
check_task=CheckTasks.err_res, check_task=CheckTasks.err_res,
check_items=error) check_items=error)
def test_alias_drop_collection_by_alias(self):
"""
target: test dropping a collection by alias
method:
1.create a collection with alias
2.drop a collection by alias
expected: in step 2, drop collection by alias failed by design
"""
self._connect()
c_name = cf.gen_unique_str("collection")
collection_w = self.init_collection_wrap(name=c_name, schema=default_schema,
check_task=CheckTasks.check_collection_property,
check_items={exp_name: c_name, exp_schema: default_schema})
alias_name = cf.gen_unique_str(prefix)
collection_w.create_alias(alias_name)
collection_alias, _ = self.collection_wrap.init_collection(name=alias_name,
check_task=CheckTasks.check_collection_property,
check_items={exp_name: alias_name, exp_schema: default_schema})
with pytest.raises(Exception):
collection_alias.drop()