Skip to content
This repository has been archived by the owner on Jul 31, 2024. It is now read-only.

Commit

Permalink
add more tests for refresh token service
Browse files Browse the repository at this point in the history
  • Loading branch information
leastprivilege committed Jun 18, 2020
1 parent 73d096b commit f8ed78c
Showing 1 changed file with 195 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -341,5 +341,200 @@ public async Task UpdateRefreshToken_one_time_use_should_consume_token_and_creat
oldToken.ConsumedTime.Should().Be(now);
newToken.ConsumedTime.Should().BeNull();
}

[Fact]
public async Task ValidateRefreshToken_invalid_token_should_fail()
{
var client = new Client
{
ClientId = "client1",
RefreshTokenUsage = TokenUsage.OneTimeOnly
};

var result = await _subject.ValidateRefreshTokenAsync("invalid", client);

result.IsError.Should().BeTrue();
}

[Fact]
public async Task ValidateRefreshToken_client_without_allow_offline_access_should_fail()
{
var client = new Client
{
ClientId = "client1",
RefreshTokenUsage = TokenUsage.OneTimeOnly
};

var refreshToken = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
AccessToken = new Token
{
ClientId = client.ClientId,
Audiences = { "aud" },
CreationTime = DateTime.UtcNow,
Claims = new List<Claim>()
{
new Claim("sub", "123")
}
}
};

var handle = await _store.StoreRefreshTokenAsync(refreshToken);

var now = DateTime.UtcNow;
_clock.UtcNowFunc = () => now;

var result = await _subject.ValidateRefreshTokenAsync(handle, client);

result.IsError.Should().BeTrue();
}

[Fact]
public async Task ValidateRefreshToken_invalid_client_binding_should_fail()
{
var client = new Client
{
ClientId = "client1",
AllowOfflineAccess = true,
RefreshTokenUsage = TokenUsage.OneTimeOnly
};

var refreshToken = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
AccessToken = new Token
{
ClientId = "client2",
Audiences = { "aud" },
CreationTime = DateTime.UtcNow,
Claims = new List<Claim>()
{
new Claim("sub", "123")
}
}
};

var handle = await _store.StoreRefreshTokenAsync(refreshToken);

var now = DateTime.UtcNow;
_clock.UtcNowFunc = () => now;

var result = await _subject.ValidateRefreshTokenAsync(handle, client);

result.IsError.Should().BeTrue();
}

[Fact]
public async Task ValidateRefreshToken_expired_token_should_fail()
{
var client = new Client
{
ClientId = "client1",
AllowOfflineAccess = true,
RefreshTokenUsage = TokenUsage.OneTimeOnly
};

var refreshToken = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
AccessToken = new Token
{
ClientId = client.ClientId,
Audiences = { "aud" },
CreationTime = DateTime.UtcNow,
Claims = new List<Claim>()
{
new Claim("sub", "123")
}
}
};

var handle = await _store.StoreRefreshTokenAsync(refreshToken);

var now = DateTime.UtcNow.AddSeconds(20);
_clock.UtcNowFunc = () => now;

var result = await _subject.ValidateRefreshTokenAsync(handle, client);

result.IsError.Should().BeTrue();
}

[Fact]
public async Task ValidateRefreshToken_consumed_token_should_fail()
{
var client = new Client
{
ClientId = "client1",
AllowOfflineAccess = true,
RefreshTokenUsage = TokenUsage.OneTimeOnly
};

var refreshToken = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
ConsumedTime = DateTime.UtcNow,

AccessToken = new Token
{
ClientId = client.ClientId,
Audiences = { "aud" },
CreationTime = DateTime.UtcNow,
Claims = new List<Claim>()
{
new Claim("sub", "123")
}
}
};

var handle = await _store.StoreRefreshTokenAsync(refreshToken);

var now = DateTime.UtcNow;
_clock.UtcNowFunc = () => now;

var result = await _subject.ValidateRefreshTokenAsync(handle, client);

result.IsError.Should().BeTrue();
}

[Fact]
public async Task ValidateRefreshToken_valid_token_should_succeed()
{
var client = new Client
{
ClientId = "client1",
AllowOfflineAccess = true,
RefreshTokenUsage = TokenUsage.OneTimeOnly
};

var refreshToken = new RefreshToken
{
CreationTime = DateTime.UtcNow,
Lifetime = 10,
AccessToken = new Token
{
ClientId = client.ClientId,
Audiences = { "aud" },
CreationTime = DateTime.UtcNow,
Claims = new List<Claim>()
{
new Claim("sub", "123")
}
}
};

var handle = await _store.StoreRefreshTokenAsync(refreshToken);

var now = DateTime.UtcNow;
_clock.UtcNowFunc = () => now;

var result = await _subject.ValidateRefreshTokenAsync(handle, client);

result.IsError.Should().BeFalse();
}
}
}

0 comments on commit f8ed78c

Please sign in to comment.