@@ -100,8 +100,14 @@ def setUp(self):
100100 client_secret_filename = getenv ("DATATRAILS_APPREG_SECRET_FILENAME" ),
101101 )
102102 self .arch = Archivist (getenv ("DATATRAILS_URL" ), auth )
103+ self .identities = []
103104
104105 def tearDown (self ):
106+ if self .identities :
107+ for identity in self .identities :
108+ LOGGER .debug ("Delete %s" , identity )
109+ self .arch .compliance_policies .delete (identity )
110+
105111 self .arch .close ()
106112
107113
@@ -113,15 +119,13 @@ def test_compliancepolicies_create_since(self):
113119 compliance_policy = self .arch .compliance_policies .create (
114120 SINCE_POLICY ,
115121 )
122+ self .identities .append (compliance_policy ["identity" ])
116123 self .assertEqual (
117124 compliance_policy ["display_name" ],
118125 SINCE_POLICY .display_name ,
119126 msg = "Incorrect display name" ,
120127 )
121128 LOGGER .debug ("SINCE_POLICY: %s" , json_dumps (compliance_policy , indent = 4 ))
122- self .arch .compliance_policies .delete (
123- compliance_policy ["identity" ],
124- )
125129
126130 def test_compliancepolicies_create_richness (self ):
127131 """
@@ -130,15 +134,13 @@ def test_compliancepolicies_create_richness(self):
130134 compliance_policy = self .arch .compliance_policies .create (
131135 RICHNESS_POLICY ,
132136 )
137+ self .identities .append (compliance_policy ["identity" ])
133138 self .assertEqual (
134139 compliance_policy ["display_name" ],
135140 RICHNESS_POLICY .display_name ,
136141 msg = "Incorrect display name" ,
137142 )
138143 LOGGER .debug ("RICHNESS_POLICY: %s" , json_dumps (compliance_policy , indent = 4 ))
139- self .arch .compliance_policies .delete (
140- compliance_policy ["identity" ],
141- )
142144
143145 def test_compliancepolicies_create_dynamic_tolerance (self ):
144146 """
@@ -147,6 +149,7 @@ def test_compliancepolicies_create_dynamic_tolerance(self):
147149 compliance_policy = self .arch .compliance_policies .create (
148150 DYNAMIC_TOLERANCE_POLICY ,
149151 )
152+ self .identities .append (compliance_policy ["identity" ])
150153 self .assertEqual (
151154 compliance_policy ["display_name" ],
152155 DYNAMIC_TOLERANCE_POLICY .display_name ,
@@ -155,9 +158,6 @@ def test_compliancepolicies_create_dynamic_tolerance(self):
155158 LOGGER .debug (
156159 "DYNAMIC_TOLERANCE_POLICY: %s" , json_dumps (compliance_policy , indent = 4 )
157160 )
158- self .arch .compliance_policies .delete (
159- compliance_policy ["identity" ],
160- )
161161
162162 def test_compliancepolicies_create_current_outstanding (self ):
163163 """
@@ -166,6 +166,7 @@ def test_compliancepolicies_create_current_outstanding(self):
166166 compliance_policy = self .arch .compliance_policies .create (
167167 CURRENT_OUTSTANDING_POLICY ,
168168 )
169+ self .identities .append (compliance_policy ["identity" ])
169170 self .assertEqual (
170171 compliance_policy ["display_name" ],
171172 CURRENT_OUTSTANDING_POLICY .display_name ,
@@ -174,9 +175,6 @@ def test_compliancepolicies_create_current_outstanding(self):
174175 LOGGER .debug (
175176 "CURRENT_OUTSTANDING_POLICY: %s" , json_dumps (compliance_policy , indent = 4 )
176177 )
177- self .arch .compliance_policies .delete (
178- compliance_policy ["identity" ],
179- )
180178
181179 def test_compliancepolicies_create_period_understanding (self ):
182180 """
@@ -185,6 +183,7 @@ def test_compliancepolicies_create_period_understanding(self):
185183 compliance_policy = self .arch .compliance_policies .create (
186184 PERIOD_OUTSTANDING_POLICY ,
187185 )
186+ self .identities .append (compliance_policy ["identity" ])
188187 self .assertEqual (
189188 compliance_policy ["display_name" ],
190189 PERIOD_OUTSTANDING_POLICY .display_name ,
@@ -193,14 +192,28 @@ def test_compliancepolicies_create_period_understanding(self):
193192 LOGGER .debug (
194193 "PERIOD_OUTSTANDING_POLICY: %s" , json_dumps (compliance_policy , indent = 4 )
195194 )
196- self .arch .compliance_policies .delete (
197- compliance_policy ["identity" ],
198- )
199195
200196 def test_compliance_policies_list (self ):
201197 """
202198 Test compliance_policy list
203199 """
200+ compliance_policy = self .arch .compliance_policies .create (
201+ SINCE_POLICY ,
202+ )
203+ self .identities .append (compliance_policy ["identity" ])
204+ compliance_policy = self .arch .compliance_policies .create (
205+ PERIOD_OUTSTANDING_POLICY ,
206+ )
207+ self .identities .append (compliance_policy ["identity" ])
208+ compliance_policy = self .arch .compliance_policies .create (
209+ CURRENT_OUTSTANDING_POLICY ,
210+ )
211+ self .identities .append (compliance_policy ["identity" ])
212+ compliance_policy = self .arch .compliance_policies .create (
213+ DYNAMIC_TOLERANCE_POLICY ,
214+ )
215+ self .identities .append (compliance_policy ["identity" ])
216+
204217 compliance_policies = list (self .arch .compliance_policies .list ())
205218 for i , compliance_policy in enumerate (compliance_policies ):
206219 LOGGER .debug ("%d: %s" , i , json_dumps (compliance_policy , indent = 4 ))
@@ -209,14 +222,28 @@ def test_compliance_policies_list(self):
209222 0 ,
210223 msg = "Incorrect display name" ,
211224 )
212- self .arch .compliance_policies .delete (
213- compliance_policy ["identity" ],
214- )
215225
216226 def test_compliance_policies_count (self ):
217227 """
218228 Test compliance_policy count
219229 """
230+ compliance_policy = self .arch .compliance_policies .create (
231+ SINCE_POLICY ,
232+ )
233+ self .identities .append (compliance_policy ["identity" ])
234+ compliance_policy = self .arch .compliance_policies .create (
235+ PERIOD_OUTSTANDING_POLICY ,
236+ )
237+ self .identities .append (compliance_policy ["identity" ])
238+ compliance_policy = self .arch .compliance_policies .create (
239+ CURRENT_OUTSTANDING_POLICY ,
240+ )
241+ self .identities .append (compliance_policy ["identity" ])
242+ compliance_policy = self .arch .compliance_policies .create (
243+ DYNAMIC_TOLERANCE_POLICY ,
244+ )
245+ self .identities .append (compliance_policy ["identity" ])
246+
220247 count = self .arch .compliance_policies .count (
221248 props = {"compliance_type" : CompliancePolicyType .COMPLIANCE_SINCE .name }
222249 )
@@ -271,10 +298,11 @@ def test_compliancepolicies_since(self):
271298 ["attributes.arc_display_type=Traffic Light" ],
272299 ],
273300 event_display_type = f"Maintenance Performed { tag } " ,
274- time_period_seconds = 10 , # very short so we can test
301+ time_period_seconds = 20 ,
275302 )
276303 )
277304 LOGGER .debug ("SINCE_POLICY: %s" , json_dumps (compliance_policy , indent = 4 ))
305+ self .identities .append (compliance_policy ["identity" ])
278306
279307 traffic_light = self .arch .assets .create (
280308 attrs = TRAFFIC_LIGHT ,
@@ -301,24 +329,53 @@ def test_compliancepolicies_since(self):
301329 traffic_light ["identity" ],
302330 )
303331 LOGGER .debug ("COMPLIANCE (true): %s" , json_dumps (compliance , indent = 4 ))
332+
333+ policy_statements = [
334+ c
335+ for c in compliance ["compliance" ]
336+ if c ["compliance_policy_identity" ] == compliance_policy ["identity" ]
337+ ]
338+ LOGGER .debug ("COMPLIANCE (false): %s" , json_dumps (policy_statements , indent = 4 ))
339+
340+ self .assertEqual (
341+ len (policy_statements ),
342+ 1 ,
343+ msg = "Only one policy statement is expected" ,
344+ )
345+
304346 self .assertTrue (
305- compliance ["compliant" ],
306- msg = "Assets should be compliant" ,
347+ policy_statements [ 0 ] ["compliant" ],
348+ msg = "Asset should be compliant" ,
307349 )
308350
309- LOGGER .debug ("Sleep 10 seconds ..." )
310- sleep (10 )
351+ LOGGER .debug (
352+ "Sleep 15 seconds so that subsequent falls outside compliance_policy limits ..."
353+ )
354+ sleep (15 )
311355 compliance = self .arch .compliance .compliant_at (
312356 traffic_light ["identity" ],
313357 )
314358 LOGGER .debug ("COMPLIANCE (false): %s" , json_dumps (compliance , indent = 4 ))
315- self .assertFalse (
316- compliance ["compliant" ],
317- msg = "Assets should not be compliant" ,
359+
360+ policy_statements = [
361+ c
362+ for c in compliance ["compliance" ]
363+ if c ["compliance_policy_identity" ] == compliance_policy ["identity" ]
364+ ]
365+ LOGGER .debug ("COMPLIANCE (false): %s" , json_dumps (policy_statements , indent = 4 ))
366+
367+ self .assertEqual (
368+ len (policy_statements ),
369+ 1 ,
370+ msg = "Only one policy statement is expected" ,
318371 )
319372
320- compliance_policy = self .arch .compliance_policies .delete (
321- compliance_policy ["identity" ],
373+ self .assertFalse (
374+ policy_statements [0 ]["compliant" ],
375+ msg = (
376+ "Asset should not be compliant as it was maintained"
377+ "after the compliance policy expired"
378+ ),
322379 )
323380
324381 def test_compliancepolicies_current_outstanding (self ):
@@ -337,6 +394,7 @@ def test_compliancepolicies_current_outstanding(self):
337394 closing_event_display_type = f"Maintenance Performed { tag } " ,
338395 ),
339396 )
397+ self .identities .append (compliance_policy ["identity" ])
340398 LOGGER .debug (
341399 "CURRENT_OUTSTANDING_POLICY: %s" , json_dumps (compliance_policy , indent = 4 )
342400 )
@@ -367,10 +425,24 @@ def test_compliancepolicies_current_outstanding(self):
367425 compliance = self .arch .compliance .compliant_at (
368426 traffic_light ["identity" ],
369427 )
370- LOGGER .debug ("COMPLIANCE (false): %s" , json_dumps (compliance , indent = 4 ))
428+ LOGGER .debug ("COMPLIANCE (true): %s" , json_dumps (compliance , indent = 4 ))
429+
430+ policy_statements = [
431+ c
432+ for c in compliance ["compliance" ]
433+ if c ["compliance_policy_identity" ] == compliance_policy ["identity" ]
434+ ]
435+ LOGGER .debug ("COMPLIANCE (false): %s" , json_dumps (policy_statements , indent = 4 ))
436+
437+ self .assertEqual (
438+ len (policy_statements ),
439+ 1 ,
440+ msg = "Only one policy statement is expected" ,
441+ )
442+
371443 self .assertFalse (
372- compliance ["compliant" ],
373- msg = "Assets should not be compliant" ,
444+ policy_statements [ 0 ] ["compliant" ],
445+ msg = "Asset should not be compliant" ,
374446 )
375447
376448 maintenance_performed = self .arch .events .create (
@@ -394,11 +466,20 @@ def test_compliancepolicies_current_outstanding(self):
394466 traffic_light ["identity" ],
395467 )
396468 LOGGER .debug ("COMPLIANCE (true): %s" , json_dumps (compliance , indent = 4 ))
397- self .assertTrue (
398- compliance ["compliant" ],
399- msg = "Assets should be compliant" ,
400- )
401469
402- compliance_policy = self .arch .compliance_policies .delete (
403- compliance_policy ["identity" ],
470+ policy_statements = [
471+ c
472+ for c in compliance ["compliance" ]
473+ if c ["compliance_policy_identity" ] == compliance_policy ["identity" ]
474+ ]
475+ LOGGER .debug ("COMPLIANCE (true): %s" , json_dumps (policy_statements , indent = 4 ))
476+
477+ self .assertEqual (
478+ len (policy_statements ),
479+ 1 ,
480+ msg = "Only one policy statement is expected" ,
481+ )
482+ self .assertTrue (
483+ policy_statements [0 ]["compliant" ],
484+ msg = "Asset should be compliant" ,
404485 )
0 commit comments