### Question:
ManagedScheduledExecutorServiceImpl extends AbstractManagedExecutorService implements ManagedScheduledExecutorService { @Override public synchronized ManagedScheduledFutureTask<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit) { ScheduledTask<?> task = getNewScheduledTaskFor(command, true); ScheduledFuture<?> future = ((ScheduledExecutorService) executor).scheduleWithFixedDelay(task.asRunnable(), initialDelay, delay, unit); task.submittedScheduledTask(future); return task; } ManagedScheduledExecutorServiceImpl(String name, Configuration configuration,
                                               List<ExecutionContextService> ecs);  ManagedScheduledExecutorServiceImpl(
            String name,
            ThreadType tu,
            long hungTime,
            int coreSize,
            int priority,
            List<ExecutionContextService> ecs); @Override synchronized ManagedScheduledFutureTask<V> schedule(Callable<V> callable, long delay, TimeUnit unit); @Override synchronized ManagedScheduledFutureTask<?> schedule(Runnable command, long delay, TimeUnit unit); @Override synchronized ManagedScheduledFutureTask<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit); @Override synchronized ManagedScheduledFutureTask<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit);  }### Answer:
@Test public void testCreationOfPeriodicTaskWithFixedDelay() throws ExecutionException, InterruptedException { Semaphore semaphore = new Semaphore(0); ManagedScheduledFutureTask<?> future = executor.scheduleWithFixedDelay(new MyRunnable(4, semaphore), 10, 10, TimeUnit.MILLISECONDS); assertThat(future).isNotNull(); semaphore.acquire(); future.cancel(false); assertThat(counter.get()).isGreaterThanOrEqualTo(4); assertThat(future.getDelay(TimeUnit.MILLISECONDS)).isLessThanOrEqualTo(10); assertThat(future.isPeriodic()).isTrue(); assertThat(executor.getCompletedTaskCount()).isBetween(2l, 5l); }