@Override public void schedule() { if (!nodeLifecycle.tryToMoveTo(NodeLifecycle.State.STARTING)) { return; } processesById.clear(); for (ProcessId processId : ClusterSettings.getEnabledProcesses(settings)) { SQProcess process = SQProcess.builder(processId) .addProcessLifecycleListener(this) .addEventListener(this) .setWatcherDelayMs(processWatcherDelayMs) .build(); processesById.put(process.getProcessId(), process); } operationalCountDown.set(processesById.size()); tryToStartAll(); }
@Test public void send_event_when_process_is_operational() { ProcessEventListener listener = mock(ProcessEventListener.class); SQProcess underTest = SQProcess.builder(A_PROCESS_ID) .addEventListener(listener) .build(); try (TestProcess testProcess = new TestProcess()) { underTest.start(() -> testProcess); testProcess.operational = true; underTest.refreshState(); verify(listener).onProcessEvent(A_PROCESS_ID, ProcessEventListener.Type.OPERATIONAL); } verifyNoMoreInteractions(listener); }
@Test public void operational_event_is_sent_once() { ProcessEventListener listener = mock(ProcessEventListener.class); SQProcess underTest = SQProcess.builder(A_PROCESS_ID) .addEventListener(listener) .build(); try (TestProcess testProcess = new TestProcess()) { underTest.start(() -> testProcess); testProcess.operational = true; underTest.refreshState(); verify(listener).onProcessEvent(A_PROCESS_ID, ProcessEventListener.Type.OPERATIONAL); // second run underTest.refreshState(); verifyNoMoreInteractions(listener); } }
@Override public void schedule() { if (!nodeLifecycle.tryToMoveTo(NodeLifecycle.State.STARTING)) { return; } processesById.clear(); for (ProcessId processId : ClusterSettings.getEnabledProcesses(settings)) { SQProcess process = SQProcess.builder(processId) .addProcessLifecycleListener(this) .addEventListener(this) .setWatcherDelayMs(processWatcherDelayMs) .build(); processesById.put(process.getProcessId(), process); } operationalCountDown.set(processesById.size()); tryToStartAll(); }