@Override protected boolean doSend(Telemetry telemetry) { StringWriter writer = new StringWriter(); JsonTelemetryDataSerializer jsonWriter = null; try { jsonWriter = new JsonTelemetryDataSerializer(writer); telemetry.serialize(jsonWriter); jsonWriter.close(); String asJson = writer.toString(); telemetryBuffer.add(asJson); telemetry.reset(); } catch (IOException e) { InternalLogger.INSTANCE.error("Failed to serialize Telemetry"); InternalLogger.INSTANCE.trace("Stack trace is %s", ExceptionUtils.getStackTrace(e)); return false; } return true; }
@Test public void sendAddsItemToBuffer() { final MetricTelemetry telemetry = new MetricTelemetry(); telemetry.getContext().setInstrumentationKey("fake-ikey"); channel.send(telemetry); verify(mockBuffer, times(1)).add(any(Telemetry.class)); }
@Test public void testSendWhenBufferIsFullInDeveloperMode() throws Exception { TelemetriesTransmitter mockSender = Mockito.mock(TelemetriesTransmitter.class); LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(1); LimitsEnforcer sendEnforcer = createDefaultSenderTimeoutEnforcer(); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); for (int i = 0; i < 2; ++i) { testedBuffer.add("mockTelemetry"); } Mockito.verify(mockSender, Mockito.never()).scheduleSend((TelemetriesTransmitter.TelemetriesFetcher)any(), anyLong(), (TimeUnit)anyObject()); Mockito.verify(mockSender, Mockito.times(2)).sendNow(anyCollectionOf(String.class)); }
@Test public void testAddOneTelemetry() throws Exception { TelemetriesTransmitter mockSender = Mockito.mock(TelemetriesTransmitter.class); LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(128); LimitsEnforcer sendEnforcer = createEnforcerWithCurrentValue(2); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); testedBuffer.add("mockTelemetry"); Mockito.verify(mockSender, Mockito.times(1)).scheduleSend((TelemetriesTransmitter.TelemetriesFetcher) any(), anyLong(), (TimeUnit) anyObject()); }
@SuppressWarnings("unchecked") @Test public void testSendWhenBufferIsFullInNonDeveloperMode() throws Exception { TelemetriesTransmitter mockSender = Mockito.mock(TelemetriesTransmitter.class); Mockito.doReturn(true).when(mockSender).sendNow(anyCollection()); Mockito.doReturn(true).when(mockSender).scheduleSend(any(TelemetriesTransmitter.TelemetriesFetcher.class), anyLong(), any(TimeUnit.class)); LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(2); LimitsEnforcer sendEnforcer = createDefaultSenderTimeoutEnforcer(); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); for (int i = 0; i < 2; ++i) { testedBuffer.add("mockTelemetry"); } Mockito.verify(mockSender, Mockito.times(1)).scheduleSend((TelemetriesTransmitter.TelemetriesFetcher) any(), anyLong(), (TimeUnit) anyObject()); Mockito.verify(mockSender, Mockito.times(1)).sendNow(anyCollectionOf(String.class)); }
@Override protected boolean doSend(com.microsoft.applicationinsights.telemetry.Telemetry telemetry) { if (telemetryBuffer == null) { InternalLogger.INSTANCE.error("Cannot send telemetry. telemetryBuffer is null"); return false; } BaseTelemetry base = (BaseTelemetry) telemetry; if (base == null) { InternalLogger.INSTANCE.warn("Received null telemetry item. Skipping..."); } try { Telemetry toSend = LocalForwarderModelTransformer.transform(base); if (toSend == null) { InternalLogger.INSTANCE.error("Could not find transformer for type='%s'", base.getBaseTypeName()); return false; } telemetryBuffer.add(toSend); telemetry.reset(); return true; } catch (java.lang.Exception e) { InternalLogger.INSTANCE.error("Failed to transform telemetry: %s%nException: %s", telemetry.toString(), ExceptionUtils.getStackTrace(e)); } return false; }
testedBuffer.add(telemetry);
@Test public void testSetMaxTelemetriesInBatchWithBiggerSize() { MockSender mockSender = new MockSender() .setExpectedNumberOfScheduleSendCalls(0) .setExpectedNumberOfSendNowCalls(1) .setExpectedTelemetriesNumberInScheduleSend(0) .setExpectedTelemetriesNumberInSendNow(11); // Create a buffer with max buffer size of 10 and timeout of 10 seconds LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(1, 10); LimitsEnforcer sendEnforcer = createEnforcerWithCurrentValue(30); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); for (int i = 0; i < 1; ++i) { testedBuffer.add("mockTelemetry"); } testedBuffer.setMaxTelemetriesInBatch(11); for (int i = 0; i < 10; ++i) { testedBuffer.add("mockTelemetry"); } mockSender.waitForFinish(1L); }
@Test public void testSetMaxTelemetriesInBatchWithSmallerSizeButLargerThanWhatInBuffer() { MockSender mockSender = new MockSender() .setExpectedNumberOfScheduleSendCalls(0) .setExpectedNumberOfSendNowCalls(1) .setExpectedTelemetriesNumberInScheduleSend(0) .setExpectedTelemetriesNumberInSendNow(3) .setExpectedNumberOfScheduleSendRequests(2); // Create a buffer with max buffer size of 10 and timeout of 10 seconds LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(1, 10); LimitsEnforcer sendEnforcer = createEnforcerWithCurrentValue(30); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); for (int i = 0; i < 2; ++i) { testedBuffer.add("mockTelemetry"); } testedBuffer.setMaxTelemetriesInBatch(3); for (int i = 0; i < 2; ++i) { testedBuffer.add("mockTelemetry"); } mockSender.waitForFinish(1L); }
@Test public void testSendBufferAfterTimeoutExpiresButBufferWasAlreadySent() throws Exception { MockSender mockSender = new MockSender() .setExpectedNumberOfScheduleSendCalls(1) .setExpectedNumberOfSendNowCalls(1) .setExpectedTelemetriesNumberInScheduleSend(0) .setExpectedTelemetriesNumberInSendNow(10); // Create a buffer with max buffer size of 10 and timeout of 10 seconds LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(10); LimitsEnforcer sendEnforcer = createEnforcerWithCurrentValue(3); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); for (int i = 0; i < 10; ++i) { testedBuffer.add("mockTelemetry"); } mockSender.waitForFinish(6L); }
@Test public void testSendBufferAfterTimeoutExpires() throws Exception { MockSender mockSender = new MockSender() .setExpectedNumberOfScheduleSendCalls(1) .setExpectedNumberOfSendNowCalls(0) .setExpectedTelemetriesNumberInScheduleSend(1) .setExpectedTelemetriesNumberInSendNow(1); // Create a buffer with max buffer size of 10 and timeout of 10 seconds LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(10); LimitsEnforcer sendEnforcer = createEnforcerWithCurrentValue(3); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); for (int i = 0; i < 1; ++i) { testedBuffer.add("mockTelemetry"); } mockSender.waitForFinish(6L); }
private void testFlushWithData(int expectedTelemetriesNumberInSendNow) { MockSender mockSender = new MockSender() .setExpectedNumberOfScheduleSendCalls(1) .setExpectedNumberOfSendNowCalls(1) .setExpectedTelemetriesNumberInScheduleSend(0) .setExpectedTelemetriesNumberInSendNow(expectedTelemetriesNumberInSendNow); // Create a buffer with max buffer size of 10 and timeout of 10 seconds LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(1, 10); LimitsEnforcer sendEnforcer = createEnforcerWithCurrentValue(1, 3); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); for (int i = 0; i < expectedTelemetriesNumberInSendNow; ++i) { testedBuffer.add("mockTelemetry"); } testedBuffer.flush(); mockSender.waitForFinish(6L); }
@Test public void testSetMaxTelemetriesInBatchWithSmallerSize() { MockSender mockSender = new MockSender() .setExpectedNumberOfScheduleSendCalls(0) .setExpectedNumberOfSendNowCalls(1) .setExpectedTelemetriesNumberInScheduleSend(0) .setExpectedTelemetriesNumberInSendNow(2); // Create a buffer with max buffer size of 10 and timeout of 10 seconds LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(1, 10); LimitsEnforcer sendEnforcer = createEnforcerWithCurrentValue(30); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); for (int i = 0; i < 2; ++i) { testedBuffer.add("mockTelemetry"); } testedBuffer.setMaxTelemetriesInBatch(1); mockSender.waitForFinish(1L); }
@Test public void testSetTransmitBufferTimeoutInSecondsShorterTime() { MockSender mockSender = new MockSender() .setExpectedNumberOfScheduleSendCalls(0) .setExpectedNumberOfSendNowCalls(1) .setExpectedTelemetriesNumberInScheduleSend(0) .setExpectedTelemetriesNumberInSendNow(2); // Create a buffer with max buffer size of 10 and timeout of 10 seconds LimitsEnforcer maxEnforcer = createEnforcerWithCurrentValue(10); LimitsEnforcer sendEnforcer = createEnforcerWithCurrentValue(1, 30); TelemetryBuffer testedBuffer = new TelemetryBuffer(mockSender, maxEnforcer, sendEnforcer); for (int i = 0; i < 2; ++i) { testedBuffer.add("mockTelemetry"); } testedBuffer.setTransmitBufferTimeoutInSeconds(1); mockSender.waitForFinish(1L); }