public void MovesOldestTransmissionFromStorageToBuffer() { var previouslyStoredTransmissions = new List <Transmission> { new StubTransmission(), new StubTransmission() }; int storageIndex = 0; var storage = new StubTransmissionStorage { OnDequeue = () => { if (storageIndex < previouslyStoredTransmissions.Count) { return(previouslyStoredTransmissions[storageIndex++]); } return(null); } }; var newlyBufferedTransmissions = new List <Transmission>(); var buffer = new StubTransmissionBuffer { OnEnqueue = getTransmission => { var transmission = getTransmission(); if (transmission != null) { newlyBufferedTransmissions.Add(transmission); return(true); } return(false); } }; var sender = new StubTransmissionSender(); Transmitter queue = CreateTransmitter(sender: sender, buffer: buffer, storage: storage); buffer.OnTransmissionDequeued(new TransmissionProcessedEventArgs(null)); Assert.Equal(previouslyStoredTransmissions, newlyBufferedTransmissions); }
public void LogsUnhandledAsyncExceptionsToPreventThemFromCrashingApplication() { var exception = new Exception(Guid.NewGuid().ToString()); var buffer = new StubTransmissionBuffer { OnEnqueue = getTransmissionAsync => { throw exception; } }; Transmitter transmitter = CreateTransmitter(buffer: buffer); using (var listener = new TestEventListener()) { const long AllKeywords = -1; listener.EnableEvents(TelemetryChannelEventSource.Log, EventLevel.Warning, (EventKeywords)AllKeywords); buffer.OnTransmissionDequeued(new TransmissionProcessedEventArgs(new StubTransmission())); EventWrittenEventArgs message = listener.Messages.First(); Assert.Contains(exception.Message, (string)message.Payload[0], StringComparison.Ordinal); } }