def test_delete_application_api(self, client): PrePipeline().delete({'name': self.pipeline_name}) PreOperator().delete({'name': self.op_name}) rv = client.delete(f"/v1/application/{self.name}") assert rv.status_code == 200 # delete none exist application rv = client.delete(f"/v1/application/{self.name}") assert rv.status_code != 200 shutil.rmtree('./tmp', ignore_errors=True)
def test_create_and_delete_api(self, client): # create app data = { 'fields': { self.field_name: { 'type': 'pipeline', 'value': self.pipeline_name } }, 's3Bucket': f"s3example{self.test_ver}" } rv = client.post(f'/v1/application/{self.name}', json=data) json_data = rv.get_json() assert rv.status_code == 200 assert json_data['name'] == self.name rv = client.get(f"/v1/application/{self.name}") assert rv.status_code == 200 # upload none filed data = {'fields': {}} rv = client.post(f"/v1/application/{self.name}/upload", json=data) assert rv.status_code != 200 # # upload nonexist filed # data = { # 'fields': { # "nonexist": { # "url": self.test_url # } # } # } # rv = client.post(f"/v1/application/{self.name}/upload", json=data) # assert rv.status_code != 200 # upload nonexist filed data = {'fields': {self.field_name: {}}} rv = client.post(f"/v1/application/{self.name}/upload", json=data) assert rv.status_code != 200 # delete app data = {"force": True} rv = client.delete(f"/v1/application/{self.name}", json=data) assert rv.status_code == 200 # delete none exist application rv = client.delete(f"/v1/application/{self.name}") assert rv.status_code != 200 # upload nonexist app data = {'fields': {self.field_name: {'url': self.test_url}}} rv = client.post(f"/v1/application/{'notexist'}/upload", json=data) assert rv.status_code != 200
def test_entities_api(self, client): rv = client.get(f"/v1/application/{self.name}/entity") assert rv.status_code == 200 json_data = rv.get_json() for data in json_data: reply = client.delete( f"/v1/application/{self.name}/entity/{data['_id']}") assert reply.status_code == 200 json_reply = reply.get_json() assert json_reply['_id'] == data['_id'] # delete none exist entity reply = client.delete(f"/v1/application/{self.name}/entity/-1") assert reply.status_code != 200
def test_score_api(self, client): for image_url in self.test_url: data = { 'fields': { self.field_name1: { 'url': image_url }, self.field_name2: { 'url': image_url } } } rv = client.post(f"/v1/application/{self.name}1/upload", json=data) assert rv.status_code == 200 time.sleep(1) # wait for milvus # test multi field score function topk = len(self.test_url) - 1 for score_mode in self.score_modes: data = { 'fields': { self.field_name1: { 'url': self.test_search_url[0], 'inner_field_score_mode': 'first', 'weight': 6 }, self.field_name2: { 'url': self.test_search_url[1], 'inner_field_score_mode': 'random', 'weight': 2 }, "score_mode": score_mode }, 'topk': topk, 'nprobe': 10 } rv = client.post(f"/v1/application/{self.name}1/search", json=data) assert rv.status_code == 200 json_data = rv.get_json() assert len(json_data) == topk # get and delete all entities rv = client.get(f"/v1/application/{self.name}1/entity?num=100") assert rv.status_code == 200 json_data = rv.get_json() for data in json_data: reply = client.delete( f"/v1/application/{self.name}1/entity/{data['_id']}") assert reply.status_code == 200 json_reply = reply.get_json() assert json_reply['_id'] == data['_id']
def test_delete_operator(self, client): rv = client.delete(f"/v1/operator/{self.name}") assert rv.status_code == 200
def test_delete_instance(self, client): rv = client.delete( f'/v1/operator/{self.name}/instances/{self.instance_name}') assert rv.status_code == 200
def test_error_operator(self, client): rv = client.get(f"/v1/operator/{self.name}") assert rv.status_code != 200 rv = client.delete(f"/v1/operator/{self.name}") assert rv.status_code != 200
def test_pipeline_error_api(self, client): rv = client.delete(f"/v1/pipeline/{self.name}") assert rv.status_code != 200 rv = client.post(f"/v1/pipeline/{self.name}/test") assert rv.status_code != 200
def test_delete_pipeline_api(self, client): rv = client.delete(f"/v1/pipeline/{self.name}") assert rv.status_code == 200
def test_application_other_api(self, client): # upload error url image data = {'fields': {self.field_name: {'url': self.test_url[:3]}}} rv = client.post(f"/v1/application/{self.name}1/upload", json=data) assert rv.status_code != 200 # upload error base64 image base_txt = os.path.join(os.path.dirname(__file__), 'base64.txt') with open(base_txt, 'r') as file: base_data = file.readline() data = {'fields': {self.field_name: {'data': base_data[:10]}}} rv = client.post(f"/v1/application/{self.name}1/upload", json=data) assert rv.status_code != 200 time.sleep(1) # wait for milvus # upload url image data = {'fields': {self.field_name: {'url': self.test_url}}} rv = client.post(f"/v1/application/{self.name}1/upload", json=data) assert rv.status_code == 200 # upload base64 image base_txt = os.path.join(os.path.dirname(__file__), 'base64.txt') with open(base_txt, 'r') as file: base_data = file.readline() data = {'fields': {self.field_name: {'data': base_data}}} rv = client.post(f"/v1/application/{self.name}1/upload", json=data) assert rv.status_code == 200 time.sleep(1) # wait for milvus # count entity rv = client.get(f"/v1/application/{self.name}1/entity/count") assert rv.status_code == 200 # search data = { 'fields': { self.field_name: { 'url': self.test_url } }, 'topk': 5, 'nprobe': 10 } rv = client.post(f"/v1/application/{self.name}1/search", json=data) assert rv.status_code == 200 # search score function data = { 'fields': { self.field_name: { 'url': self.test_url, 'inner_field_score_mode': 'first' } }, 'topk': 5, 'nprobe': 10 } rv = client.post(f"/v1/application/{self.name}1/search", json=data) assert rv.status_code == 200 data = { 'fields': { self.field_name: { 'url': self.test_url, 'inner_field_score_mode': 'wrong_mode' } }, 'topk': 5, 'nprobe': 10 } rv = client.post(f"/v1/application/{self.name}1/search", json=data) assert rv.status_code != 200 # detele unempty app rv = client.delete(f"/v1/application/{self.name}1") assert rv.status_code != 200 # get all entities and delete all rv = client.get(f"/v1/application/{self.name}1/entity?num=4&page=101") assert rv.status_code == 200 json_data = rv.get_json() assert len(json_data) == 0 rv = client.get(f"/v1/application/{self.name}1/entity?num=4&page=0") assert rv.status_code == 200 json_data = rv.get_json() assert len(json_data) == 2 for data in json_data: reply = client.delete( f"/v1/application/{self.name}1/entity/{data['_id']}") assert reply.status_code == 200 json_reply = reply.get_json() assert json_reply['_id'] == data['_id'] # delete none exist entity reply = client.delete(f"/v1/application/{self.name}1/entity/-1") assert reply.status_code != 200
def test_inner_field_score_api(self, client): for image_url in self.test_url: data = { 'fields': { self.field_name2: { 'url': image_url } } } rv = client.post(f"/v1/application/{self.name}/upload", json=data) assert rv.status_code == 200 time.sleep(1) # wait for milvus # search in empty milvus collection data = { 'fields': { self.field_name1: { 'url': self.test_search_url[0], 'inner_field_score_mode': "first" } }, 'topk': 3, 'nprobe': 10 } rv = client.post(f"/v1/application/{self.name}/search", json=data) assert rv.status_code != 200 # search with nonexist field data = { 'fields': { "wrong_field": { 'url': self.test_search_url[0], 'inner_field_score_mode': "first" } }, 'topk': 3, 'nprobe': 10 } rv = client.post(f"/v1/application/{self.name}/search", json=data) assert rv.status_code != 200 # test inner filed score mode search for inner_field_score_mode in self.inner_fields: data = { 'fields': { self.field_name2: { 'url': self.test_search_url[0], 'inner_field_score_mode': inner_field_score_mode } }, 'topk': 3, 'nprobe': 10 } rv = client.post(f"/v1/application/{self.name}/search", json=data) assert rv.status_code == 200 json_data = rv.get_json() assert len(json_data) == 3 # test score function insufficent topk search topk = len(self.test_url) * 10 for inner_field_score_mode in self.inner_fields: data = { 'fields': { self.field_name2: { 'url': self.test_search_url[0], 'inner_field_score_mode': inner_field_score_mode } }, 'topk': topk, 'nprobe': 10 } rv = client.post(f"/v1/application/{self.name}/search", json=data) assert rv.status_code == 200 json_data = rv.get_json() assert len(json_data) > 0 assert len(json_data) < topk # get and delete all entities rv = client.get(f"/v1/application/{self.name}/entity?num=100") assert rv.status_code == 200 json_data = rv.get_json() for data in json_data: reply = client.delete( f"/v1/application/{self.name}/entity/{data['_id']}") assert reply.status_code == 200 json_reply = reply.get_json() assert json_reply['_id'] == data['_id']