Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 61 additions & 42 deletions tests/NRedisStack.Tests/SkipIfRedisAttribute.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,27 @@ public enum Is
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class SkipIfRedisAttribute : FactAttribute
{
private class RedisFixtureData
{
public RedisFixtureData()
{
using (var redisFixture = new RedisFixture())
{
isEnterprise = redisFixture.isEnterprise;
isOSSCluster = redisFixture.isOSSCluster;
serverVersion = redisFixture.Redis.GetServer(redisFixture.Redis.GetEndPoints()[0]).Version;
}
}

public readonly bool isEnterprise;
public readonly bool isOSSCluster;
public readonly Version serverVersion;
}
private readonly string _targetVersion;
private readonly Comparison _comparison;
private readonly List<Is> _environments = new List<Is>();

private static RedisFixtureData _redisFixtureData;
private static Version serverVersion = null;

public SkipIfRedisAttribute(
Expand Down Expand Up @@ -64,61 +81,63 @@ public override string? Skip
{
string skipReason = "";
bool skipped = false;
using (RedisFixture redisFixture = new RedisFixture())
if (_redisFixtureData == null)
{
foreach (var environment in _environments)
{
switch (environment)
{
case Is.OSSCluster:
if (redisFixture.isOSSCluster)
{
skipReason = skipReason + " Redis server is OSS cluster.";
skipped = true;
}
break;

case Is.Standalone:
if (!redisFixture.isOSSCluster)
{
skipReason = skipReason + " Redis server is not OSS cluster.";
skipped = true;
}
break;

case Is.Enterprise:
if (redisFixture.isEnterprise)
{
skipReason = skipReason + " Redis Enterprise environment.";
skipped = true;
}
break;
}
}
// Version check (if Is.Standalone/Is.OSSCluster is set then )

serverVersion = serverVersion ?? redisFixture.Redis.GetServer(redisFixture.Redis.GetEndPoints()[0]).Version;
var targetVersion = new Version(_targetVersion);
int comparisonResult = serverVersion.CompareTo(targetVersion);
_redisFixtureData = new RedisFixtureData();
}

switch (_comparison)
foreach (var environment in _environments)
{
switch (environment)
{
case Comparison.LessThan:
if (comparisonResult < 0)
case Is.OSSCluster:
if (_redisFixtureData.isOSSCluster)
{
skipReason = skipReason + $" Redis server version ({serverVersion}) is less than {_targetVersion}.";
skipReason = skipReason + " Redis server is OSS cluster.";
skipped = true;
}
break;
case Comparison.GreaterThanOrEqual:
if (comparisonResult >= 0)

case Is.Standalone:
if (!_redisFixtureData.isOSSCluster)
{
skipReason = skipReason + $" Redis server version ({serverVersion}) is greater than or equal to {_targetVersion}.";
skipReason = skipReason + " Redis server is not OSS cluster.";
skipped = true;
}
break;

case Is.Enterprise:
if (_redisFixtureData.isEnterprise)
{
skipReason = skipReason + " Redis Enterprise environment.";
skipped = true;
}
break;
}
}
// Version check (if Is.Standalone/Is.OSSCluster is set then )

serverVersion = _redisFixtureData.serverVersion;
var targetVersion = new Version(_targetVersion);
int comparisonResult = serverVersion.CompareTo(targetVersion);

switch (_comparison)
{
case Comparison.LessThan:
if (comparisonResult < 0)
{
skipReason = skipReason + $" Redis server version ({serverVersion}) is less than {_targetVersion}.";
skipped = true;
}
break;
case Comparison.GreaterThanOrEqual:
if (comparisonResult >= 0)
{
skipReason = skipReason + $" Redis server version ({serverVersion}) is greater than or equal to {_targetVersion}.";
skipped = true;
}
break;
}

if (skipped)
return "Test skipped, because:" + skipReason;
Expand Down
Loading