void activate() { if (!CloudSdkServiceUserSettings.getInstance().isAutomaticUpdateEnabled()) { return; } if (updateTimer == null) { updateTimer = new Timer(SDK_UPDATER_THREAD_NAME); } // cancel tasks from previous activation. if (sdkUpdateTask != null) { sdkUpdateTask.cancel(); } sdkUpdateTask = new TimerTask() { @Override public void run() { doUpdate(); } }; schedule(sdkUpdateTask, getDelayBeforeFirstUpdate(), SDK_UPDATE_INTERVAL_MS); }
@Test public void update_scheduledOnShorterTime_ifLastUpdate_fartherInterval() { CloudSdkServiceUserSettings.getInstance().setLastAutomaticUpdateTimestamp(1); when(mockClock.millis()).thenReturn(ManagedCloudSdkUpdateService.SDK_UPDATE_INTERVAL_MS / 2); managedCloudSdkUpdateService.activate(); verify(managedCloudSdkUpdateService) .schedule( any(), eq((ManagedCloudSdkUpdateService.SDK_UPDATE_INTERVAL_MS / 2) + 1), eq(ManagedCloudSdkUpdateService.SDK_UPDATE_INTERVAL_MS)); }
@Test public void update_scheduledNow_ifLastUpdate_elapsed() { CloudSdkServiceUserSettings.getInstance().setLastAutomaticUpdateTimestamp(1); when(mockClock.millis()).thenReturn(ManagedCloudSdkUpdateService.SDK_UPDATE_INTERVAL_MS + 2); managedCloudSdkUpdateService.activate(); verify(managedCloudSdkUpdateService) .schedule(any(), eq(0L), eq(ManagedCloudSdkUpdateService.SDK_UPDATE_INTERVAL_MS)); }
@Before public void setUp() { // add timer thread to one not to be checked for 'leaks' ThreadTracker.longRunningThreadCreated( ApplicationManager.getApplication(), ManagedCloudSdkUpdateService.SDK_UPDATER_THREAD_NAME); when(mockPluginInfoService.shouldEnable(GctFeature.MANAGED_SDK_UPDATE)).thenReturn(true); when(mockSdkServiceManager.getCloudSdkService()).thenReturn(mockSdkService); ManagedCloudSdkServiceUiPresenter.setInstance(mockUiPresenter); doReturn(mockClock).when(managedCloudSdkUpdateService).getClock(); doReturn(mockUiTimer).when(managedCloudSdkUpdateService).createUiTimer(anyInt()); when(mockUiPresenter.notifyManagedSdkUpdate(any(), any())).thenReturn(mockNotification); // directly execute scheduled tasks. doAnswer( invocationOnMock -> { ((TimerTask) invocationOnMock.getArgument(0)).run(); return null; }) .when(managedCloudSdkUpdateService) .schedule(any(), anyLong(), anyLong()); // directly call task assigned to UI timer. doAnswer( invocationOnMock -> { ((ActionListener) invocationOnMock.getArgument(0)) .actionPerformed(mock(ActionEvent.class)); return null; }) .when(mockUiTimer) .addActionListener(any()); CloudSdkServiceUserSettings.reset(); }