Skip to content

Commit

Permalink
Reworked test to hopefully fix intermittent failure
Browse files Browse the repository at this point in the history
  • Loading branch information
grumpydev committed Feb 4, 2012
1 parent 03b673a commit c902a8e
Showing 1 changed file with 16 additions and 18 deletions.
34 changes: 16 additions & 18 deletions src/Nancy.Tests/Unit/Security/CsrfStartupFixture.cs
@@ -1,14 +1,12 @@
namespace Nancy.Tests.Unit.Security
{
using System;
using System.Linq;

using FakeItEasy;

using Nancy.Bootstrapper;
using Nancy.Cryptography;
using Nancy.Helpers;
using Nancy.Responses;
using Nancy.Security;
using Nancy.Tests.Fakes;

Expand Down Expand Up @@ -59,21 +57,34 @@ public void Should_create_cookie_in_response_if_token_exists_in_context()
[Fact]
public void Should_copy_request_cookie_to_context_but_not_response_if_it_exists_and_context_does_not_contain_token()
{
var validTokenString = this.CreateValidTokenString();
this.request.Cookies.Add(CsrfToken.DEFAULT_CSRF_KEY, validTokenString);
this.request.Cookies.Add(CsrfToken.DEFAULT_CSRF_KEY, "ValidToken");
var fakeValidator = A.Fake<ICsrfTokenValidator>();
A.CallTo(() => fakeValidator.CookieTokenStillValid(A<CsrfToken>.Ignored)).Returns(true);
var csrfStartup = new CsrfStartup(
this.cryptographyConfiguration,
this.objectSerializer,
fakeValidator);
csrfStartup.Initialize(this.pipelines);
var context = new NancyContext { Request = this.request, Response = this.response };

this.pipelines.AfterRequest.Invoke(context);

this.response.Cookies.Any(c => c.Name == CsrfToken.DEFAULT_CSRF_KEY).ShouldBeFalse();
context.Items.ContainsKey(CsrfToken.DEFAULT_CSRF_KEY).ShouldBeTrue();
context.Items[CsrfToken.DEFAULT_CSRF_KEY].ShouldEqual(validTokenString);
context.Items[CsrfToken.DEFAULT_CSRF_KEY].ShouldEqual("ValidToken");
}

[Fact]
public void Should_regenerage_token_if_invalid()
{
this.request.Cookies.Add(CsrfToken.DEFAULT_CSRF_KEY, "InvalidToken");
var fakeValidator = A.Fake<ICsrfTokenValidator>();
A.CallTo(() => fakeValidator.CookieTokenStillValid(A<CsrfToken>.Ignored)).Returns(false);
var csrfStartup = new CsrfStartup(
this.cryptographyConfiguration,
this.objectSerializer,
fakeValidator);
csrfStartup.Initialize(this.pipelines);
var context = new NancyContext { Request = this.request, Response = this.response };

this.pipelines.AfterRequest.Invoke(context);
Expand Down Expand Up @@ -129,18 +140,5 @@ public void Should_be_able_to_disable_csrf()

this.response.Cookies.Any(c => c.Name == CsrfToken.DEFAULT_CSRF_KEY).ShouldBeFalse();
}

private string CreateValidTokenString()
{
var token = new CsrfToken
{
CreatedDate = DateTime.Now,
};

token.CreateRandomBytes();
token.CreateHmac(this.cryptographyConfiguration.HmacProvider);

return this.objectSerializer.Serialize(token);
}
}
}

0 comments on commit c902a8e

Please sign in to comment.