private static void VerifySetsAndRestoresActivityIdOnSyncError(Func <ICalculatorClientAsync, Task <double> > doAsync) { ClientEventSource eventSource = ClientEventSource.Instance; InvalidProgramException expectedException = new InvalidProgramException("Expected."); CalculatorClientWithActivity client = new CalculatorClientWithActivity(new CalculatorClientStub(() => Throw(expectedException)), eventSource, Guid.Empty); using (ClientEventListener listener = new ClientEventListener(eventSource, EventLevel.Informational, ClientEventSource.Keywords.Request)) { Guid originalActivityId = new Guid(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1); EventProvider.SetActivityId(ref originalActivityId); listener.EventWritten += (o, e) => Assert.NotEqual(originalActivityId, Trace.CorrelationManager.ActivityId); InvalidProgramException ipe = Assert.Throws <InvalidProgramException>(() => doAsync(client)); Assert.Same(expectedException, ipe); Assert.Equal(originalActivityId, Trace.CorrelationManager.ActivityId); } }
private static void VerifyTracesStartAndEnd(Func <ICalculatorClientAsync, Task <double> > doAsync) { ClientEventSource eventSource = ClientEventSource.Instance; TaskCompletionSource <double> tcs = new TaskCompletionSource <double>(); Guid clientId = new Guid(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xC); CalculatorClientWithActivity client = new CalculatorClientWithActivity(new CalculatorClientStub(() => tcs.Task), eventSource, clientId); using (ClientEventListener listener = new ClientEventListener(eventSource, EventLevel.Informational, ClientEventSource.Keywords.Request)) { Task <double> task = VerifyPending(doAsync(client)); listener.VerifyEvent(ClientEventId.Request, EventLevel.Informational, ClientEventSource.Keywords.Request, EventOpcode.Start, clientId); listener.Events.Clear(); tcs.SetResult(0.0d); VerifyResult(0.0d, task); listener.VerifyEvent(ClientEventId.RequestCompleted, EventLevel.Informational, ClientEventSource.Keywords.Request, EventOpcode.Stop, clientId); } }
private static void VerifyTracesStartAndEndError(Func <ICalculatorClientAsync, Task <double> > doAsync) { ClientEventSource eventSource = ClientEventSource.Instance; TaskCompletionSource <double> tcs = new TaskCompletionSource <double>(); Guid clientId = new Guid(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xC); CalculatorClientWithActivity client = new CalculatorClientWithActivity(new CalculatorClientStub(() => tcs.Task), eventSource, clientId); using (ClientEventListener listener = new ClientEventListener(eventSource, EventLevel.Informational, ClientEventSource.Keywords.Request)) { Task <double> task = VerifyPending(doAsync(client)); listener.VerifyEvent(ClientEventId.Request, EventLevel.Informational, ClientEventSource.Keywords.Request, EventOpcode.Start, clientId); listener.Events.Clear(); InvalidCastException expectedException = new InvalidCastException("Expected."); tcs.SetException(expectedException); VerifyResultError(expectedException, task); listener.VerifyEvent(ClientEventId.RequestError, EventLevel.Warning, ClientEventSource.Keywords.Request, EventOpcode.Stop, clientId, "System.InvalidCastException", "Expected."); } }
private static void VerifySetsAndRestoresActivityId(Func <ICalculatorClientAsync, Task <double> > doAsync) { ClientEventSource eventSource = ClientEventSource.Instance; TaskCompletionSource <double> tcs = new TaskCompletionSource <double>(); CalculatorClientWithActivity client = new CalculatorClientWithActivity(new CalculatorClientStub(() => tcs.Task), eventSource, Guid.Empty); using (ClientEventListener listener = new ClientEventListener(eventSource, EventLevel.Informational, ClientEventSource.Keywords.Request)) { Guid originalActivityId = new Guid(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1); EventProvider.SetActivityId(ref originalActivityId); listener.EventWritten += (o, e) => Assert.NotEqual(originalActivityId, Trace.CorrelationManager.ActivityId); Task <double> task = VerifyPending(doAsync(client)); Assert.Equal(originalActivityId, Trace.CorrelationManager.ActivityId); tcs.SetResult(0.0d); VerifyResult(0.0d, task); Assert.Equal(originalActivityId, Trace.CorrelationManager.ActivityId); } }
private static void VerifyTracesStartAndEndSyncError(Func <ICalculatorClientAsync, Task <double> > doAsync) { ClientEventSource eventSource = ClientEventSource.Instance; Guid clientId = new Guid(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xC); InvalidTimeZoneException expectedException = new InvalidTimeZoneException("Expected."); using (ClientEventListener listener = new ClientEventListener(eventSource, EventLevel.Informational, ClientEventSource.Keywords.Request)) { Func <Task <double> > verifyStartEventAndThrow = delegate { listener.VerifyEvent(ClientEventId.Request, EventLevel.Informational, ClientEventSource.Keywords.Request, EventOpcode.Start, clientId); listener.Events.Clear(); throw expectedException; }; CalculatorClientWithActivity client = new CalculatorClientWithActivity(new CalculatorClientStub(verifyStartEventAndThrow), eventSource, clientId); InvalidTimeZoneException ite = Assert.Throws <InvalidTimeZoneException>(() => doAsync(client)); Assert.Same(expectedException, ite); listener.VerifyEvent(ClientEventId.RequestError, EventLevel.Warning, ClientEventSource.Keywords.Request, EventOpcode.Stop, clientId, "System.InvalidTimeZoneException", "Expected."); } }