Exemplo n.º 1
0
        public void Should_not_throw_exception_when_handlerequest_is_invoked_and_pre_request_hook_is_null()
        {
            // Given
            var pipelines = new Pipelines {
                BeforeRequest = null
            };

            engine.RequestPipelinesFactory = (ctx) => pipelines;

            // When
            var request = new Request("GET", "/", "http");

            // Then
            this.engine.HandleRequest(request);
        }
Exemplo n.º 2
0
        /// <summary>
        ///     页面下载
        /// </summary>
        private void ProcessRequest(Request request, IDownLoader downLoader)
        {
            var page = downLoader.DownLoader(request, this);

            PageProcessor.Process(page);
            Scheduler.AddFinishRequest(request);
            SpiderListening.ForEach(item => item.AfterSuccess(request));

            if (page.IsSave)
            {
                Pipelines.ForEach(item => item.Process(page.PageResult));
            }

            GetPageUrl(page).ForEach(item => Scheduler.AddWaitRequest(new Request(item)));
        }
        /// <summary>
        /// Gets all <see cref="IRequestStartup"/> instances from the <see cref="IServiceContainer"/>
        /// and calls the <see cref="IRequestStartup.Initialize"/> method.
        /// </summary>
        /// <param name="context">The current <see cref="NancyContext"/>.</param>
        /// <returns><see cref="IPipelines"/>.</returns>
        protected override IPipelines InitializeRequestPipelines(NancyContext context)
        {
            var pipelines = new Pipelines(ApplicationPipelines);

            EnsureScopeIsStarted(context);

            var requestStartupTasks = serviceContainer.GetAllInstances <IRequestStartup>();

            foreach (var requestStartupTask in requestStartupTasks)
            {
                requestStartupTask.Initialize(pipelines, context);
            }

            return(pipelines);
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            var iterationCount = args.Length > 0 ? int.Parse(args[0]) : DefaultIterationCount;

            Console.WriteLine("Timing pipelines!");
            var pipelines = new Pipelines();

            var serialTimeSpan = GetSerialRunTime(pipelines, iterationCount);

            Console.WriteLine("serial run time (seconds) per iteration:" + serialTimeSpan.TotalSeconds / DefaultIterationCount);
            var serialFileSize = new FileInfo(Pipelines.SerialJson).Length;

            // var concurrentTimeSpan = GetConcurrentRunTime(pipelines, iterationCount);
            // Console.WriteLine("Concurrent queue run time (seconds) per iteration:"+ concurrentTimeSpan.TotalSeconds/iterationCount);
            // var concurrentFileSize = new FileInfo(Pipelines.ConcurrentQueueJson).Length;
            //if (concurrentFileSize != serialFileSize)
            //Console.WriteLine($"ERROR:Concurrent queue file size ({concurrentFileSize}) is different from serial ({serialFileSize})");

            // var batchTimeSpan = GetBatchRunTime(pipelines, iterationCount);
            // Console.WriteLine("Batch (parallel) run time (seconds) per iteration:" +
            //                   batchTimeSpan.TotalSeconds / DefaultIterationCount);
            // var batchFileSize = new FileInfo(Pipelines.BatchJson).Length;
            //            if (batchFileSize != serialFileSize)
            //Console.WriteLine($"ERROR:Batch parallel file size ({batchFileSize}) is different from serial ({serialFileSize})");

            // var parallelTimeSpan = GetParallelRunTime(pipelines, iterationCount);
            // Console.WriteLine("parallel run time (seconds) per iteration:" +
            //                   parallelTimeSpan.TotalSeconds / DefaultIterationCount);
            // var parallelFileSize = new FileInfo(Pipelines.ParallelJson).Length;
            // if (parallelFileSize != serialFileSize)
            //    Console.WriteLine($"ERROR:Parallel file size ({parallelFileSize}) is different from serial ({serialFileSize})");

            // var channelTimeSpan = GetChannelRunTime(pipelines, iterationCount);
            // Console.WriteLine("Channel annotator run time (seconds) per iteration:"+ channelTimeSpan.TotalSeconds/iterationCount);
            // var channelFileSize = new FileInfo(Pipelines.ChannelJson).Length;
            // if (channelFileSize != serialFileSize)
            //     Console.WriteLine($"ERROR:Channel file size ({channelFileSize}) is different from serial ({serialFileSize})");

            var batchChannelTimeSpan = GetBatchChannelRunTime(pipelines, iterationCount);

            Console.WriteLine("Batch channel annotator run time (seconds) per iteration:" + batchChannelTimeSpan.TotalSeconds / iterationCount);
            var batchChannelFileSize = new FileInfo(Pipelines.BatchChannelJson).Length;

            if (batchChannelFileSize != serialFileSize)
            {
                Console.WriteLine($"ERROR:Batch Channel file size ({batchChannelFileSize}) is different from serial ({serialFileSize})");
            }
        }
