@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 @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)); }
/** * Creates an {@link UpdatedInstrumentationMessage} which contains all stored * {@link InstrumentationDefinition}. The created message is put in the message provider for the * agent to fetch. * * @param platformId * the id of the platform which {@link InstrumentationDefinition}s should be provided * for fetching */ public synchronized void flush(long platformId) { if (log.isDebugEnabled()) { log.debug("Flushing new instrumentations for agent {}.", platformId); } Map<String, InstrumentationDefinition> pendingDefinitions = definitionBuffer.put(platformId, new HashMap<String, InstrumentationDefinition>()); if (MapUtils.isNotEmpty(pendingDefinitions)) { UpdatedInstrumentationMessage message = new UpdatedInstrumentationMessage(); message.getMessageContent().addAll(pendingDefinitions.values()); messageProvider.provideMessage(platformId, message); } AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformId); if (agentStatusData != null) { agentStatusData.setInstrumentationStatus(InstrumentationStatus.UP_TO_DATE); } }
@Test(expectedExceptions = IllegalArgumentException.class) public void nullMessage() { try { messageProvider.provideMessage(10L, null); } finally { assertThat(messageProvider.fetchMessages(10L), hasSize(0)); } } }
@Test @SuppressWarnings("rawtypes") public void successful() throws Exception { when(definition.getClassName()).thenReturn("class.one"); ClassInstrumentationChangedEvent event = new ClassInstrumentationChangedEvent(this, 10L, Arrays.asList(definition)); messageGate.onApplicationEvent(event); when(agentStatusDataProvider.getAgentStatusDataMap()).thenReturn(ImmutableMap.of(10L, statusData)); when(statusData.getInstrumentationStatus()).thenReturn(InstrumentationStatus.PENDING); assertThat(getDefinitionBuffer().get(10L).entrySet(), hasSize(1)); messageGate.flush(10L); ArgumentCaptor<IAgentMessage> messageCaptor = ArgumentCaptor.forClass(IAgentMessage.class); verify(messageProvider).provideMessage(eq(10L), messageCaptor.capture()); verify(statusData).setInstrumentationStatus(InstrumentationStatus.UP_TO_DATE); verifyNoMoreInteractions(statusData, messageProvider); assertThat(((UpdatedInstrumentationMessage) messageCaptor.getValue()).getMessageContent(), contains(definition)); assertThat(getDefinitionBuffer().get(10L).entrySet(), hasSize(0)); }