package rocks.inspectit.server.messaging; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.mock; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import org.mockito.InjectMocks; import org.mockito.Mock; import org.slf4j.Logger; import org.springframework.context.ApplicationEvent; import org.testng.annotations.Test; import rocks.inspectit.server.event.AgentDeletedEvent; import rocks.inspectit.server.event.AgentRegisteredEvent; import rocks.inspectit.shared.all.communication.message.IAgentMessage; import rocks.inspectit.shared.all.testbase.TestBase; /** * Tests the {@link AgentMessageProvider} class. * * @author Marius Oehler * */ @SuppressWarnings("PMD") public class AgentMessageProviderTest extends TestBase { @InjectMocks AgentMessageProvider messageProvider; @Mock Logger log; /** * Tests the {@link AgentMessageProvider#provideMessage(long, IAgentMessage)} class. */ public static class ProvideMessage extends AgentMessageProviderTest { @Test @SuppressWarnings("unchecked") public void successful() { IAgentMessage<?> messageOne = mock(IAgentMessage.class); IAgentMessage<?> messageTwo = mock(IAgentMessage.class); IAgentMessage<?> messageThree = mock(IAgentMessage.class); messageProvider.provideMessage(10L, messageOne); messageProvider.provideMessage(10L, messageTwo); messageProvider.provideMessage(10L, messageThree); assertThat(messageProvider.fetchMessages(10L), contains(messageOne, messageTwo, messageThree)); } @Test(expectedExceptions = IllegalArgumentException.class) public void nullMessage() { try { messageProvider.provideMessage(10L, null); } finally { assertThat(messageProvider.fetchMessages(10L), hasSize(0)); } } } /** * Tests the {@link AgentMessageProvider#provideMessages(long, java.util.Collection)} class. */ public static class ProvideMessages extends AgentMessageProviderTest { @Test @SuppressWarnings("unchecked") public void successful() { IAgentMessage<?> messageOne = mock(IAgentMessage.class); IAgentMessage<?> messageTwo = mock(IAgentMessage.class); IAgentMessage<?> messageThree = mock(IAgentMessage.class); messageProvider.provideMessages(10L, Arrays.asList(messageOne, messageTwo, messageThree)); assertThat(messageProvider.fetchMessages(10L), contains(messageOne, messageTwo, messageThree)); } @Test(expectedExceptions = IllegalArgumentException.class) public void nullMessages() { try { messageProvider.provideMessages(10L, null); } finally { assertThat(messageProvider.fetchMessages(10L), hasSize(0)); } } @Test(expectedExceptions = IllegalArgumentException.class) @SuppressWarnings("unchecked") public void emptyMessages() { try { messageProvider.provideMessages(10L, Collections.EMPTY_LIST); } finally { assertThat(messageProvider.fetchMessages(10L), hasSize(0)); } } } /** * Tests the {@link AgentMessageProvider#fetchMessages(long)} class. */ public static class Fetch extends AgentMessageProviderTest { @Test @SuppressWarnings("unchecked") public void successful() { IAgentMessage<?> messageOne = mock(IAgentMessage.class); IAgentMessage<?> messageTwo = mock(IAgentMessage.class); IAgentMessage<?> messageThree = mock(IAgentMessage.class); messageProvider.provideMessages(10L, Arrays.asList(messageOne, messageTwo)); Collection<IAgentMessage<?>> resultOne = messageProvider.fetchMessages(10L); Collection<IAgentMessage<?>> resultTwo = messageProvider.fetchMessages(10L); messageProvider.provideMessage(10L, messageThree); Collection<IAgentMessage<?>> resultThree = messageProvider.fetchMessages(10L); assertThat(resultOne, contains(messageOne, messageTwo)); assertThat(resultTwo, is(empty())); assertThat(resultThree, hasSize(1)); assertThat(resultThree, hasItem(messageThree)); } @Test public void unknownPlatformId() { IAgentMessage<?> messageOne = mock(IAgentMessage.class); IAgentMessage<?> messageTwo = mock(IAgentMessage.class); messageProvider.provideMessages(10L, Arrays.asList(messageOne, messageTwo)); Collection<IAgentMessage<?>> result = messageProvider.fetchMessages(1L); assertThat(result, hasSize(0)); } } /** * Tests the {@link AgentMessageProvider#clear(long)} class. */ public static class Clear extends AgentMessageProviderTest { @Test public void successful() { IAgentMessage<?> messageOne = mock(IAgentMessage.class); IAgentMessage<?> messageTwo = mock(IAgentMessage.class); messageProvider.provideMessages(10L, Arrays.asList(messageOne, messageTwo)); messageProvider.clear(10L); assertThat(messageProvider.fetchMessages(10L), hasSize(0)); } @Test @SuppressWarnings("unchecked") public void unknownPlatformId() { IAgentMessage<?> messageOne = mock(IAgentMessage.class); IAgentMessage<?> messageTwo = mock(IAgentMessage.class); messageProvider.provideMessages(10L, Arrays.asList(messageOne, messageTwo)); messageProvider.clear(20L); assertThat(messageProvider.fetchMessages(10L), contains(messageOne, messageTwo)); } } /** * Tests the * {@link AgentMessageProvider#onApplicationEvent(org.springframework.context.ApplicationEvent)} * method. */ public static class OnApplicationEvent extends AgentMessageProviderTest { @Test public void agentDeletedEvent() { messageProvider.provideMessages(10L, Collections.<IAgentMessage<?>> singletonList(mock(IAgentMessage.class))); messageProvider.provideMessages(15L, Collections.<IAgentMessage<?>> singletonList(mock(IAgentMessage.class))); AgentDeletedEvent event = new AgentDeletedEvent(this, 10L); messageProvider.onApplicationEvent(event); assertThat(messageProvider.fetchMessages(10L), hasSize(0)); assertThat(messageProvider.fetchMessages(15L), hasSize(1)); } @Test public void agentRegisteredEvent() { messageProvider.provideMessages(10L, Collections.<IAgentMessage<?>> singletonList(mock(IAgentMessage.class))); messageProvider.provideMessages(15L, Collections.<IAgentMessage<?>> singletonList(mock(IAgentMessage.class))); AgentRegisteredEvent event = new AgentRegisteredEvent(this, 10L); messageProvider.onApplicationEvent(event); assertThat(messageProvider.fetchMessages(10L), hasSize(0)); assertThat(messageProvider.fetchMessages(15L), hasSize(1)); } @Test public void unknownEvent() { messageProvider.provideMessages(10L, Collections.<IAgentMessage<?>> singletonList(mock(IAgentMessage.class))); ApplicationEvent event = mock(ApplicationEvent.class); messageProvider.onApplicationEvent(event); assertThat(messageProvider.fetchMessages(10L), hasSize(1)); } @Test public void nullEvent() { messageProvider.provideMessages(10L, Collections.<IAgentMessage<?>> singletonList(mock(IAgentMessage.class))); messageProvider.onApplicationEvent(null); assertThat(messageProvider.fetchMessages(10L), hasSize(1)); } } }