Exemplo n.º 5
0
        protected void InitComponent()
        {
            Scheduler.Init(this);

            if (Downloader == null)
            {
                Downloader = new HttpClientDownloader();
            }

            Downloader.SetThreadNum(ThreadNum);

            if (Pipelines.Count == 0)
            {
                Pipelines.Add(new FilePipeline());
            }
            if (ThreadPool == null || ThreadPool.IsShutdown)
            {
                ThreadPool = new CountableThreadPool(ThreadNum);
            }
            if (StartRequests != null)
            {
                Parallel.ForEach(StartRequests, new ParallelOptions()
                {
                    MaxDegreeOfParallelism = 100
                }, request =>
                {
                    Scheduler.Push((Request)request.Clone(), this);
                });

                ClearStartRequests();
                Logger.InfoFormat("Push Request to Scheduler success.");
            }

            if (!_registConsoleCtrlHandler)
            {
                Console.Title             = Identify;
                Console.CancelKeyPress   += Console_CancelKeyPress;
                _registConsoleCtrlHandler = true;

                //根据控制台标题找控制台
                int windowHandler = FindWindow(null, Identify);
                //找关闭按钮
                IntPtr closeMenu = GetSystemMenu((IntPtr)windowHandler, IntPtr.Zero);
                int    SC_CLOSE  = 0xF060;
                //关闭按钮禁用
                RemoveMenu(closeMenu, SC_CLOSE, 0x0);
            }
        }
Exemplo n.º 6
0
        public void Should_persist_and_unwrap_multiple_nested_original_exception_in_requestexecutionexception_with_exceptions_on_multiple_levels()
        {
            // Given
            var expectedException1       = new Exception();
            var expectedException2       = new Exception();
            var expectedException3       = new Exception();
            var expectedException4       = new Exception();
            var expectgedInnerExceptions = 4;
            var exceptionsListInner      = new List <Exception>()
            {
                expectedException1, expectedException2, expectedException3
            };
            var expectedExceptionInner = new AggregateException(exceptionsListInner);
            var exceptionsListOuter    = new List <Exception>()
            {
                expectedExceptionInner, expectedException4
            };
            var aggregateExceptionOuter = new AggregateException(exceptionsListOuter);

            var resolvedRoute = new ResolveResult(
                new FakeRoute(),
                DynamicDictionary.Empty,
                null,
                null,
                null);

            A.CallTo(() => resolver.Resolve(A <NancyContext> .Ignored)).Returns(resolvedRoute);

            A.CallTo(() => this.requestDispatcher.Dispatch(context, A <CancellationToken> ._))
            .Returns(TaskHelpers.GetFaultedTask <Response>(aggregateExceptionOuter));

            var pipelines = new Pipelines();

            pipelines.OnError.AddItemToStartOfPipeline((ctx, exception) => null);
            engine.RequestPipelinesFactory = (ctx) => pipelines;

            var request = new Request("GET", "/", "http");

            // When
            var result            = this.engine.HandleRequest(request);
            var returnedException = result.Items["ERROR_EXCEPTION"] as RequestExecutionException;

            // Then
            var returnedInnerException = returnedException.InnerException as AggregateException;

            returnedInnerException.ShouldBeOfType(typeof(AggregateException));
            Assert.Equal(expectgedInnerExceptions, returnedInnerException.InnerExceptions.Count);
        }
