Belle II Software  release-08-01-10
check_payload_metadata.py
1 
8 '''
9 Check the revision number of a payload used by a module.
10 '''
11 
12 import os
13 
14 import basf2 as b2
15 import b2test_utils as b2tu
16 import ROOT.Belle2 as B2
17 
18 
19 class CheckPayloadMetadata(b2.Module):
20  '''
21  Small module for checking some payload metadata.
22  '''
23 
24  def __init__(self, use_testing_payloads, md5_revision):
25  '''Consructor.'''
26  super(CheckPayloadMetadata, self).__init__()
27 
28  self.beam_parametersbeam_parameters = B2.PyDBObj('BeamParameters')
29 
30  self.use_testing_payloadsuse_testing_payloads = use_testing_payloads
31 
32  self.md5_revisionmd5_revision = md5_revision
33 
34  def beginRun(self):
35  '''Begin run.'''
36  assert(self.beam_parametersbeam_parameters.isValid())
37  if self.use_testing_payloadsuse_testing_payloads:
38  assert('testingdb/testingdb.txt' in self.beam_parametersbeam_parameters.getGlobaltag())
39  assert(self.beam_parametersbeam_parameters.getRevision() == 0)
40  assert(os.path.basename(self.beam_parametersbeam_parameters.getFilename()).startswith('dbstore'))
41  assert(os.path.basename(self.beam_parametersbeam_parameters.getFilename()).index(self.md5_revisionmd5_revision) != -1)
42  assert(self.beam_parametersbeam_parameters.getIoV() == B2.IntervalOfValidity(0, 1, 2, 3))
43  else:
44  assert(self.beam_parametersbeam_parameters.getGlobaltag() == b2.conditions.default_globaltags[0])
45  assert(self.beam_parametersbeam_parameters.getRevision() > 0)
46  assert(self.beam_parametersbeam_parameters.getFilename().startswith('/cvmfs'))
47  assert(self.beam_parametersbeam_parameters.getIoV() == B2.IntervalOfValidity(0, 0, 0, -1))
48 
49 
50 def create_beam_parameters_payload(testing_database_path):
51  '''
52  Create locally a BeamParameters payload.
53  '''
54  b2.conditions.expert_settings(save_payloads=testing_database_path)
55  beam_parameters = B2.BeamParameters()
56  database = B2.Database.Instance()
57  iov = B2.IntervalOfValidity(0, 1, 2, 3)
58  assert(database.storeData('BeamParameters', beam_parameters, iov))
59 
60 
61 def testing_path(use_testing_payloads=False, remove_default_globaltag=False, testing_database_path=None, md5_revision=None):
62  '''
63  The basf2 steering path for this test.
64  '''
65  if remove_default_globaltag:
66  b2.conditions.override_globaltags()
67  if use_testing_payloads:
68  b2.conditions.prepend_testing_payloads(b2.find_file(testing_database_path))
69  testing_path = b2.Path()
70  testing_path.add_module('EventInfoSetter', expList=[0], runList=[1])
71  testing_path.add_module(CheckPayloadMetadata(use_testing_payloads=use_testing_payloads, md5_revision=md5_revision))
72  b2.process(testing_path)
73 
74 
75 if __name__ == '__main__':
76 
77  with b2tu.clean_working_directory():
78 
79 
80  testing_database_path = 'testingdb/testingdb.txt'
81 
82  # Create the testing payloads.
83  assert(b2tu.run_in_subprocess(target=create_beam_parameters_payload, testing_database_path=testing_database_path) == 0)
84 
85  # Identify the md5 revision string of the payload.
86 
87  md5_revision = None
88  with open(b2.find_file('testingdb/testingdb.txt')) as testing_database_file:
89  for line in testing_database_file:
90  md5_revision = str(line.split(' ')[1])
91 
92  # Check if the process aborts because no valid payloads are found.
93  assert(b2tu.run_in_subprocess(target=testing_path,
94  use_testing_payloads=False,
95  remove_default_globaltag=True,
96  ) == 1)
97 
98  # Check if the default globaltag is correctly used.
99  assert(b2tu.run_in_subprocess(target=testing_path,
100  use_testing_payloads=False,
101  remove_default_globaltag=False,
102  ) == 0)
103 
104  # Check if the testing payload is correctly used.
105  assert(b2tu.run_in_subprocess(target=testing_path,
106  use_testing_payloads=True,
107  remove_default_globaltag=True,
108  testing_database_path=testing_database_path,
109  md5_revision=md5_revision,
110  ) == 0)
111 
112  # Check if the testing payload is used instead of the default globaltag.
113  assert(b2tu.run_in_subprocess(target=testing_path,
114  use_testing_payloads=True,
115  remove_default_globaltag=False,
116  testing_database_path=testing_database_path,
117  md5_revision=md5_revision,
118  ) == 0)
md5_revision
md5 revision hash of the payload.
def __init__(self, use_testing_payloads, md5_revision)
beam_parameters
BeamParameters database object.
use_testing_payloads
Flag to mark if testing payloads are used or not.