/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.api.lifecycle;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.mule.runtime.api.exception.MuleException;
import org.mule.runtime.api.lifecycle.Startable;
import org.mule.runtime.core.api.MuleContext;
import org.mule.runtime.core.api.context.notification.ServerNotification;
import org.mule.runtime.core.context.notification.NotificationException;
import org.mule.tck.junit4.AbstractMuleTestCase;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class PrimaryNodeLifecycleNotificationListenerTestCase extends AbstractMuleTestCase {
@Mock
private MuleContext mockMuleContext;
@Mock
private Startable mockStartable;
@Mock
private ServerNotification mockServerNotification;
private StartableAndLifecycleState mockStartableAndLifecycleState;
private StartableAndLifecycleStateEnabled mockStartableAndLifecycleStateEnabled;
private PrimaryNodeLifecycleNotificationListener notificationListener;
@Before
public void setUpTest() {
this.notificationListener = new PrimaryNodeLifecycleNotificationListener(mockStartable, mockMuleContext);
}
@Test
public void testRegister() throws NotificationException {
this.notificationListener.register();
verify(mockMuleContext, times(1)).registerListener(notificationListener);
}
@Test
public void testUnregister() throws NotificationException {
this.notificationListener.unregister();
verify(mockMuleContext, times(1)).unregisterListener(notificationListener);
}
@Test
public void testOnNotificationWithStartable() throws MuleException {
this.notificationListener.onNotification(mockServerNotification);
verify(mockStartable, times(1)).start();
}
@Test
public void testOnNotificationWithLifecycleStateStarted() throws MuleException {
mockStartableAndLifecycleState = mock(StartableAndLifecycleState.class);
when(mockStartableAndLifecycleState.isStarted()).thenReturn(true);
this.notificationListener = new PrimaryNodeLifecycleNotificationListener(mockStartableAndLifecycleState, mockMuleContext);
this.notificationListener.onNotification(mockServerNotification);
verify(mockStartableAndLifecycleState, times(1)).start();
}
@Test
public void testOnNotificationWithLifecycleStateStopped() throws MuleException {
mockStartableAndLifecycleState = mock(StartableAndLifecycleState.class);
when(mockStartableAndLifecycleState.isStarted()).thenReturn(false);
this.notificationListener = new PrimaryNodeLifecycleNotificationListener(mockStartableAndLifecycleState, mockMuleContext);
this.notificationListener.onNotification(mockServerNotification);
verify(mockStartableAndLifecycleState, times(0)).start();
}
@Test
public void testOnNotificationWithLifecycleStateEnabledStarted() throws MuleException {
mockStartableAndLifecycleStateEnabled = mock(StartableAndLifecycleStateEnabled.class, Answers.RETURNS_DEEP_STUBS.get());
when(mockStartableAndLifecycleStateEnabled.getLifecycleState().isStarted()).thenReturn(true);
this.notificationListener =
new PrimaryNodeLifecycleNotificationListener(mockStartableAndLifecycleStateEnabled, mockMuleContext);
this.notificationListener.onNotification(mockServerNotification);
verify(mockStartableAndLifecycleStateEnabled, times(1)).start();
}
@Test
public void testOnNotificationWithLifecycleStateEnabledStopped() throws MuleException {
mockStartableAndLifecycleStateEnabled = mock(StartableAndLifecycleStateEnabled.class, Answers.RETURNS_DEEP_STUBS.get());
when(mockStartableAndLifecycleStateEnabled.getLifecycleState().isStarted()).thenReturn(false);
this.notificationListener =
new PrimaryNodeLifecycleNotificationListener(mockStartableAndLifecycleStateEnabled, mockMuleContext);
this.notificationListener.onNotification(mockServerNotification);
verify(mockStartableAndLifecycleStateEnabled, times(0)).start();
}
private interface StartableAndLifecycleStateEnabled extends Startable, LifecycleStateEnabled {
}
private interface StartableAndLifecycleState extends Startable, LifecycleState {
}
}