Exemplo n.º 7
0
        public virtual IProjectBase Compile()
        {
            var context = Factory.CompileContext(this);

            Trace.SetOut(CaptureTrace);
            try
            {
                Pipelines.GetPipeline <CompilePipeline>().Execute(context);
            }
            finally
            {
                Trace.SetOut(null);
            }

            return(this);
        }
Exemplo n.º 8
0
        public void Should_not_set_username_in_context_with_broken_encryption_data()
        {
            var fakePipelines = new Pipelines();
            var fakeMapper    = A.Fake <IUserMapper>();
            var fakeUser      = A.Fake <IUserIdentity>();

            fakeUser.UserName = "******";
            A.CallTo(() => fakeMapper.GetUserFromIdentifier(this.userGuid, this.context)).Returns(fakeUser);
            this.config.UserMapper = fakeMapper;
            FormsAuthentication.Enable(fakePipelines, this.config);
            this.context.Request.Cookies.Add(FormsAuthentication.FormsAuthenticationCookieName, this.cookieWithBrokenEncryptedData);

            var result = fakePipelines.BeforeRequest.Invoke(this.context);

            context.CurrentUser.ShouldBeNull();
        }
Exemplo n.º 9
0
        public void Should_set_user_in_context_with_valid_cookie()
        {
            var fakePipelines = new Pipelines();
            var fakeMapper    = A.Fake <IUserMapper>();
            var fakeUser      = A.Fake <IUserIdentity>();

            fakeUser.UserName = "******";
            A.CallTo(() => fakeMapper.GetUserFromIdentifier(this.userGuid, this.context)).Returns(fakeUser);
            this.config.UserMapper = fakeMapper;
            FormsAuthentication.Enable(fakePipelines, this.config);
            this.context.Request.Cookies.Add(FormsAuthentication.FormsAuthenticationCookieName, this.validCookieValue);

            var result = fakePipelines.BeforeRequest.Invoke(this.context);

            context.CurrentUser.ShouldBeSameAs(fakeUser);
        }
Exemplo n.º 10
0
        public void Squre()
        {
            var sut      = new Pipelines();
            var numbers  = new int[] { 1, 2, 3 };
            var expected = new int[] { 1, 4, 9 };
            var source   = sut.Generate(numbers);
            var sequence = sut.Squre(source).GetConsumingEnumerable();
            var i        = 0;

            foreach (var n in sequence)
            {
                Assert.Equal(expected[i], n);
                i++;
            }
            Assert.Equal(3, i);
        }
Exemplo n.º 11
0
        public void Should_invoke_the_error_request_hook_if_one_exists_when_dispatcher_throws()
        {
            // Given
            var testEx = new Exception();

            var errorRoute =
                new Route("GET", "/", null, (x, c) => { throw testEx; });

            var resolvedRoute = new ResolveResult(
                errorRoute,
                DynamicDictionary.Empty,
                null,
                null,
                null);

            A.CallTo(() => resolver.Resolve(A <NancyContext> .Ignored)).Returns(resolvedRoute);

            A.CallTo(() => this.requestDispatcher.Dispatch(context, A <CancellationToken> ._))
            .Returns(TaskHelpers.GetFaultedTask <Response>(testEx));

            Exception    handledException = null;
            NancyContext handledContext   = null;
            var          errorResponse    = new Response();

            Func <NancyContext, Exception, Response> routeErrorHook = (ctx, ex) =>
            {
                handledContext   = ctx;
                handledException = ex;
                return(errorResponse);
            };

            var pipelines = new Pipelines();

            pipelines.OnError.AddItemToStartOfPipeline(routeErrorHook);

            engine.RequestPipelinesFactory = (ctx) => pipelines;

            var request = new Request("GET", "/", "http");

            // When
            var result = this.engine.HandleRequest(request);

            // Then
            Assert.Equal(testEx, handledException);
            Assert.Equal(result, handledContext);
            Assert.Equal(result.Response, errorResponse);
        }
