DirectTimerInternals implements TimerInternals { @Override public @Nullable Instant currentSynchronizedProcessingTime() { return watermarks.getSynchronizedProcessingInputTime(); } private  DirectTimerInternals(
      Clock clock, TransformWatermarks watermarks, TimerUpdateBuilder timerUpdateBuilder); static DirectTimerInternals create(
      Clock clock, TransformWatermarks watermarks, TimerUpdateBuilder timerUpdateBuilder); @Override void setTimer(
      StateNamespace namespace,
      String timerId,
      String timerFamilyId,
      Instant target,
      Instant outputTimestamp,
      TimeDomain timeDomain); @Deprecated @Override void setTimer(TimerData timerData); @Override void deleteTimer(StateNamespace namespace, String timerId, TimeDomain timeDomain); @Deprecated @Override void deleteTimer(StateNamespace namespace, String timerId, String timerFamilyId); @Deprecated @Override void deleteTimer(TimerData timerKey); TimerUpdate getTimerUpdate(); boolean containsUpdateForTimeBefore(Instant time); @Override Instant currentProcessingTime(); @Override @Nullable Instant currentSynchronizedProcessingTime(); @Override Instant currentInputWatermarkTime(); @Override @Nullable Instant currentOutputWatermarkTime();  }
@Test public void getSynchronizedProcessingTimeIsWatermarkSynchronizedInputTime() { when(watermarks.getSynchronizedProcessingInputTime()).thenReturn(new Instant(12345L)); assertThat(internals.currentSynchronizedProcessingTime(), equalTo(new Instant(12345L))); }