private static OverrideFilterTracer CreateProductUnderTest(
     IOverrideFilter innerFilter,
     ITraceWriter traceWriter
     )
 {
     return(new OverrideFilterTracer(innerFilter, traceWriter));
 }
Пример #2
0
        private static OverrideFilterInfo ProcessOverrideFilters(IEnumerable <Filter> filters)
        {
            OverrideFilterInfo result = new OverrideFilterInfo
            {
                ActionOverrideScope         = FilterScope.First,
                AuthenticationOverrideScope = FilterScope.First,
                AuthorizationOverrideScope  = FilterScope.First,
                ExceptionOverrideScope      = FilterScope.First,
                ResultOverrideScope         = FilterScope.First,
                Filters = new List <Filter>()
            };

            // Evaluate the 'filters' enumerable only once since the operation can be quite expensive.
            foreach (Filter filter in filters)
            {
                if (filter == null)
                {
                    continue;
                }
                IOverrideFilter overrideFilter = filter.Instance as IOverrideFilter;

                if (overrideFilter != null)
                {
                    if (overrideFilter.FiltersToOverride == typeof(IActionFilter) &&
                        filter.Scope >= result.ActionOverrideScope)
                    {
                        result.ActionOverrideScope = filter.Scope;
                    }
                    else if (overrideFilter.FiltersToOverride == typeof(IAuthenticationFilter) &&
                             filter.Scope >= result.AuthenticationOverrideScope)
                    {
                        result.AuthenticationOverrideScope = filter.Scope;
                    }
                    else if (overrideFilter.FiltersToOverride == typeof(IAuthorizationFilter) &&
                             filter.Scope >= result.AuthorizationOverrideScope)
                    {
                        result.AuthorizationOverrideScope = filter.Scope;
                    }
                    else if (overrideFilter.FiltersToOverride == typeof(IExceptionFilter) &&
                             filter.Scope >= result.ExceptionOverrideScope)
                    {
                        result.ExceptionOverrideScope = filter.Scope;
                    }
                    else if (overrideFilter.FiltersToOverride == typeof(IResultFilter) &&
                             filter.Scope >= result.ResultOverrideScope)
                    {
                        result.ResultOverrideScope = filter.Scope;
                    }
                }

                // Cache filters to avoid having to enumerate it again (expensive). Do so here to avoid an extra loop.
                result.Filters.Add(filter);
            }

            return(result);
        }
Пример #3
0
        public void FiltersToOverride_IsIActionFilter()
        {
            // Arrange
            IOverrideFilter product = CreateProductUnderTest();

            // Act
            Type filtersToOverride = product.FiltersToOverride;

            // Assert
            Assert.Same(ExpectedFiltersToOverride, filtersToOverride);
        }
        public void TraceWriter_IsSpecifiedInstance()
        {
            // Arrange
            IOverrideFilter innerFilter         = CreateDummyInnerFilter();
            ITraceWriter    expectedTraceWriter = CreateDummyTraceWriter();
            FilterTracer    product             = CreateProductUnderTest(innerFilter, expectedTraceWriter);

            // Act
            ITraceWriter traceWriter = product.TraceWriter;

            // Assert
            Assert.Same(expectedTraceWriter, traceWriter);
        }
        public void Filter_IsSpecifiedInstance()
        {
            // Arrange
            IOverrideFilter expectedInnerFilter  = CreateDummyInnerFilter();
            ITraceWriter    traceWriter          = CreateDummyTraceWriter();
            IDecorator <IOverrideFilter> product = CreateProductUnderTest(expectedInnerFilter, traceWriter);

            // Act
            IOverrideFilter innerFilter = product.Inner;

            // Assert
            Assert.Same(expectedInnerFilter, innerFilter);
        }
        public void FiltersToOverride_IsInnerFilterSpecifiedInstance()
        {
            // Arrange
            Type            expectedFiltersToOverride = typeof(IActionFilter);
            IOverrideFilter innerFilter = CreateStubInnerFilter(expectedFiltersToOverride);
            ITraceWriter    traceWriter = CreateDummyTraceWriter();
            IOverrideFilter product     = CreateProductUnderTest(innerFilter, traceWriter);

            // Act
            Type filtersToOverride = product.FiltersToOverride;

            // Assert
            Assert.Same(expectedFiltersToOverride, filtersToOverride);
        }
Пример #7
0
        public static IEnumerable <IFilter> CreateFilterTracers(IFilter filter, ITraceWriter traceWriter)
        {
            List <IFilter> filters = new List <IFilter>();
            bool           addedActionAttributeTracer        = false;
            bool           addedAuthorizationAttributeTracer = false;
            bool           addedExceptionAttributeTracer     = false;

            ActionFilterAttribute actionFilterAttribute = filter as ActionFilterAttribute;

            if (actionFilterAttribute != null)
            {
                filters.Add(new ActionFilterAttributeTracer(actionFilterAttribute, traceWriter));
                addedActionAttributeTracer = true;
            }

            AuthorizationFilterAttribute authorizationFilterAttribute = filter as AuthorizationFilterAttribute;

            if (authorizationFilterAttribute != null)
            {
                filters.Add(new AuthorizationFilterAttributeTracer(authorizationFilterAttribute, traceWriter));
                addedAuthorizationAttributeTracer = true;
            }

            ExceptionFilterAttribute exceptionFilterAttribute = filter as ExceptionFilterAttribute;

            if (exceptionFilterAttribute != null)
            {
                filters.Add(new ExceptionFilterAttributeTracer(exceptionFilterAttribute, traceWriter));
                addedExceptionAttributeTracer = true;
            }

            // Do not add an IActionFilter tracer if we already added an ActionFilterAttribute tracer
            IActionFilter actionFilter = filter as IActionFilter;

            if (actionFilter != null && !addedActionAttributeTracer)
            {
                filters.Add(new ActionFilterTracer(actionFilter, traceWriter));
            }

            // Do not add an IAuthorizationFilter tracer if we already added an AuthorizationFilterAttribute tracer
            IAuthorizationFilter authorizationFilter = filter as IAuthorizationFilter;

            if (authorizationFilter != null && !addedAuthorizationAttributeTracer)
            {
                filters.Add(new AuthorizationFilterTracer(authorizationFilter, traceWriter));
            }

            IAuthenticationFilter authenticationFilter = filter as IAuthenticationFilter;

            if (authenticationFilter != null)
            {
                filters.Add(new AuthenticationFilterTracer(authenticationFilter, traceWriter));
            }

            // Do not add an IExceptionFilter tracer if we already added an ExceptoinFilterAttribute tracer
            IExceptionFilter exceptionFilter = filter as IExceptionFilter;

            if (exceptionFilter != null && !addedExceptionAttributeTracer)
            {
                filters.Add(new ExceptionFilterTracer(exceptionFilter, traceWriter));
            }

            IOverrideFilter overrideFilter = filter as IOverrideFilter;

            if (overrideFilter != null)
            {
                filters.Add(new OverrideFilterTracer(overrideFilter, traceWriter));
            }

            if (filters.Count == 0)
            {
                filters.Add(new FilterTracer(filter, traceWriter));
            }

            return(filters);
        }
 private static OverrideFilterTracer CreateProductUnderTest(IOverrideFilter innerFilter,
     ITraceWriter traceWriter)
 {
     return new OverrideFilterTracer(innerFilter, traceWriter);
 }