Exemplo n.º 12
0
        public void InitComponent()
        {
            if (_init)
            {
                return;
            }

            Console.CancelKeyPress += ConsoleCancelKeyPress;

            if (Downloader == null)
            {
                Downloader = new HttpClientDownloader();
            }

            Downloader.ThreadNum = ThreadNum;

            if (Pipelines.Count == 0)
            {
                Pipelines.Add(new FilePipeline());
            }

            if (StartRequests != null && StartRequests.Count > 0)
            {
                Logger.Info($"添加链接到调度中心, 数量: {StartRequests.Count}.");
                if ((Scheduler is QueueDuplicateRemovedScheduler) || (Scheduler is PriorityScheduler))
                {
                    Parallel.ForEach(StartRequests, new ParallelOptions()
                    {
                        MaxDegreeOfParallelism = 4
                    }, request =>
                    {
                        Scheduler.Push(request);
                    });
                }
                else
                {
                    Scheduler.Load(new HashSet <Request>(StartRequests));
                    ClearStartRequests();
                }
            }
            else
            {
                Logger.Info("添加链接到调度中心, 数量: 0.");
            }

            _init = true;
        }
        public ConsolidationMapEtlProcess(
            Table targetTable,
            string adminConnectionString,
            string publicConnectionString,
            int timeoutSecs,
            Pipelines pipelineOptions)
        {
            if (pipelineOptions.PublicConsolidation.SingleThreaded)
            {
                PipelineExecuter = new SingleThreadedPipelineExecuter();
            }

            _targetTable            = targetTable;
            _adminConnectionString  = adminConnectionString;
            _publicConnectionString = publicConnectionString;
            _timeoutSecs            = timeoutSecs;
        }
Exemplo n.º 14
0
        public static void AddLogPipelines_Should_Add_Pipelines()
        {
            // arrange
            IPipelines       pipelines = new Pipelines();
            TinyIoCContainer container = new TinyIoCContainer();

            container.Register <ICommunicationLogger, CommunicationLoggerMock>();
            container.Register(JsonUtility.CamelCaseJsonSerializerSettings);

            // act
            pipelines.AddLogPipelines(container);

            // assert
            Assert.Single(pipelines.BeforeRequest.PipelineItems);
            Assert.Equal(2, pipelines.AfterRequest.PipelineItems.ToList().Count);
            Assert.Equal(2, pipelines.OnError.PipelineItems.ToList().Count);
        }
Exemplo n.º 15
0
        public void Should_not_set_user_in_context_with_no_hmac()
        {
            var fakePipelines = new Pipelines();
            var fakeMapper    = A.Fake <IUserMapper>();
            var fakeUser      = new FakeUserIdentity {
                UserName = "******"
            };

            A.CallTo(() => fakeMapper.GetUserFromIdentifier(this.userGuid, this.context)).Returns(fakeUser);
            this.config.UserMapper = fakeMapper;
            FormsAuthentication.Enable(fakePipelines, this.config);
            this.context.Request.Cookies.Add(FormsAuthentication.FormsAuthenticationCookieName, this.cookieWithNoHmac);

            var result = fakePipelines.BeforeRequest.Invoke(this.context, new CancellationToken());

            context.CurrentUser.ShouldBeNull();
        }
Exemplo n.º 16
0
        protected override void InitPipelines(params string[] arguments)
        {
            if (Pipelines == null || Pipelines.Count == 0)
            {
                var defaultPipeline = GetDefaultPipeline();
                if (defaultPipeline != null)
                {
                    Pipelines.Add(defaultPipeline);
                }
            }

            if (!arguments.Contains("skip"))
            {
                var entityProcessors = PageProcessors.Where(p => p is IEntityProcessor).ToList();
                var entityPipelines  = Pipelines.Where(p => p is BaseEntityPipeline).ToList();

                if (entityProcessors.Count != 0 && entityPipelines.Count == 0)
                {
                    throw new SpiderException("You may miss a entity pipeline.");
                }
                foreach (var processor in entityProcessors)
                {
                    foreach (var pipeline in entityPipelines)
                    {
                        var entityProcessor = processor as IEntityProcessor;
                        if (pipeline is BaseEntityPipeline newPipeline)
                        {
                            if (entityProcessor != null)
                            {
                                newPipeline.AddEntity(entityProcessor.EntityDefine);
                            }
                        }
                    }
                }
            }

            if (PageProcessors == null || PageProcessors.Count == 0)
            {
                throw new SpiderException("Count of PageProcessor is zero.");
            }

            foreach (var pipeline in Pipelines)
            {
                pipeline.InitPipeline(this);
            }
        }
