public async Task ClientInvokeCallback_SetActivityId() { Guid setActivityId = Guid.NewGuid(); Guid activityId2 = Guid.NewGuid(); RequestContextTestUtils.SetActivityId(activityId2); TestClientInvokeCallback callback = new TestClientInvokeCallback(output, setActivityId); this.runtimeClient.ClientInvokeCallback = callback.OnInvoke; IRequestContextProxyGrain grain = this.fixture.GrainFactory.GetGrain <IRequestContextProxyGrain>(GetRandomGrainId()); Guid activityId = await grain.E2EActivityId(); Assert.Equal(setActivityId, activityId); // "E2EActivityId Call#1" Assert.Equal(1, callback.TotalCalls); // "Number of callbacks" RequestContextTestUtils.SetActivityId(Guid.Empty); RequestContext.Clear(); // Need this to clear out any old ActivityId value cached in RequestContext. Code optimization in RequestContext does not unset entry if Trace.CorrelationManager.ActivityId == Guid.Empty [which is the "normal" case] this.runtimeClient.ClientInvokeCallback = null; activityId = await grain.E2EActivityId(); Assert.Equal(Guid.Empty, activityId); // "E2EActivityId Call#2 == Zero" Assert.Equal(1, callback.TotalCalls); // "Number of callbacks - should be unchanged" }
public async Task ClientInvokeCallback_SetActivityId() { Guid setActivityId = Guid.NewGuid(); Guid activityId2 = Guid.NewGuid(); Trace.CorrelationManager.ActivityId = activityId2; // Set up initial value that will be overridden by the callback function TestClientInvokeCallback callback = new TestClientInvokeCallback(setActivityId); GrainClient.ClientInvokeCallback = callback.OnInvoke; IRequestContextProxyGrain grain = GrainClient.GrainFactory.GetGrain <IRequestContextProxyGrain>(GetRandomGrainId()); Guid activityId = await grain.E2EActivityId(); Assert.AreEqual(setActivityId, activityId, "E2EActivityId Call#1"); Assert.AreEqual(1, callback.TotalCalls, "Number of callbacks"); Trace.CorrelationManager.ActivityId = Guid.Empty; RequestContext.Clear(); // Need this to clear out any old ActivityId value cached in RequestContext. Code optimization in RequestContext does not unset entry if Trace.CorrelationManager.ActivityId == Guid.Empty [which is the "normal" case] GrainClient.ClientInvokeCallback = null; activityId = await grain.E2EActivityId(); Assert.AreEqual(Guid.Empty, activityId, "E2EActivityId Call#2 == Zero"); Assert.AreEqual(1, callback.TotalCalls, "Number of callbacks - should be unchanged"); }
public async Task RequestContext_ActivityId_CM_E2E_ViaProxy() { Guid activityId = Guid.NewGuid(); Guid activityId2 = Guid.NewGuid(); Guid nullActivityId = Guid.Empty; IRequestContextProxyGrain grain = this.fixture.GrainFactory.GetGrain <IRequestContextProxyGrain>(GetRandomGrainId()); Trace.CorrelationManager.ActivityId = activityId; Assert.Null(RequestContext.Get(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER)); Guid result = await grain.E2EActivityId(); Assert.Equal(activityId, result); // "E2E ActivityId not propagated correctly" RequestContext.Clear(); Trace.CorrelationManager.ActivityId = nullActivityId; Assert.Null(RequestContext.Get(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER)); for (int i = 0; i < Environment.ProcessorCount; i++) { result = await grain.E2EActivityId(); Assert.Equal(nullActivityId, result); // "Null ActivityId propagated E2E incorrectly" } RequestContext.Clear(); Trace.CorrelationManager.ActivityId = activityId2; Assert.Null(RequestContext.Get(RequestContext.E2_E_TRACING_ACTIVITY_ID_HEADER)); result = await grain.E2EActivityId(); Assert.Equal(activityId2, result); // "E2E ActivityId 2 not propagated correctly" RequestContext.Clear(); }
public async Task ClientInvokeCallback_CountCallbacks() { TestClientInvokeCallback callback = new TestClientInvokeCallback(Guid.Empty); GrainClient.ClientInvokeCallback = callback.OnInvoke; IRequestContextProxyGrain grain = GrainClient.GrainFactory.GetGrain<IRequestContextProxyGrain>(GetRandomGrainId()); Trace.CorrelationManager.ActivityId = Guid.Empty; Guid activityId = await grain.E2EActivityId(); Assert.AreEqual(Guid.Empty, activityId, "E2EActivityId Call#1"); Assert.AreEqual(1, callback.TotalCalls, "Number of callbacks"); GrainClient.ClientInvokeCallback = null; activityId = await grain.E2EActivityId(); Assert.AreEqual(Guid.Empty, activityId, "E2EActivityId Call#2"); Assert.AreEqual(1, callback.TotalCalls, "Number of callbacks - should be unchanged"); }
public async Task ClientInvokeCallback_CountCallbacks() { TestClientInvokeCallback callback = new TestClientInvokeCallback(output, Guid.Empty); this.runtimeClient.ClientInvokeCallback = callback.OnInvoke; IRequestContextProxyGrain grain = this.fixture.GrainFactory.GetGrain <IRequestContextProxyGrain>(GetRandomGrainId()); RequestContextTestUtils.SetActivityId(Guid.Empty); Guid activityId = await grain.E2EActivityId(); Assert.Equal(Guid.Empty, activityId); // "E2EActivityId Call#1" Assert.Equal(1, callback.TotalCalls); // "Number of callbacks" this.runtimeClient.ClientInvokeCallback = null; activityId = await grain.E2EActivityId(); Assert.Equal(Guid.Empty, activityId); // "E2EActivityId Call#2" Assert.Equal(1, callback.TotalCalls); // "Number of callbacks - should be unchanged" }