Skip to content

Commit

Permalink
ThreeMammals#555 added some tests for this issue but struggling to re…
Browse files Browse the repository at this point in the history
…plicate (ThreeMammals#570)

* ThreeMammals#555 added some tests for this issue but struggling to replicate

* ThreeMammals#555 removed cmd=instance from service fabric code as someone who knows service fabric says its not needed
I

* ThreeMammals#555 renamed test
  • Loading branch information
TomPallister authored Aug 25, 2018
1 parent b0bdeb9 commit 369fc5b
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -117,24 +117,12 @@ private bool ContainsQueryString(DownstreamPath dsPath)
{
var query = context.DownstreamRequest.Query;
var serviceFabricPath = $"/{context.DownstreamReRoute.ServiceName + dsPath.Data.Value}";

if (RequestForStatefullService(query))
{
return (serviceFabricPath, query);
}

var split = string.IsNullOrEmpty(query) ? "?" : "&";
return (serviceFabricPath, $"{query}{split}cmd=instance");
return (serviceFabricPath, query);
}

private static bool ServiceFabricRequest(DownstreamContext context)
{
return context.Configuration.ServiceProviderConfiguration.Type == "ServiceFabric" && context.DownstreamReRoute.UseServiceDiscovery;
}

private static bool RequestForStatefullService(string query)
{
return query.Contains("PartitionKind") && query.Contains("PartitionKey");
}
}
}
41 changes: 39 additions & 2 deletions test/Ocelot.AcceptanceTests/ServiceFabricTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,43 @@ public ServiceFabricTests()
_steps = new Steps();
}

[Fact]
public void should_fix_issue_555()
{
var configuration = new FileConfiguration
{
ReRoutes = new List<FileReRoute>
{
new FileReRoute
{
DownstreamPathTemplate = "/{everything}",
DownstreamScheme = "http",
UpstreamPathTemplate = "/{everything}",
UpstreamHttpMethod = new List<string> { "Get" },
UseServiceDiscovery = true,
ServiceName = "OcelotServiceApplication/OcelotApplicationService"
}
},
GlobalConfiguration = new FileGlobalConfiguration
{
ServiceDiscoveryProvider = new FileServiceDiscoveryProvider()
{
Host = "localhost",
Port = 19081,
Type = "ServiceFabric"
}
}
};

this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:19081", "/OcelotServiceApplication/OcelotApplicationService/a", 200, "Hello from Laura", "b=c"))
.And(x => _steps.GivenThereIsAConfiguration(configuration))
.And(x => _steps.GivenOcelotIsRunning())
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/a?b=c"))
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK))
.And(x => _steps.ThenTheResponseBodyShouldBe("Hello from Laura"))
.BDDfy();
}

[Fact]
public void should_support_service_fabric_naming_and_dns_service_stateless_and_guest()
{
Expand Down Expand Up @@ -48,10 +85,10 @@ public void should_support_service_fabric_naming_and_dns_service_stateless_and_g
}
};

this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:19081", "/OcelotServiceApplication/OcelotApplicationService/api/values", 200, "Hello from Laura", "cmd=instance"))
this.Given(x => x.GivenThereIsAServiceRunningOn("http://localhost:19081", "/OcelotServiceApplication/OcelotApplicationService/api/values", 200, "Hello from Laura", "test=best"))
.And(x => _steps.GivenThereIsAConfiguration(configuration))
.And(x => _steps.GivenOcelotIsRunning())
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/EquipmentInterfaces"))
.When(x => _steps.WhenIGetUrlOnTheApiGateway("/EquipmentInterfaces?test=best"))
.Then(x => _steps.ThenTheStatusCodeShouldBe(HttpStatusCode.OK))
.And(x => _steps.ThenTheResponseBodyShouldBe("Hello from Laura"))
.BDDfy();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ public void should_create_service_fabric_url()
.And(x => x.GivenTheDownstreamRequestUriIs("http://localhost:19081"))
.And(x => x.GivenTheUrlReplacerWillReturn("/api/products/1"))
.When(x => x.WhenICallTheMiddleware())
.Then(x => x.ThenTheDownstreamRequestUriIs("http://localhost:19081/Ocelot/OcelotApp/api/products/1?cmd=instance"))
.Then(x => x.ThenTheDownstreamRequestUriIs("http://localhost:19081/Ocelot/OcelotApp/api/products/1"))
.BDDfy();
}

Expand Down Expand Up @@ -255,7 +255,7 @@ public void should_create_service_fabric_url_with_query_string_for_stateless_ser
.And(x => x.GivenTheDownstreamRequestUriIs("http://localhost:19081?Tom=test&laura=1"))
.And(x => x.GivenTheUrlReplacerWillReturn("/api/products/1"))
.When(x => x.WhenICallTheMiddleware())
.Then(x => x.ThenTheDownstreamRequestUriIs("http://localhost:19081/Ocelot/OcelotApp/api/products/1?Tom=test&laura=1&cmd=instance"))
.Then(x => x.ThenTheDownstreamRequestUriIs("http://localhost:19081/Ocelot/OcelotApp/api/products/1?Tom=test&laura=1"))
.BDDfy();
}

Expand Down
21 changes: 21 additions & 0 deletions test/Ocelot.UnitTests/Request/DownstreamRequestTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using System;
using System.Net.Http;
using Ocelot.Request.Middleware;
using Shouldly;
using Xunit;

namespace Ocelot.UnitTests.Request
{
public class DownstreamRequestTests
{
[Fact]
public void should_have_question_mark_with_question_mark_prefixed()
{
var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.RequestUri = new Uri("https://example.com/a?b=c");
var downstreamRequest = new DownstreamRequest(httpRequestMessage);
var result = downstreamRequest.ToHttpRequestMessage();
result.RequestUri.Query.ShouldBe("?b=c");
}
}
}

0 comments on commit 369fc5b

Please sign in to comment.