Exemplo n.º 17
0
        private static TimeSpan GetParallelRunTime(Pipelines pipelines, int iterationCount)
        {
            Console.WriteLine("running in parallel");
            var tick = DateTime.Now;

            for (int i = 0; i < iterationCount; i++)
            {
                pipelines.ParallelAnnotation();
                //Console.WriteLine($"completed run {i + 1}");
            }

            var tock = DateTime.Now;

            var batchTimeSpan = new TimeSpan(tock.Ticks - tick.Ticks);

            return(batchTimeSpan);
        }
Exemplo n.º 18
0
        public NancyEngineFixture()
        {
            this.environment =
                new DefaultNancyEnvironment();

            this.environment.Tracing(
                enabled: true,
                displayErrorTraces: true);

            this.resolver          = A.Fake <IRouteResolver>();
            this.response          = new Response();
            this.route             = new FakeRoute(response);
            this.context           = new NancyContext();
            this.statusCodeHandler = A.Fake <IStatusCodeHandler>();
            this.requestDispatcher = A.Fake <IRequestDispatcher>();
            this.negotiator        = A.Fake <IResponseNegotiator>();

            A.CallTo(() => this.requestDispatcher.Dispatch(A <NancyContext> ._, A <CancellationToken> ._))
            .Returns(Task.FromResult(new Response()));

            A.CallTo(() => this.statusCodeHandler.HandlesStatusCode(A <HttpStatusCode> .Ignored, A <NancyContext> .Ignored)).Returns(false);

            contextFactory = A.Fake <INancyContextFactory>();
            A.CallTo(() => contextFactory.Create(A <Request> ._)).Returns(context);

            var resolveResult = new ResolveResult {
                Route = route, Parameters = DynamicDictionary.Empty, Before = null, After = null, OnError = null
            };

            A.CallTo(() => resolver.Resolve(A <NancyContext> .Ignored)).Returns(resolveResult);

            var applicationPipelines = new Pipelines();

            this.routeInvoker = A.Fake <IRouteInvoker>();

            A.CallTo(() => this.routeInvoker.Invoke(A <Route> ._, A <CancellationToken> ._, A <DynamicDictionary> ._, A <NancyContext> ._)).ReturnsLazily(arg =>
            {
                return(((Route)arg.Arguments[0]).Action.Invoke((DynamicDictionary)arg.Arguments[1], A <CancellationToken> ._).Result);
            });

            this.engine =
                new NancyEngine(this.requestDispatcher, this.contextFactory, new[] { this.statusCodeHandler }, A.Fake <IRequestTracing>(), new DisabledStaticContentProvider(), this.negotiator, this.environment)
            {
                RequestPipelinesFactory = ctx => applicationPipelines
            };
        }
Exemplo n.º 19
0
        public PublicStagingEtlProcess(
            Table targetTable,
            string adminConnectionString,
            string publicConnectionString,
            int timeoutSecs,
            Pipelines pipelineOptions)
        {
            if (pipelineOptions.PublicStaging.SingleThreaded)
            {
                PipelineExecuter = new SingleThreadedPipelineExecuter();
            }

            _targetTable            = targetTable;
            _adminConnectionString  = adminConnectionString;
            _publicConnectionString = publicConnectionString;
            _timeoutSecs            = timeoutSecs;
            _rowCountAndDuration    = new RowCountAndDuration();
        }
