@Test
public void testBuildQuotaControllers() {

    testBuildQuotaControllers(
            scheduleJob(
                    newBatchJob(10, budget(perTaskRelocationLimitPolicy(3), unlimitedRate(), Collections.emptyList())),
                    10
            ),
            SelfJobDisruptionBudgetResolver.getInstance(),
            TaskRelocationLimitController.class
    );
    testBuildQuotaControllers(
            scheduleJob(
                    newBatchJob(10, budget(perTaskRelocationLimitPolicy(3), hourlyRatePercentage(5), Collections.emptyList())),
                    10
            ),
            SelfJobDisruptionBudgetResolver.getInstance(),
            JobPercentagePerHourRelocationRateController.class, TaskRelocationLimitController.class
    );
    testBuildQuotaControllers(
            scheduleJob(
                    newBatchJob(10, budget(perTaskRelocationLimitPolicy(3), ratePerInterval(60_000, 5), Collections.emptyList())),
                    10
            ),
            SelfJobDisruptionBudgetResolver.getInstance(),
            RatePerIntervalRateController.class, TaskRelocationLimitController.class
    );
    testBuildQuotaControllers(
            scheduleJob(
                    newBatchJob(10, budget(selfManagedPolicy(10_000), unlimitedRate(), Collections.emptyList())),
                    10
            ),
            job -> budget(perTaskRelocationLimitPolicy(100), hourlyRatePercentage(5), singletonList(officeHourTimeWindow())),
            TaskRelocationLimitController.class, JobPercentagePerHourRelocationRateController.class
    );
}