diff --git a/test/registered/unit/disaggregation/test_kv_transfer_replica_metric.py b/test/registered/unit/disaggregation/test_kv_transfer_replica_metric.py index ed17cc085..0d167a4f9 100644 --- a/test/registered/unit/disaggregation/test_kv_transfer_replica_metric.py +++ b/test/registered/unit/disaggregation/test_kv_transfer_replica_metric.py @@ -45,9 +45,23 @@ def _make_kv_mgr(is_mla_backend): return mgr +class _ConcreteKVSender(CommonKVSender): + """CommonKVSender is abstract: `poll` and `failure_exception` are backend + duties, so it cannot be instantiated (not even via __new__, which enforces + ABC completeness). This stub supplies them so the shared metric path can be + exercised without pulling in a transfer backend. + """ + + def poll(self): + raise NotImplementedError + + def failure_exception(self): + raise NotImplementedError + + def _make_sender(kv_mgr): """CommonKVSender bypassing __init__, wiring only the fields the path reads.""" - sender = CommonKVSender.__new__(CommonKVSender) + sender = _ConcreteKVSender.__new__(_ConcreteKVSender) sender._transfer_metric = KVTransferMetric() sender._transfer_num_kv_indices = 0 sender._transfer_num_state_indices = 0