Example #1
0
 public void Get_via_internal_routing_follows_301_but_expects_query_to_be_in_location()
 {
     using (var hostInfo = DreamTestHelper.CreateRandomPortHost()) {
         var mock           = MockService.CreateMockService(hostInfo);
         var redirectCalled = 0;
         var targetCalled   = 0;
         mock.Service.CatchAllCallback = delegate(DreamContext context, DreamMessage request, Result <DreamMessage> response) {
             var msg     = "nothing here";
             var q       = context.Uri.GetParam("q");
             var forward = context.Uri.GetParam("forward");
             if (context.Uri.LastSegment == "redirect")
             {
                 _log.Debug("called redirect");
                 var redirect = context.Service.Self.Uri.At("target").AsPublicUri();
                 if (forward == "true")
                 {
                     redirect = redirect.With("q", q);
                 }
                 redirectCalled++;
                 var headers = new DreamHeaders();
                 headers.Add(DreamHeaders.LOCATION, redirect.ToString());
                 response.Return(new DreamMessage(DreamStatus.MovedPermanently, headers));
                 return;
             }
             if (context.Uri.LastSegment == "target")
             {
                 _log.Debug("called target");
                 if (q == "x")
                 {
                     _log.Debug("target request had query");
                     targetCalled++;
                     response.Return(DreamMessage.Ok());
                     return;
                 }
                 response.Return(DreamMessage.BadRequest("missing query param"));
                 return;
             }
             _log.DebugFormat("called uri: {0} => {1}", context.Uri, msg);
             response.Return(DreamMessage.NotFound(msg));
         };
         var uri = mock.AtLocalMachine.At("redirect");
         _log.DebugFormat("calling redirect service at {0}", uri);
         var r = Plug.New(uri).With("q", "x").Get(new Result <DreamMessage>()).Wait();
         Assert.AreEqual(DreamStatus.BadRequest, r.Status);
         Assert.AreEqual(1, redirectCalled, "redirect without forward called incorrectly");
         Assert.AreEqual(0, targetCalled, "target without forward called incorrectly");
         redirectCalled = 0;
         targetCalled   = 0;
         r = Plug.New(uri).With("q", "x").With("forward", "true").Get(new Result <DreamMessage>()).Wait();
         Assert.IsTrue(r.IsSuccessful, r.HasDocument ? r.ToDocument()["message"].AsText : "request failed: " + r.Status);
         Assert.AreEqual(1, redirectCalled, "redirect with forward called incorrectly");
         Assert.AreEqual(1, targetCalled, "target with forward called incorrectly");
     }
 }
Example #2
0
 public void Get_via_internal_routing_follows_301_and_forwards_headers()
 {
     using (var hostInfo = DreamTestHelper.CreateRandomPortHost()) {
         var mock           = MockService.CreateMockService(hostInfo);
         var redirectCalled = 0;
         var targetCalled   = 0;
         mock.Service.CatchAllCallback = delegate(DreamContext context, DreamMessage request, Result <DreamMessage> response) {
             var msg = "nothing here";
             var h   = request.Headers["h"];
             if (context.Uri.LastSegment == "redirect")
             {
                 _log.Debug("called redirect");
                 if (h == "y")
                 {
                     redirectCalled++;
                     var headers = new DreamHeaders();
                     headers.Add(DreamHeaders.LOCATION, context.Service.Self.Uri.At("target").AsPublicUri().ToString());
                     response.Return(new DreamMessage(DreamStatus.MovedPermanently, headers));
                     return;
                 }
                 msg = "redirect request lacked header";
             }
             if (context.Uri.LastSegment == "target")
             {
                 _log.Debug("called target");
                 if (h == "y")
                 {
                     _log.Debug("target request had header");
                     targetCalled++;
                     response.Return(DreamMessage.Ok());
                     return;
                 }
                 msg = "target request lacked header ({1}";
             }
             _log.DebugFormat("called uri: {0} => {1}", context.Uri, msg);
             response.Return(DreamMessage.NotFound(msg));
         };
         var uri = mock.AtLocalMachine.At("redirect");
         _log.DebugFormat("calling redirect service at {0}", uri);
         var r = Plug.New(uri).WithHeader("h", "y").Get(new Result <DreamMessage>()).Wait();
         Assert.IsTrue(r.IsSuccessful, r.HasDocument ? r.ToDocument()["message"].AsText : "request failed: " + r.Status);
         Assert.AreEqual(1, redirectCalled, "redirect called incorrectly");
         Assert.AreEqual(1, targetCalled, "target called incorrectly");
     }
 }