Exemplo n.º 20
0
        public async Task Should_allow_post_request_hook_to_replace_response()
        {
            // Given
            var newResponse = new Response();

            var pipelines = new Pipelines();

            pipelines.BeforeRequest.AddItemToStartOfPipeline(ctx => ctx.Response = newResponse);
            engine.RequestPipelinesFactory = (ctx) => pipelines;

            var request = new Request("GET", "/", "http");

            // When
            var result = await this.engine.HandleRequest(request);

            // Then
            result.Response.ShouldBeSameAs(newResponse);
        }
Exemplo n.º 21
0
        public void FanIn()
        {
            var sut       = new Pipelines();
            var numbers   = new int[] { 1, 2, 3, 4 };
            var expected  = new int[] { 1, 4, 9, 16 };
            var source    = sut.Generate(numbers);
            var sequence1 = sut.Squre(source);
            var sequence2 = sut.Squre(source);
            var count     = 0;
            var merged    = sut.FanIn(sequence1, sequence2).GetConsumingEnumerable();

            foreach (var n in merged)
            {
                Assert.Contains(n, expected);
                count++;
            }
            Assert.Equal(4, count);
        }
        /// <summary>
        /// Checks existence and validity of the admin database...
        /// </summary>
        public static void Execute(
            string connectionString, int commandTimeout, int maxDegreeOfParallelism, Pipelines pipelineOptions)
        {
            _log.Debug("Checking existence and validity of admin database");

            // Check that db is the current version...
            var ctrl = new ControlSchema(connectionString, commandTimeout, maxDegreeOfParallelism, pipelineOptions);
            int ver  = ctrl.GetDatabaseVersion();

            _log.DebugFormat("Admin database version = {0}", ver);

            if (ver > 0 && ver != ControlSchema.LatestAdminDbVersion)
            {
                throw new ApplicationException($"Admin database version = {ver}, expecting {ControlSchema.LatestAdminDbVersion}");
            }

            _log.Debug("Admin database version is correct");
        }
Exemplo n.º 23
0
        /// <summary>
        /// Download urls synchronizing.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="urls"></param>
        /// <returns></returns>
        public IList <T> GetAll <T>(params string[] urls)
        {
            DestroyWhenExit = false;
            SpawnUrl        = false;

            foreach (Request request in UrlUtils.ConvertToRequests(urls))
            {
                AddRequest(request);
            }
            ICollectorPipeline collectorPipeline = GetCollectorPipeline();

            Pipelines.Add(collectorPipeline);
            Run();
            SpawnUrl        = true;
            DestroyWhenExit = true;
            ICollection collection = collectorPipeline.GetCollected();

            return((from object o in collection select(T) o).ToList());
        }
Exemplo n.º 24
0
 public void Clear()
 {
     Renderpasses.Clear();
     Pipelines.Clear();
     StencilWrites.Clear();
     Viewports.Clear();
     Scissors.Clear();
     DepthBias.Clear();
     LineWidths.Clear();
     DepthBounds.Clear();
     BlendConstants.Clear();
     VAOs.Clear();
     StencilFunctions.Clear();
     Draws.Clear();
     DrawIndexeds.Clear();
     DrawIndirects.Clear();
     DrawIndexedIndirects.Clear();
     DescriptorSets.Clear();
 }
Exemplo n.º 25
0
        public static void AddHandlerExceptionsPipelines_Should_Add_Pipelines()
        {
            // arrange
            var pipelines = new Pipelines();
            var container = new TinyIoCContainer();

            container.Register <ICommunicationLogger, CommunicationLoggerMock>();
            container.Register(JsonUtility.CamelCaseJsonSerializerSettings);
            var context = NancyContextMock.Create();

            // act
            pipelines.AddHandlerExceptionsPipelines(container);
            pipelines.OnError.Invoke(context, null);

            // assert
            Assert.Single(pipelines.OnError.PipelineItems);
            Assert.Empty(pipelines.AfterRequest.PipelineItems);
            Assert.Empty(pipelines.BeforeRequest.PipelineItems);
        }
