Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
    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']
Ejemplo n.º 4
0
 def test_application_detail_api(self, client):
     rv = client.get(f"/v1/application/{self.name}")
     assert rv.status_code == 200
Ejemplo n.º 5
0
 def test_list_application_api(self, client):
     rv = client.get("/v1/application/")
     assert rv.status_code == 200
Ejemplo n.º 6
0
 def test_operator_health(self, client):
     rv = client.get(f"/v1/operator/{self.name}/health")
     assert rv.status_code == 200
Ejemplo n.º 7
0
 def test_operator_list(self, client):
     rv = client.get("/v1/operator/")
     assert rv.status_code == 200
Ejemplo n.º 8
0
 def test_opreator_detail(self, client):
     rv = client.get(f"/v1/operator/{self.name}")
     assert rv.status_code == 200
Ejemplo n.º 9
0
 def test_list_instacne(self, client):
     rv = client.get(f'/v1/operator/{self.name}/instances')
     assert len(rv.get_json()) == 1
Ejemplo n.º 10
0
    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
Ejemplo n.º 11
0
 def test_pipeline_detail_api(self, client):
     rv = client.get(f"/v1/pipeline/{self.name}")
     assert rv.status_code == 200
     # query none exist pipeline
     rv = client.get("/v1/pipeline/none_exist_pipeline")
     assert rv.status_code != 200
Ejemplo n.º 12
0
 def test_list_pipeline_api(self, client):
     rv = client.get("/v1/pipeline/")
     assert rv.status_code == 200
Ejemplo n.º 13
0
    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
Ejemplo n.º 14
0
 def test_list_instacne(self, client):
     rv = client.get(f'/v1/operator/{self.name}/instances')
     assert rv.status_code == 200
Ejemplo n.º 15
0
    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']
Ejemplo n.º 16
0
def test_get_pipeline(client):
    rv = client.get("/v1/pipeline/")
    assert rv.status_code == 200