Example #3
0
 public void Get_via_internal_routing_follows_301_but_expects_query_to_be_in_location()
 {
     using(var hostInfo = DreamTestHelper.CreateRandomPortHost()) {
         var mock = MockService.CreateMockService(hostInfo);
         var redirectCalled = 0;
         var targetCalled = 0;
         mock.Service.CatchAllCallback = delegate(DreamContext context, DreamMessage request, Result<DreamMessage> response) {
             var msg = "nothing here";
             var q = context.Uri.GetParam("q");
             var forward = context.Uri.GetParam("forward");
             if(context.Uri.LastSegment == "redirect") {
                 _log.Debug("called redirect");
                 var redirect = context.Service.Self.Uri.At("target").AsPublicUri();
                 if(forward == "true") {
                     redirect = redirect.With("q", q);
                 }
                 redirectCalled++;
                 var headers = new DreamHeaders();
                 headers.Add(DreamHeaders.LOCATION, redirect.ToString());
                 response.Return(new DreamMessage(DreamStatus.MovedPermanently, headers));
                 return;
             }
             if(context.Uri.LastSegment == "target") {
                 _log.Debug("called target");
                 if(q == "x") {
                     _log.Debug("target request had query");
                     targetCalled++;
                     response.Return(DreamMessage.Ok());
                     return;
                 }
                 response.Return(DreamMessage.BadRequest("missing query param"));
                 return;
             }
             _log.DebugFormat("called uri: {0} => {1}", context.Uri, msg);
             response.Return(DreamMessage.NotFound(msg));
         };
         var uri = mock.AtLocalMachine.At("redirect");
         _log.DebugFormat("calling redirect service at {0}", uri);
         var r = Plug.New(uri).With("q", "x").GetAsync().Wait();
         Assert.AreEqual(DreamStatus.BadRequest, r.Status);
         Assert.AreEqual(1, redirectCalled, "redirect without forward called incorrectly");
         Assert.AreEqual(0, targetCalled, "target without forward called incorrectly");
         redirectCalled = 0;
         targetCalled = 0;
         r = Plug.New(uri).With("q", "x").With("forward", "true").GetAsync().Wait();
         Assert.IsTrue(r.IsSuccessful, r.HasDocument ? r.ToDocument()["message"].AsText : "request failed: " + r.Status);
         Assert.AreEqual(1, redirectCalled, "redirect with forward called incorrectly");
         Assert.AreEqual(1, targetCalled, "target with forward called incorrectly");
     }
 }
Example #4
0
File: Plug.cs Project: bjorg/DReAM
 /// <summary>
 /// Create a copy of the instance with a header added.
 /// </summary>
 /// <param name="name">Header name.</param>
 /// <param name="value">Header value.</param>
 /// <returns>New instance.</returns>
 public Plug WithHeader(string name, string value) {
     if(name == null) {
         throw new ArgumentNullException("name");
     }
     if(value == null) {
         throw new ArgumentNullException("value");
     }
     DreamHeaders newHeaders = new DreamHeaders(_headers);
     newHeaders.Add(name, value);
     return new Plug(Uri, Timeout, newHeaders, _preHandlers, _postHandlers, Credentials, _cookieJarOverride, MaxAutoRedirects);
 }
Example #5
0
 public void Get_via_internal_routing_follows_301_and_forwards_headers()
 {
     using(var hostInfo = DreamTestHelper.CreateRandomPortHost()) {
         var mock = MockService.CreateMockService(hostInfo);
         var redirectCalled = 0;
         var targetCalled = 0;
         mock.Service.CatchAllCallback = delegate(DreamContext context, DreamMessage request, Result<DreamMessage> response) {
             var msg = "nothing here";
             var h = request.Headers["h"];
             if(context.Uri.LastSegment == "redirect") {
                 _log.Debug("called redirect");
                 if(h == "y") {
                     redirectCalled++;
                     var headers = new DreamHeaders();
                     headers.Add(DreamHeaders.LOCATION, context.Service.Self.Uri.At("target").AsPublicUri().ToString());
                     response.Return(new DreamMessage(DreamStatus.MovedPermanently, headers));
                     return;
                 }
                 msg = "redirect request lacked header";
             }
             if(context.Uri.LastSegment == "target") {
                 _log.Debug("called target");
                 if(h == "y") {
                     _log.Debug("target request had header");
                     targetCalled++;
                     response.Return(DreamMessage.Ok());
                     return;
                 }
                 msg = "target request lacked header ({1}";
             }
             _log.DebugFormat("called uri: {0} => {1}", context.Uri, msg);
             response.Return(DreamMessage.NotFound(msg));
         };
         var uri = mock.AtLocalMachine.At("redirect");
         _log.DebugFormat("calling redirect service at {0}", uri);
         var r = Plug.New(uri).WithHeader("h", "y").GetAsync().Wait();
         Assert.IsTrue(r.IsSuccessful, r.HasDocument ? r.ToDocument()["message"].AsText : "request failed: " + r.Status);
         Assert.AreEqual(1, redirectCalled, "redirect called incorrectly");
         Assert.AreEqual(1, targetCalled, "target called incorrectly");
     }
 }