Skip to content
Snippets Groups Projects
test_api.py 1.81 KiB
Newer Older
from multiprocessing import Process
import requests
import unittest

from conf.testing import czifile, output_path
from model_server.model import DummyImageToImageModel

class TestApiFromAutomatedClient(unittest.TestCase):
    def setUp(self) -> None:
        import uvicorn
        host = '127.0.0.1'
        port = 5000

        self.server_process = Process(
            target=uvicorn.run,
            args=('api:app', ),
            kwargs={'host': host, 'port': port, 'log_level': 'info'},
            daemon=True
        )
        self.uri = f'http://{host}:{port}/'
        self.server_process.start()

    def tearDown(self) -> None:
        self.server_process.terminate()

    def test_trivial_api_response(self):
        resp = requests.get(self.uri, )
        self.assertEqual(resp.status_code, 200)

    def test_list_empty_loaded_models(self):
        resp = requests.get(self.uri + 'models')
        self.assertEqual(resp.status_code, 200)
        self.assertEqual(resp.content, b'{}')
        model_id = DummyImageToImageModel.model_id
        resp = requests.get(self.uri + f'models/{model_id}/load')
        self.assertEqual(resp.status_code, 200)
        loaded = requests.get(self.uri + 'models')
        self.assertEqual(loaded.content, b'{"model_id":"DummyImageToImageModel"}')

    def test_i2i_inference_errors_model_not_sound(self):
        model_id = 'not_a_real_model'
        resp = requests.post(self.uri + f'i2i/infer/{model_id}')
        self.assertEqual(resp.status_code, 404)

    def test_i2i_dummy_inference_by_api(self):
        model = DummyImageToImageModel()
        model_id = model.model_id
        resp = requests.post(
            self.uri + f'/i2i/infer/{model_id}',
            str(czifile['path']),
        )
        print(resp)
        self.assertEqual(resp.status_code, 200)