Exemplo n.º 26
0
        public void Should_retain_querystring_when_redirecting_to_login_page()
        {
            // Given
            var fakePipelines = new Pipelines();

            FormsAuthentication.Enable(fakePipelines, this.config);

            var queryContext = new NancyContext()
            {
                Request  = new FakeRequest("GET", "/secure", "?foo=bar"),
                Response = HttpStatusCode.Unauthorized
            };

            // When
            fakePipelines.AfterRequest.Invoke(queryContext, new CancellationToken());

            // Then
            queryContext.Response.Headers["Location"].ShouldEqual("/login?returnUrl=/secure%3ffoo%3dbar");
        }
Exemplo n.º 27
0
        public async Task Should_return_response_from_pre_request_hook_when_not_null()
        {
            // Given
            var returnedResponse = A.Fake <Response>();

            var pipelines = new Pipelines();

            pipelines.BeforeRequest.AddItemToStartOfPipeline(ctx => returnedResponse);

            engine.RequestPipelinesFactory = (ctx) => pipelines;

            var request = new Request("GET", "/", "http");

            // When
            var result = await this.engine.HandleRequest(request);

            // Then
            result.Response.ShouldBeSameAs(returnedResponse);
        }
Exemplo n.º 28
0
        public void Should_change_the_forms_authentication_redirect_uri_querystring_key_returnUrl_if_config_redirectQuerystringKey_is_empty()
        {
            // Given
            var fakePipelines = new Pipelines();

            this.config.RedirectQuerystringKey = string.Empty;
            FormsAuthentication.Enable(fakePipelines, this.config);

            var queryContext = new NancyContext()
            {
                Request  = new FakeRequest("GET", "/secure", "?foo=bar"),
                Response = HttpStatusCode.Unauthorized
            };

            // When
            fakePipelines.AfterRequest.Invoke(queryContext, new CancellationToken());

            // Then
            queryContext.Response.Headers["Location"].ShouldEqual("/login?returnUrl=/secure%3ffoo%3dbar");
        }
Exemplo n.º 29
0
        public void Should_change_the_forms_authentication_redirect_uri_querystring_key()
        {
            // Given
            var fakePipelines = new Pipelines();

            this.config.RedirectQuerystringKey = "next";
            FormsAuthentication.Enable(fakePipelines, this.config);

            var queryContext = new NancyContext()
            {
                Request = new FakeRequest("GET", "/secure", "?foo=bar"),
                Response = HttpStatusCode.Unauthorized
            };

            // When
            fakePipelines.AfterRequest.Invoke(queryContext);

            // Then
            queryContext.Response.Headers["Location"].ShouldEqual("/login?next=/secure%3ffoo%3dbar");
        }
Exemplo n.º 30
0
        public async Task HandleRequest_prereq_returns_response_should_still_run_postreq()
        {
            // Given
            var returnedResponse = A.Fake <Response>();
            var postReqCalled    = false;

            var pipelines = new Pipelines();

            pipelines.BeforeRequest.AddItemToStartOfPipeline(ctx => returnedResponse);
            pipelines.AfterRequest.AddItemToEndOfPipeline(ctx => postReqCalled = true);

            engine.RequestPipelinesFactory = (ctx) => pipelines;

            var request = new Request("GET", "/", "http");

            // When
            await this.engine.HandleRequest(request);

            // Then
            postReqCalled.ShouldBeTrue();
        }
Exemplo n.º 31
0
        public async Task Should_allow_post_request_hook_to_modify_context_items()
        {
            // Given
            var pipelines = new Pipelines();

            pipelines.BeforeRequest.AddItemToStartOfPipeline(ctx =>
            {
                ctx.Items.Add("PostReqTest", new object());
                return(null);
            });

            engine.RequestPipelinesFactory = (ctx) => pipelines;

            var request = new Request("GET", "/", "http");

            // When
            var result = await this.engine.HandleRequest(request);

            // Then
            result.Items.ContainsKey("PostReqTest").ShouldBeTrue();
        }
        public void Should_set_user_in_context_with_valid_cookie()
        {
            var fakePipelines = new Pipelines();
            var fakeMapper = A.Fake<IUserMapper>();
            var fakeUser = new FakeUserIdentity {UserName = "******"};
            A.CallTo(() => fakeMapper.GetUserFromIdentifier(this.userGuid, this.context)).Returns(fakeUser);
            this.config.UserMapper = fakeMapper;
            FormsAuthentication.Enable(fakePipelines, this.config);
            this.context.Request.Cookies.Add(FormsAuthentication.FormsAuthenticationCookieName, this.validCookieValue);

            var result = fakePipelines.BeforeRequest.Invoke(this.context, new CancellationToken());

            context.CurrentUser.ShouldBeSameAs(fakeUser);
        }
