@@ -341,6 +341,45 @@ async def test_register_rejects_unsupported_worker_protocol_version(self, mock_c
341341 await worker ._register ()
342342 mock_client .register_worker .assert_not_called ()
343343
344+ @pytest .mark .asyncio
345+ async def test_register_rejects_worker_protocol_below_payload_codec_floor (
346+ self , mock_client : AsyncMock
347+ ) -> None :
348+ mock_client .get_cluster_info = AsyncMock (
349+ return_value = compatible_cluster_info (worker_protocol = {"version" : "1.0" })
350+ )
351+ worker = Worker (mock_client , task_queue = "q1" , workflows = [TestWorkflow ], activities = [])
352+ with pytest .raises (RuntimeError , match = "requires '1.1'" ):
353+ await worker ._register ()
354+ mock_client .register_worker .assert_not_called ()
355+
356+ @pytest .mark .asyncio
357+ async def test_register_accepts_protocol_1_1_when_newer_feature_floor_is_unavailable (
358+ self , mock_client : AsyncMock
359+ ) -> None :
360+ mock_client .get_cluster_info = AsyncMock (
361+ return_value = compatible_cluster_info (
362+ worker_protocol = {
363+ "version" : PROTOCOL_VERSION ,
364+ "server_capabilities" : {
365+ "query_tasks" : True ,
366+ "worker_session_verbs" : [],
367+ "worker_sessions" : {
368+ "feature" : "worker_sessions" ,
369+ "supported" : False ,
370+ "minimum_protocol_version" : "1.2" ,
371+ "unavailable_reason" : "worker_protocol_version_below_worker_session_minimum" ,
372+ },
373+ },
374+ }
375+ )
376+ )
377+ worker = Worker (mock_client , task_queue = "q1" , workflows = [TestWorkflow ], activities = [])
378+
379+ await worker ._register ()
380+
381+ mock_client .register_worker .assert_awaited_once ()
382+
344383 @pytest .mark .asyncio
345384 async def test_register_rejects_missing_auth_composition_contract (self , mock_client : AsyncMock ) -> None :
346385 mock_client .get_cluster_info = AsyncMock (return_value = compatible_cluster_info (auth_composition_contract = None ))
0 commit comments