Back to home page

EIC code displayed by LXR

 
 

    


Warning, file /swf-monitor/src/monitor_app/tests/test_storage_doors.py was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 """The storage door record's two readings the node guard depends on
0002 (monitor_app/panda/storage_doors.py, site-canary docs/STORAGE_DOORS.md):
0003 the spans a door was down, and the failures those spans excuse.
0004 
0005 Dict tests over the spans; no door is touched and no cycle runs."""
0006 from datetime import datetime, timedelta, timezone
0007 
0008 from django.test import SimpleTestCase
0009 
0010 from monitor_app.panda import storage_doors
0011 
0012 T0 = datetime(2026, 9, 22, 12, 0, tzinfo=timezone.utc)
0013 
0014 
0015 def span(start_min, end_min, rse='BNL-XRD'):
0016     return {'rse': rse, 'door': 'root://epicxrd1.sdcc.bnl.gov:1094',
0017             'start': T0 + timedelta(minutes=start_min),
0018             'end': None if end_min is None else T0 + timedelta(minutes=end_min)}
0019 
0020 
0021 def row(minutes, error='pilot 1305', status='failed', queue='NERSC_Perlmutter_epic'):
0022     return {'queue': queue, 'host': 'nid006057', 'jobstatus': status,
0023             'jeditaskid': 40052, 'duration_s': 740.0,
0024             'endtime': (T0 + timedelta(minutes=minutes)).isoformat(),
0025             'error': error}
0026 
0027 
0028 class SetAsideDoor(SimpleTestCase):
0029     def test_a_registration_failure_inside_a_span_is_set_aside(self):
0030         kept, by_queue = storage_doors.set_aside_door([row(30)], [span(0, 60)])
0031         self.assertEqual(kept, [])
0032         self.assertEqual(by_queue, {'NERSC_Perlmutter_epic': 1})
0033 
0034     def test_the_same_failure_outside_the_span_stands(self):
0035         kept, by_queue = storage_doors.set_aside_door([row(90)], [span(0, 60)])
0036         self.assertEqual(len(kept), 1)
0037         self.assertEqual(by_queue, {})
0038 
0039     def test_a_span_still_open_covers_everything_after_it(self):
0040         kept, _ = storage_doors.set_aside_door([row(600)], [span(0, None)])
0041         self.assertEqual(kept, [])
0042 
0043     def test_another_failure_in_the_span_stands(self):
0044         """A node killing jobs for its own reasons during an outage still
0045         reads as what it is."""
0046         kept, by_queue = storage_doors.set_aside_door(
0047             [row(30, error='pilot 1201')], [span(0, 60)])
0048         self.assertEqual(len(kept), 1)
0049         self.assertEqual(by_queue, {})
0050 
0051     def test_the_payloads_own_registration_exit_counts_too(self):
0052         for error in ('exe 78', 'trans 78'):
0053             kept, _ = storage_doors.set_aside_door([row(30, error=error)], [span(0, 60)])
0054             self.assertEqual(kept, [], error)
0055 
0056     def test_a_finished_job_is_never_set_aside(self):
0057         kept, _ = storage_doors.set_aside_door(
0058             [row(30, error='', status='finished')], [span(0, 60)])
0059         self.assertEqual(len(kept), 1)
0060 
0061     def test_no_spans_set_nothing_aside(self):
0062         """Before the canary has watched a door there is nothing to
0063         excuse, and the guard judges as it always did."""
0064         rows = [row(30), row(90)]
0065         kept, by_queue = storage_doors.set_aside_door(rows, [])
0066         self.assertEqual(kept, rows)
0067         self.assertEqual(by_queue, {})
0068 
0069     def test_a_row_without_an_end_time_stands(self):
0070         kept, _ = storage_doors.set_aside_door(
0071             [dict(row(30), endtime=None)], [span(0, 60)])
0072         self.assertEqual(len(kept), 1)
0073 
0074     def test_counts_are_per_queue(self):
0075         rows = [row(10), row(20), row(30, queue='BNL_OSG_PanDA_1')]
0076         _, by_queue = storage_doors.set_aside_door(rows, [span(0, 60)])
0077         self.assertEqual(by_queue, {'NERSC_Perlmutter_epic': 2, 'BNL_OSG_PanDA_1': 1})