Exemplo n.º 33
0
        public void Should_not_set_user_in_context_with_empty_hmac()
        {
            var fakePipelines = new Pipelines();
            var fakeMapper = A.Fake<IUserMapper>();
            var fakeUser = new ClaimsPrincipal(new GenericIdentity("Bob"));
            A.CallTo(() => fakeMapper.GetUserFromIdentifier(this.userGuid, this.context)).Returns(fakeUser);
            this.config.UserMapper = fakeMapper;
            FormsAuthentication.Enable(fakePipelines, this.config);
            this.context.Request.Cookies.Add(FormsAuthentication.FormsAuthenticationCookieName, this.cookieWithEmptyHmac);

            var result = fakePipelines.BeforeRequest.Invoke(this.context, new CancellationToken());

            context.CurrentUser.ShouldBeNull();
        }
Exemplo n.º 34
0
        public void Should_not_set_user_in_context_with_no_hmac()
        {
            var fakePipelines = new Pipelines();
            var fakeMapper = A.Fake<IUserMapper>();
            var fakeUser = A.Fake<IUserIdentity>();
            fakeUser.UserName = "******";
            A.CallTo(() => fakeMapper.GetUserFromIdentifier(this.userGuid, this.context)).Returns(fakeUser);
            this.config.UserMapper = fakeMapper;
            FormsAuthentication.Enable(fakePipelines, this.config);
            this.context.Request.Cookies.Add(FormsAuthentication.FormsAuthenticationCookieName, this.cookieWithNoHmac);

            var result = fakePipelines.BeforeRequest.Invoke(this.context);

            context.CurrentUser.ShouldBeNull();
        }
        public void Should_get_username_from_mapping_service_with_valid_cookie()
        {
            var fakePipelines = new Pipelines();
            var mockMapper = A.Fake<IUserMapper>();
            this.config.UserMapper = mockMapper;
            FormsAuthentication.Enable(fakePipelines, this.config);
            this.context.Request.Cookies.Add(FormsAuthentication.FormsAuthenticationCookieName, this.validCookieValue);

            fakePipelines.BeforeRequest.Invoke(this.context, new CancellationToken());

            A.CallTo(() => mockMapper.GetUserFromIdentifier(this.userGuid, this.context))
                .MustHaveHappened(Repeated.Exactly.Once);
        }
        public void Should_retain_querystring_when_redirecting_to_login_page()
        {
            // Given
            var fakePipelines = new Pipelines();

            FormsAuthentication.Enable(fakePipelines, this.config);

            var queryContext = new NancyContext()
            {
                Request = new FakeRequest("GET", "/secure", "?foo=bar"),
                Response = HttpStatusCode.Unauthorized
            };

            // When
            fakePipelines.AfterRequest.Invoke(queryContext, new CancellationToken());

            // Then
            queryContext.Response.Headers["Location"].ShouldEqual("/login?returnUrl=/secure%3ffoo%3dbar");
        }
        public void Should_not_set_username_in_context_with_broken_encryption_data()
        {
            var fakePipelines = new Pipelines();
            var fakeMapper = A.Fake<IUserMapper>();
            var fakeUser = new FakeUserIdentity { UserName = "******" };
            A.CallTo(() => fakeMapper.GetUserFromIdentifier(this.userGuid, this.context)).Returns(fakeUser);
            this.config.UserMapper = fakeMapper;
            FormsAuthentication.Enable(fakePipelines, this.config);
            this.context.Request.Cookies.Add(FormsAuthentication.FormsAuthenticationCookieName, this.cookieWithBrokenEncryptedData);

            var result = fakePipelines.BeforeRequest.Invoke(this.context, new CancellationToken());

            context.CurrentUser.ShouldBeNull();
        }