@@ -516,6 +516,11 @@ TEST(resolve_budget_override_when_total_unknown) {
516516 PASS ();
517517}
518518
519+ /* CBM_MEM_BUDGET_MB is an aggregate ceiling the parent divides across job
520+ * slots. A lower explicit value still wins; a raise is clipped to the per-slot
521+ * share so N workers cannot oversubscribe the host (#1654). The source stays
522+ * CBM_MEM_BUDGET_MB so the clip is the user's aggregate, not a silent
523+ * daemon_worker_cap rewrite of a fraction-derived default. */
519524TEST (resolve_budget_worker_cap_preserves_lower_user_override ) {
520525 size_t total = 8192 * CBM_TEST_MB ;
521526 size_t worker_cap = 16 * CBM_TEST_MB ;
@@ -524,10 +529,15 @@ TEST(resolve_budget_worker_cap_preserves_lower_user_override) {
524529 ASSERT_STR_EQ (lower .source , "CBM_MEM_BUDGET_MB" );
525530 ASSERT_FALSE (lower .hard_capped );
526531
527- cbm_mem_budget_t capped = cbm_mem_resolve_budget_capped (total , 0.5 , "64" , worker_cap );
528- ASSERT_EQ (capped .budget , worker_cap );
529- ASSERT_STR_EQ (capped .source , "daemon_worker_cap" );
530- ASSERT_TRUE (capped .hard_capped );
532+ cbm_mem_budget_t raised = cbm_mem_resolve_budget_capped (total , 0.5 , "64" , worker_cap );
533+ ASSERT_EQ (raised .budget , worker_cap );
534+ ASSERT_STR_EQ (raised .source , "CBM_MEM_BUDGET_MB" );
535+ ASSERT_TRUE (raised .hard_capped );
536+
537+ cbm_mem_budget_t fraction = cbm_mem_resolve_budget_capped (total , 0.5 , NULL , worker_cap );
538+ ASSERT_EQ (fraction .budget , worker_cap );
539+ ASSERT_STR_EQ (fraction .source , "daemon_worker_cap" );
540+ ASSERT_TRUE (fraction .hard_capped );
531541 PASS ();
532542}
533543
0 commit comments