@@ -17,10 +17,27 @@ public enum Is
1717[ AttributeUsage ( AttributeTargets . Method , AllowMultiple = false ) ]
1818public class SkipIfRedisAttribute : FactAttribute
1919{
20+ private class RedisFixtureData
21+ {
22+ public RedisFixtureData ( )
23+ {
24+ using ( var redisFixture = new RedisFixture ( ) )
25+ {
26+ isEnterprise = redisFixture . isEnterprise ;
27+ isOSSCluster = redisFixture . isOSSCluster ;
28+ serverVersion = redisFixture . Redis . GetServer ( redisFixture . Redis . GetEndPoints ( ) [ 0 ] ) . Version ;
29+ }
30+ }
31+
32+ public readonly bool isEnterprise ;
33+ public readonly bool isOSSCluster ;
34+ public readonly Version serverVersion ;
35+ }
2036 private readonly string _targetVersion ;
2137 private readonly Comparison _comparison ;
2238 private readonly List < Is > _environments = new List < Is > ( ) ;
2339
40+ private static RedisFixtureData _redisFixtureData ;
2441 private static Version serverVersion = null ;
2542
2643 public SkipIfRedisAttribute (
@@ -64,61 +81,63 @@ public override string? Skip
6481 {
6582 string skipReason = "" ;
6683 bool skipped = false ;
67- using ( RedisFixture redisFixture = new RedisFixture ( ) )
84+ if ( _redisFixtureData == null )
6885 {
69- foreach ( var environment in _environments )
70- {
71- switch ( environment )
72- {
73- case Is . OSSCluster :
74- if ( redisFixture . isOSSCluster )
75- {
76- skipReason = skipReason + " Redis server is OSS cluster." ;
77- skipped = true ;
78- }
79- break ;
80-
81- case Is . Standalone :
82- if ( ! redisFixture . isOSSCluster )
83- {
84- skipReason = skipReason + " Redis server is not OSS cluster." ;
85- skipped = true ;
86- }
87- break ;
88-
89- case Is . Enterprise :
90- if ( redisFixture . isEnterprise )
91- {
92- skipReason = skipReason + " Redis Enterprise environment." ;
93- skipped = true ;
94- }
95- break ;
96- }
97- }
98- // Version check (if Is.Standalone/Is.OSSCluster is set then )
99-
100- serverVersion = serverVersion ?? redisFixture . Redis . GetServer ( redisFixture . Redis . GetEndPoints ( ) [ 0 ] ) . Version ;
101- var targetVersion = new Version ( _targetVersion ) ;
102- int comparisonResult = serverVersion . CompareTo ( targetVersion ) ;
86+ _redisFixtureData = new RedisFixtureData ( ) ;
87+ }
10388
104- switch ( _comparison )
89+ foreach ( var environment in _environments )
90+ {
91+ switch ( environment )
10592 {
106- case Comparison . LessThan :
107- if ( comparisonResult < 0 )
93+ case Is . OSSCluster :
94+ if ( _redisFixtureData . isOSSCluster )
10895 {
109- skipReason = skipReason + $ " Redis server version ( { serverVersion } ) is less than { _targetVersion } .";
96+ skipReason = skipReason + " Redis server is OSS cluster ." ;
11097 skipped = true ;
11198 }
11299 break ;
113- case Comparison . GreaterThanOrEqual :
114- if ( comparisonResult >= 0 )
100+
101+ case Is . Standalone :
102+ if ( ! _redisFixtureData . isOSSCluster )
115103 {
116- skipReason = skipReason + $ " Redis server version ({ serverVersion } ) is greater than or equal to { _targetVersion } .";
104+ skipReason = skipReason + " Redis server is not OSS cluster." ;
105+ skipped = true ;
106+ }
107+ break ;
108+
109+ case Is . Enterprise :
110+ if ( _redisFixtureData . isEnterprise )
111+ {
112+ skipReason = skipReason + " Redis Enterprise environment." ;
117113 skipped = true ;
118114 }
119115 break ;
120116 }
121117 }
118+ // Version check (if Is.Standalone/Is.OSSCluster is set then )
119+
120+ serverVersion = _redisFixtureData . serverVersion ;
121+ var targetVersion = new Version ( _targetVersion ) ;
122+ int comparisonResult = serverVersion . CompareTo ( targetVersion ) ;
123+
124+ switch ( _comparison )
125+ {
126+ case Comparison . LessThan :
127+ if ( comparisonResult < 0 )
128+ {
129+ skipReason = skipReason + $ " Redis server version ({ serverVersion } ) is less than { _targetVersion } .";
130+ skipped = true ;
131+ }
132+ break ;
133+ case Comparison . GreaterThanOrEqual :
134+ if ( comparisonResult >= 0 )
135+ {
136+ skipReason = skipReason + $ " Redis server version ({ serverVersion } ) is greater than or equal to { _targetVersion } .";
137+ skipped = true ;
138+ }
139+ break ;
140+ }
122141
123142 if ( skipped )
124143 return "Test skipped, because:" + skipReason ;
0 commit comments