コード例 #1
0
        public async Task ProtoContextAccessor_GettingProtoContextDoesNotFlowIfExecutionContextDoesNotFlow()
        {
            var accessor = new ProtoContextAccessor();

            var context = new DefaultProtoContext();

            accessor.ProtoContext = context;

            var checkAsyncFlowTcs = new TaskCompletionSource <object>(TaskCreationOptions.RunContinuationsAsynchronously);

            ThreadPool.UnsafeQueueUserWorkItem(_ =>
            {
                try
                {
                    // The ProtoContext flows with the execution context
                    Assert.Null(accessor.ProtoContext);
                    checkAsyncFlowTcs.SetResult(null);
                }
                catch (Exception ex)
                {
                    checkAsyncFlowTcs.SetException(ex);
                }
            }, null);

            await checkAsyncFlowTcs.Task;
        }
コード例 #2
0
        public void ConstructorWithoutServiceScopeFactoryThrows()
        {
            // Arrange
            var accessor   = new ProtoContextAccessor();
            var exception1 = Assert.Throws <ArgumentNullException>(() => new ProtoContextFactory(Options.Create(new FormOptions()), accessor));
            var exception2 = Assert.Throws <ArgumentNullException>(() => new ProtoContextFactory(Options.Create(new FormOptions())));

            Assert.Equal("serviceScopeFactory", exception1.ParamName);
            Assert.Equal("serviceScopeFactory", exception2.ParamName);
        }
コード例 #3
0
        public void CreateProtoContextSetsProtoContextAccessor()
        {
            // Arrange
            var accessor       = new ProtoContextAccessor();
            var contextFactory = new ProtoContextFactory(Options.Create(new FormOptions()), new MyServiceScopeFactory(), accessor);

            // Act
            var context = contextFactory.Create(new FeatureCollection());

            // Assert
            Assert.Same(context, accessor.ProtoContext);
        }
コード例 #4
0
        public async Task ProtoContextAccessor_GettingProtoContextReturnsProtoContext()
        {
            var accessor = new ProtoContextAccessor();

            var context = new DefaultProtoContext();

            context.TraceIdentifier = "1";
            accessor.ProtoContext   = context;

            await Task.Delay(100);

            Assert.Same(context, accessor.ProtoContext);
        }
コード例 #5
0
        public async Task ProtoContextAccessor_GettingProtoContextReturnsNullProtoContextIfChanged()
        {
            var accessor = new ProtoContextAccessor();

            var context = new DefaultProtoContext();

            accessor.ProtoContext = context;

            var checkAsyncFlowTcs = new TaskCompletionSource <object>(TaskCreationOptions.RunContinuationsAsynchronously);
            var waitForNullTcs    = new TaskCompletionSource <object>(TaskCreationOptions.RunContinuationsAsynchronously);
            var afterNullCheckTcs = new TaskCompletionSource <object>(TaskCreationOptions.RunContinuationsAsynchronously);

            ThreadPool.QueueUserWorkItem(async _ =>
            {
                // The ProtoContext flows with the execution context
                Assert.Same(context, accessor.ProtoContext);

                checkAsyncFlowTcs.SetResult(null);

                await waitForNullTcs.Task;

                try
                {
                    Assert.Null(accessor.ProtoContext);

                    afterNullCheckTcs.SetResult(null);
                }
                catch (Exception ex)
                {
                    afterNullCheckTcs.SetException(ex);
                }
            });

            await checkAsyncFlowTcs.Task;

            // Set a new http context
            var context2 = new DefaultProtoContext();

            accessor.ProtoContext = context2;

            waitForNullTcs.SetResult(null);

            Assert.Same(context2, accessor.ProtoContext);

            await afterNullCheckTcs.Task;
        }
コード例 #6
0
        public void ProtoContextAccessor_GettingProtoContextWithOutSettingReturnsNull()
        {
            var accessor = new ProtoContextAccessor();

            Assert.Null(accessor.ProtoContext);
        }