1+ import pytest
2+ import requests
3+ from utils .test_runner import start_server , stop_server
4+ import jsonschema
5+ from tenacity import retry , wait_exponential , stop_after_attempt
6+ from utils .logger import log_response
7+ from utils .assertion import assert_equal
8+
9+
10+ class TestApiDefaultEngine :
11+
12+ @pytest .fixture (autouse = True )
13+ def setup_and_teardown (self ):
14+ # Setup
15+ success = start_server ()
16+ if not success :
17+ raise Exception ("Failed to start server" )
18+
19+ yield
20+
21+ # Teardown
22+ stop_server ()
23+
24+ def test_api_get_default_engine_successfully (self ):
25+ # Data test
26+ engine = "llama-cpp"
27+ name = "linux-amd64-avx-cuda-11-7"
28+ version = "v0.1.35-27.10.24"
29+
30+ data = {"version" : version , "variant" : name }
31+ post_install_url = f"http://localhost:3928/v1/engines/{ engine } /install"
32+ response = requests .post (
33+ post_install_url , json = data
34+ )
35+ assert_equal (response .status_code ,200 )
36+
37+ get_list_url = f"http://localhost:3928/v1/engines/{ engine } "
38+ get_default_url = f"http://localhost:3928/v1/engines/{ engine } /default"
39+
40+ @retry (
41+ wait = wait_exponential (multiplier = 2 , min = 2 , max = 30 ),
42+ stop = stop_after_attempt (5 )
43+ )
44+ def get_request (url ):
45+ response = requests .get (url )
46+ assert len (response .json ()) > 0
47+
48+ get_request (get_list_url )
49+
50+ response_default_engine = requests .get (get_default_url )
51+ json_data = response_default_engine .json ()
52+
53+ log_response (json_data , "test_api_get_default_engine_successfully" )
54+ assert_equal (response_default_engine .status_code , 200 )
55+
56+ schema = {
57+ "type" : "object" ,
58+ "properties" : {
59+ "engine" : {"type" : "string" },
60+ "variant" : {"type" : "string" },
61+ "version" : {"type" : "string" }
62+ },
63+ "required" : ["engine" , "variant" , "version" ]
64+ }
65+
66+ # Validate response schema
67+ jsonschema .validate (instance = json_data , schema = schema )
68+
69+ assert_equal (json_data ["engine" ], engine )
70+ assert_equal (json_data ["version" ], version )
71+ assert_equal (json_data ["variant" ], name )
72+
73+ def test_api_get_default_engine_successfully (self ):
74+ # Data test
75+ engine = "invalid"
76+
77+ get_default_url = f"http://localhost:3928/v1/engines/{ engine } /default"
78+
79+ response_default_engine = requests .get (get_default_url )
80+ json_data_get_default = response_default_engine .json ()
81+
82+ log_response (json_data_get_default , "test_api_get_default_engine_successfully" )
83+ assert_equal (response_default_engine .status_code , 400 )
84+
85+ assert_equal (json_data_get_default ["message" ], f"Engine { engine } is not supported yet!" )
0 commit comments