Skip to content

Commit

Permalink
Merge f5af3c0 into 7d8002a
Browse files Browse the repository at this point in the history
  • Loading branch information
magnus-tretton37 committed Mar 28, 2019
2 parents 7d8002a + f5af3c0 commit 3c4696c
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 33 deletions.
5 changes: 2 additions & 3 deletions src/Castle.Sdk/Actions/Authenticate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ namespace Castle.Actions
internal static class Authenticate
{
public static async Task<Verdict> Execute(
Func<JObject, Task<Verdict>> send,
JObject request,
Func<Task<Verdict>> send,
CastleConfiguration configuration,
IInternalLogger logger)
{
Expand All @@ -22,7 +21,7 @@ internal static class Authenticate

try
{
return await send(request);
return await send();
}
catch (Exception e)
{
Expand Down
6 changes: 2 additions & 4 deletions src/Castle.Sdk/Actions/Track.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,16 @@
using System.Threading.Tasks;
using Castle.Config;
using Castle.Messages.Responses;
using Newtonsoft.Json.Linq;

namespace Castle.Actions
{
internal static class Track
{
public static async Task<VoidResponse> Execute(
Func<JObject, Task<VoidResponse>> send,
JObject request,
Func<Task<VoidResponse>> send,
CastleConfiguration configuration)
{
return await send(request);
return await send();
}
}
}
6 changes: 2 additions & 4 deletions src/Castle.Sdk/CastleClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ public JObject BuildAuthenticateRequest(ActionRequest request)
public async Task<Verdict> SendAuthenticateRequest(JObject request)
{
return await TryRequest(() => Actions.Authenticate.Execute(
req => _messageSender.Post<Verdict>("/v1/authenticate", req),
request,
() => _messageSender.Post<Verdict>("/v1/authenticate", request),
_configuration,
_logger));
}
Expand All @@ -58,8 +57,7 @@ public JObject BuildTrackRequest(ActionRequest request)
public async Task SendTrackRequest(JObject request)
{
await TryRequest(() => Actions.Track.Execute(
req => _messageSender.Post<VoidResponse>("/v1/track", req),
request,
() => _messageSender.Post<VoidResponse>("/v1/track", request),
_configuration));
}

Expand Down
30 changes: 12 additions & 18 deletions src/Tests/Actions/When_authenticating.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,97 +18,91 @@ public class When_authenticating
{
[Theory, AutoFakeData]
public async Task Should_return_response_if_successful(
JObject request,
CastleConfiguration configuration,
Verdict response)
{
Task<Verdict> Send(JObject req) => Task.FromResult(response);
Task<Verdict> Send() => Task.FromResult(response);
var logger = Substitute.For<IInternalLogger>();

var result = await Authenticate.Execute(Send, request, configuration, logger);
var result = await Authenticate.Execute(Send, configuration, logger);

result.Should().Be(response);
}

[Theory, AutoFakeData]
public async Task Should_return_failover_response_if_timeout(
JObject request,
string requestUri,
CastleConfiguration configuration)
{
configuration.FailOverStrategy = ActionType.Allow;
var logger = Substitute.For<IInternalLogger>();

Task<Verdict> Send(JObject req) => throw new CastleTimeoutException(requestUri, configuration.Timeout);
Task<Verdict> Send() => throw new CastleTimeoutException(requestUri, configuration.Timeout);

var result = await Authenticate.Execute(Send, request, configuration, logger);
var result = await Authenticate.Execute(Send, configuration, logger);

result.Failover.Should().Be(true);
result.FailoverReason.Should().Be("timeout");
}

[Theory, AutoFakeData]
public async Task Should_return_failover_response_if_any_exception(
JObject request,
Exception exception,
CastleConfiguration configuration)
{
configuration.FailOverStrategy = ActionType.Allow;
var logger = Substitute.For<IInternalLogger>();

Task<Verdict> Send(JObject req) => throw exception;
Task<Verdict> Send() => throw exception;

var result = await Authenticate.Execute(Send, request, configuration, logger);
var result = await Authenticate.Execute(Send, configuration, logger);

result.Failover.Should().Be(true);
result.FailoverReason.Should().Be("server error");
}

[Theory, AutoFakeData]
public async Task Should_log_failover_exception_as_warning(
JObject request,
Exception exception,
CastleConfiguration configuration)
{
configuration.FailOverStrategy = ActionType.Allow;
var logger = Substitute.For<IInternalLogger>();

Task<Verdict> Send(JObject req) => throw exception;
Task<Verdict> Send() => throw exception;

await Authenticate.Execute(Send, request, configuration, logger);
await Authenticate.Execute(Send, configuration, logger);

logger.Received().Warn(Arg.Is<Func<string>>(x => x() == "Failover, " + exception));
}

[Theory, AutoFakeData]
public async Task Should_throw_exception_if_failing_over_with_no_strategy(
JObject request,
Exception exception,
CastleConfiguration configuration)
{
configuration.FailOverStrategy = ActionType.None;
var logger = Substitute.For<IInternalLogger>();

Task<Verdict> Send(JObject req) => throw exception;
Task<Verdict> Send() => throw exception;

Func<Task> act = async () => await Authenticate.Execute(Send, request, configuration, logger);
Func<Task> act = async () => await Authenticate.Execute(Send, configuration, logger);

await act.Should().ThrowAsync<CastleExternalException>();
}

[Theory, AutoFakeData]
public async Task Should_return_failover_response_if_do_not_track_is_set(
JObject request,
CastleConfiguration configuration,
Verdict response)
{
configuration.DoNotTrack = true;
configuration.FailOverStrategy = ActionType.Allow;
var logger = Substitute.For<IInternalLogger>();

Task<Verdict> Send(JObject req) => Task.FromResult(response);
Task<Verdict> Send() => Task.FromResult(response);

var result = await Authenticate.Execute(Send, request, configuration, logger);
var result = await Authenticate.Execute(Send, configuration, logger);

result.Failover.Should().Be(true);
result.FailoverReason.Should().Be("do not track");
Expand Down
6 changes: 2 additions & 4 deletions src/Tests/Actions/When_tracking.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using Castle.Config;
using Castle.Messages.Responses;
using FluentAssertions;
using Newtonsoft.Json.Linq;
using Tests.SetUp;
using Xunit;

Expand All @@ -13,13 +12,12 @@ public class When_tracking
{
[Theory, AutoFakeData]
public async Task Should_return_response_if_successful(
JObject request,
CastleConfiguration configuration)
{
var response = new VoidResponse();
Task<VoidResponse> Send(JObject req) => Task.FromResult(response);
Task<VoidResponse> Send() => Task.FromResult(response);

var result = await Track.Execute(Send, request, configuration);
var result = await Track.Execute(Send, configuration);

result.Should().Be(response);
}
Expand Down

0 comments on commit 3c4696c

Please sign in to comment.