@@ -3666,3 +3666,84 @@ async def test_unregister_dangling_service(
36663666 )
36673667 # Verify that register_service was called twice (first failed, then succeeded)
36683668 assert client_mock .register_service .call_count == 2
3669+
3670+ @pytest .mark .asyncio
3671+ async def test_return_error_if_default_gateway_forbids_new_services (
3672+ self ,
3673+ test_db ,
3674+ session : AsyncSession ,
3675+ client : AsyncClient ,
3676+ ) -> None :
3677+ user = await create_user (session = session , global_role = GlobalRole .USER )
3678+ project = await create_project (session = session , owner = user , name = "test-project" )
3679+ await add_project_member (
3680+ session = session , project = project , user = user , project_role = ProjectRole .USER
3681+ )
3682+ repo = await create_repo (session = session , project_id = project .id )
3683+ backend = await create_backend (session = session , project_id = project .id )
3684+ gateway_compute = await create_gateway_compute (session = session , backend_id = backend .id )
3685+ gateway = await create_gateway (
3686+ session = session ,
3687+ project_id = project .id ,
3688+ backend_id = backend .id ,
3689+ gateway_compute_id = gateway_compute .id ,
3690+ status = GatewayStatus .RUNNING ,
3691+ wildcard_domain = "example.com" ,
3692+ forbid_new_services = True ,
3693+ )
3694+ project .default_gateway_id = gateway .id
3695+ await session .commit ()
3696+
3697+ response = await client .post (
3698+ "/api/project/test-project/runs/submit" ,
3699+ headers = get_auth_headers (user .token ),
3700+ json = {"run_spec" : get_service_run_spec (repo_id = repo .name , run_name = "test-service" )},
3701+ )
3702+
3703+ assert response .status_code == 400
3704+ assert response .json () == {
3705+ "detail" : [{"msg" : "Gateway does not accept new services" , "code" : "error" }]
3706+ }
3707+
3708+ @pytest .mark .asyncio
3709+ async def test_return_error_if_explicitly_specified_gateway_forbids_new_services (
3710+ self ,
3711+ test_db ,
3712+ session : AsyncSession ,
3713+ client : AsyncClient ,
3714+ ) -> None :
3715+ user = await create_user (session = session , global_role = GlobalRole .USER )
3716+ project = await create_project (session = session , owner = user , name = "test-project" )
3717+ await add_project_member (
3718+ session = session , project = project , user = user , project_role = ProjectRole .USER
3719+ )
3720+ repo = await create_repo (session = session , project_id = project .id )
3721+ backend = await create_backend (session = session , project_id = project .id )
3722+ gateway_compute = await create_gateway_compute (session = session , backend_id = backend .id )
3723+ await create_gateway (
3724+ session = session ,
3725+ project_id = project .id ,
3726+ backend_id = backend .id ,
3727+ gateway_compute_id = gateway_compute .id ,
3728+ status = GatewayStatus .RUNNING ,
3729+ name = "restricted-gateway" ,
3730+ wildcard_domain = "example.com" ,
3731+ forbid_new_services = True ,
3732+ )
3733+
3734+ response = await client .post (
3735+ "/api/project/test-project/runs/submit" ,
3736+ headers = get_auth_headers (user .token ),
3737+ json = {
3738+ "run_spec" : get_service_run_spec (
3739+ repo_id = repo .name ,
3740+ run_name = "test-service" ,
3741+ gateway = "restricted-gateway" ,
3742+ )
3743+ },
3744+ )
3745+
3746+ assert response .status_code == 400
3747+ assert response .json () == {
3748+ "detail" : [{"msg" : "Gateway does not accept new services" , "code" : "error" }]
3749+ }
0 commit comments