2525import java .util .List ;
2626import java .util .concurrent .TimeUnit ;
2727
28- @ BenchmarkMode (Mode .Throughput )
29- @ Warmup (iterations = 3 , time = 1 )
28+ @ BenchmarkMode ({ Mode .Throughput , Mode . AverageTime } )
29+ @ Warmup (iterations = 5 , time = 1 )
3030@ Measurement (iterations = 5 , time = 1 )
3131@ Threads (1 )
3232@ Fork (1 )
3333@ State (value = Scope .Benchmark )
34- @ OutputTimeUnit (TimeUnit .SECONDS )
34+ @ OutputTimeUnit (TimeUnit .MILLISECONDS )
3535public class CachedEnforcerBenchmarkTest {
3636
3737 public static class TestResource {
@@ -71,38 +71,57 @@ public void benchmarkCachedRaw() {
7171 rawEnforce ("alice" , "data1" , "read" );
7272 }
7373
74+ private CachedEnforcer cachedBasicModelEnforcer ;
75+
76+ @ Setup (Level .Trial )
77+ public void setupCachedBasicModel () {
78+ cachedBasicModelEnforcer = new CachedEnforcer ("examples/basic_model.conf" , "examples/basic_policy.csv" );
79+ }
80+
7481 @ Benchmark
7582 public void benchmarkCachedBasicModel () {
76- CachedEnforcer e = new CachedEnforcer ("examples/basic_model.conf" , "examples/basic_policy.csv" );
77- e .enforce ("alice" , "data1" , "read" );
83+ cachedBasicModelEnforcer .enforce ("alice" , "data1" , "read" );
84+ }
85+
86+ private CachedEnforcer cachedRBACModelEnforcer ;
87+
88+ @ Setup (Level .Trial )
89+ public void setupCachedRBACModel () {
90+ cachedRBACModelEnforcer = new CachedEnforcer ("examples/rbac_model.conf" , "examples/rbac_policy.csv" );
7891 }
7992
8093 @ Benchmark
8194 public void benchmarkCachedRBACModel () {
82- CachedEnforcer e = new CachedEnforcer ("examples/rbac_model.conf" , "examples/rbac_policy.csv" );
83- e .enforce ("alice" , "data2" , "read" );
95+ cachedRBACModelEnforcer .enforce ("alice" , "data2" , "read" );
8496 }
8597
86- @ Benchmark
87- public void benchmarkCachedRBACModelSmall () {
88- CachedEnforcer e = new CachedEnforcer ("examples/rbac_model.conf" , "" );
98+ private CachedEnforcer cachedRBACModelSmallEnforcer ;
99+
100+ @ Setup (Level .Trial )
101+ public void setupCachedRBACModelSmall () {
102+ cachedRBACModelSmallEnforcer = new CachedEnforcer ("examples/rbac_model.conf" , "" );
89103
90104 // 100 roles, 10 resources.
91105 for (int i = 0 ; i < 100 ; i ++) {
92- e .addPolicy (String .format ("group%d" , i ), String .format ("data%d" , i / 10 ), "read" );
106+ cachedRBACModelSmallEnforcer .addPolicy (String .format ("group%d" , i ), String .format ("data%d" , i / 10 ), "read" );
93107 }
94108
95109 // 1000 users.
96110 for (int i = 0 ; i < 1000 ; i ++) {
97- e .addGroupingPolicy (String .format ("user%d" , i ), String .format ("group%d" , i / 10 ));
111+ cachedRBACModelSmallEnforcer .addGroupingPolicy (String .format ("user%d" , i ), String .format ("group%d" , i / 10 ));
98112 }
99-
100- e .enforce ("user501" , "data9" , "read" );
101113 }
102114
103115 @ Benchmark
104- public void benchmarkCachedRBACModelMedium () {
105- CachedEnforcer e = new CachedEnforcer ("examples/rbac_model.conf" , "" );
116+ public void benchmarkCachedRBACModelSmall () {
117+ cachedRBACModelSmallEnforcer .enforce ("user501" , "data9" , "read" );
118+ }
119+
120+ private CachedEnforcer cachedRBACModelMediumEnforcer ;
121+
122+ @ Setup (Level .Trial )
123+ public void setupCachedRBACModelMedium () {
124+ cachedRBACModelMediumEnforcer = new CachedEnforcer ("examples/rbac_model.conf" , "" );
106125
107126 // 1000 roles, 100 resources.
108127 List <List <String >> pPolicies = new ArrayList <>();
@@ -113,7 +132,7 @@ public void benchmarkCachedRBACModelMedium() {
113132 policy .add ("read" );
114133 pPolicies .add (policy );
115134 }
116- e .addPolicies (pPolicies );
135+ cachedRBACModelMediumEnforcer .addPolicies (pPolicies );
117136
118137 // 10000 users.
119138 List <List <String >> gPolicies = new ArrayList <>();
@@ -123,14 +142,19 @@ public void benchmarkCachedRBACModelMedium() {
123142 policy .add (String .format ("group%d" , i / 10 ));
124143 gPolicies .add (policy );
125144 }
126- e .addGroupingPolicies (gPolicies );
127-
128- e .enforce ("user5001" , "data150" , "read" );
145+ cachedRBACModelMediumEnforcer .addGroupingPolicies (gPolicies );
129146 }
130147
131148 @ Benchmark
132- public void benchmarkCachedRBACModelLarge () {
133- CachedEnforcer e = new CachedEnforcer ("examples/rbac_model.conf" , "" );
149+ public void benchmarkCachedRBACModelMedium () {
150+ cachedRBACModelMediumEnforcer .enforce ("user5001" , "data150" , "read" );
151+ }
152+
153+ private CachedEnforcer cachedRBACModelLargeEnforcer ;
154+
155+ @ Setup (Level .Trial )
156+ public void setupCachedRBACModelLarge () {
157+ cachedRBACModelLargeEnforcer = new CachedEnforcer ("examples/rbac_model.conf" , "" );
134158
135159 // 10000 roles, 1000 resources.
136160 List <List <String >> pPolicies = new ArrayList <>();
@@ -141,7 +165,7 @@ public void benchmarkCachedRBACModelLarge() {
141165 policy .add ("read" );
142166 pPolicies .add (policy );
143167 }
144- e .addPolicies (pPolicies );
168+ cachedRBACModelLargeEnforcer .addPolicies (pPolicies );
145169
146170 // 100000 users.
147171 List <List <String >> gPolicies = new ArrayList <>();
@@ -151,46 +175,86 @@ public void benchmarkCachedRBACModelLarge() {
151175 policy .add (String .format ("group%d" , i / 10 ));
152176 gPolicies .add (policy );
153177 }
154- e .addGroupingPolicies (gPolicies );
178+ cachedRBACModelLargeEnforcer .addGroupingPolicies (gPolicies );
179+ }
180+
181+ @ Benchmark
182+ public void benchmarkCachedRBACModelLarge () {
183+ cachedRBACModelLargeEnforcer .enforce ("user50001" , "data1500" , "read" );
184+ }
185+
186+ private CachedEnforcer cachedRBACModelWithResourceRolesEnforcer ;
155187
156- e .enforce ("user50001" , "data1500" , "read" );
188+ @ Setup (Level .Trial )
189+ public void setupCachedRBACModelWithResourceRoles () {
190+ cachedRBACModelWithResourceRolesEnforcer = new CachedEnforcer ("examples/rbac_with_resource_roles_model.conf" , "examples/rbac_with_resource_roles_policy.csv" );
157191 }
158192
159193 @ Benchmark
160194 public void benchmarkCachedRBACModelWithResourceRoles () {
161- CachedEnforcer e = new CachedEnforcer ("examples/rbac_with_resource_roles_model.conf" , "examples/rbac_with_resource_roles_policy.csv" );
162- e .enforce ("alice" , "data1" , "read" );
195+ cachedRBACModelWithResourceRolesEnforcer .enforce ("alice" , "data1" , "read" );
196+ }
197+
198+ private CachedEnforcer cachedRBACModelWithDomainsEnforcer ;
199+
200+ @ Setup (Level .Trial )
201+ public void setupCachedRBACModelWithDomains () {
202+ cachedRBACModelWithDomainsEnforcer = new CachedEnforcer ("examples/rbac_with_domains_model.conf" , "examples/rbac_with_domains_policy.csv" );
163203 }
164204
165205 @ Benchmark
166206 public void benchmarkCachedRBACModelWithDomains () {
167- CachedEnforcer e = new CachedEnforcer ("examples/rbac_with_domains_model.conf" , "examples/rbac_with_domains_policy.csv" );
168- e .enforce ("alice" , "domain1" , "data1" , "read" );
207+ cachedRBACModelWithDomainsEnforcer .enforce ("alice" , "domain1" , "data1" , "read" );
208+ }
209+
210+ private CachedEnforcer cachedABACModelEnforcer ;
211+ private TestResource cachedABACTestResource ;
212+
213+ @ Setup (Level .Trial )
214+ public void setupCachedABACModel () {
215+ cachedABACModelEnforcer = new CachedEnforcer ("examples/abac_model.conf" , "" );
216+ cachedABACTestResource = newTestResource ("data1" , "alice" );
169217 }
170218
171219 @ Benchmark
172220 public void benchmarkCachedABACModel () {
173- CachedEnforcer e = new CachedEnforcer ("examples/abac_model.conf" , "" );
174- TestResource data1 = newTestResource ("data1" , "alice" );
175- e .enforce ("alice" , data1 , "read" );
221+ cachedABACModelEnforcer .enforce ("alice" , cachedABACTestResource , "read" );
222+ }
223+
224+ private CachedEnforcer cachedKeyMatchModelEnforcer ;
225+
226+ @ Setup (Level .Trial )
227+ public void setupCachedKeyMatchModel () {
228+ cachedKeyMatchModelEnforcer = new CachedEnforcer ("examples/keymatch_model.conf" , "examples/keymatch_policy.csv" );
176229 }
177230
178231 @ Benchmark
179232 public void benchmarkCachedKeyMatchModel () {
180- CachedEnforcer e = new CachedEnforcer ("examples/keymatch_model.conf" , "examples/keymatch_policy.csv" );
181- e .enforce ("alice" , "/alice_data/resource1" , "GET" );
233+ cachedKeyMatchModelEnforcer .enforce ("alice" , "/alice_data/resource1" , "GET" );
234+ }
235+
236+ private CachedEnforcer cachedRBACModelWithDenyEnforcer ;
237+
238+ @ Setup (Level .Trial )
239+ public void setupCachedRBACModelWithDeny () {
240+ cachedRBACModelWithDenyEnforcer = new CachedEnforcer ("examples/rbac_with_deny_model.conf" , "examples/rbac_with_deny_policy.csv" );
182241 }
183242
184243 @ Benchmark
185244 public void benchmarkCachedRBACModelWithDeny () {
186- CachedEnforcer e = new CachedEnforcer ("examples/rbac_with_deny_model.conf" , "examples/rbac_with_deny_policy.csv" );
187- e .enforce ("alice" , "data1" , "read" );
245+ cachedRBACModelWithDenyEnforcer .enforce ("alice" , "data1" , "read" );
246+ }
247+
248+ private CachedEnforcer cachedPriorityModelEnforcer ;
249+
250+ @ Setup (Level .Trial )
251+ public void setupCachedPriorityModel () {
252+ cachedPriorityModelEnforcer = new CachedEnforcer ("examples/priority_model.conf" , "examples/priority_policy.csv" );
188253 }
189254
190255 @ Benchmark
191256 public void benchmarkCachedPriorityModel () {
192- CachedEnforcer e = new CachedEnforcer ("examples/priority_model.conf" , "examples/priority_policy.csv" );
193- e .enforce ("alice" , "data1" , "read" );
257+ cachedPriorityModelEnforcer .enforce ("alice" , "data1" , "read" );
194258 }
195259
196260 @ Benchmark
@@ -231,7 +295,10 @@ public void setup() {
231295
232296 public static void main (String [] args ) throws RunnerException {
233297 Options opt = new OptionsBuilder ()
234- .include (CachedEnforcerBenchmarkTest .class .getName ())
298+ .include (CachedEnforcerBenchmarkTest .class .getSimpleName ())
299+ .forks (1 )
300+ .warmupIterations (5 )
301+ .measurementIterations (5 )
235302 .build ();
236303 new Runner (opt ).run ();
237304 }
0 commit comments