5 from ROOT
import Belle2
6 from b2test_utils
import clean_working_directory, safe_process
14 class CreateDummyData(basf2.Module):
15 """Create some random data to have event size not be too small"""
17 def __init__(self, size, persistent=False):
20 durability = Belle2.DataStore.c_Persistent
if persistent
else Belle2.DataStore.c_Event
24 self.chunk_data.registerInDataStore()
30 def get_metadata(filename):
31 meta = subprocess.check_output([
"b2file-metadata-show",
"--json", filename])
32 return json.loads(meta)
35 def check_jobfile(jobfile, expected_files):
36 """Check that all output files are in the jobfile"""
37 with open(jobfile)
as inputfile:
38 data = json.load(inputfile)
41 for output
in data[
'output_files']:
42 seen.add(output[
'filename'])
43 assert all(output[
'checks_passed'])
is True,
"Output file didn't pass all tests"
44 assert os.path.exists(output[
'filename']),
"Output file doesn't exist"
46 assert seen == expected_files,
"didn't find all expected files"
49 if __name__ ==
"__main__":
50 basf2.logging.log_level = basf2.LogLevel.ERROR
51 basf2.logging.enable_summary(
False)
52 basf2.set_random_seed(
"something important")
53 with clean_working_directory():
57 path.add_module(
"EventInfoSetter", evtNumList=550)
58 path.add_module(CreateDummyData(1024 * 10))
59 path.add_module(
"RootOutput", outputFileName=
"test_split.root", buildIndex=
False, updateFileCatalog=
False,
60 compressionAlgorithm=0, compressionLevel=0, outputSplitSize=3)
61 assert safe_process(path) == 0,
"RootOutput failed"
62 check_jobfile(
"job-info1.json", {f
"test_split.f0000{i}.root" for i
in range(2)})
66 subprocess.check_call([
"b2file-metadata-add",
"-l", f
"parent{i}", f
"test_split.f0000{i}.root"])
67 assert os.path.exists(
"test_split.f00002.root")
is False,
"There should not be a third file"
72 path.add_module(
"RootInput", inputFileNames=[
"test_split.f00000.root",
"test_split.f00001.root"])
73 path.add_module(
"RootOutput", outputFileName=
"file://test_parents.root", buildIndex=
False, updateFileCatalog=
False,
74 compressionAlgorithm=0, compressionLevel=0, outputSplitSize=2)
75 assert safe_process(path) == 0,
"RootInput/Output failed"
77 check_jobfile(
"job-info2.json", {f
"test_parents.f0000{i}.root" for i
in range(3)})
78 assert os.path.exists(
"test_split.f00003.root")
is False,
"There should not be a fourth file"
81 meta = [get_metadata(e)
for e
in [
"test_parents.f00000.root",
"test_parents.f00001.root",
"test_parents.f00002.root"]]
82 assert meta[0][
"parents"] == [
"parent0"],
"parents wrong"
83 assert meta[1][
"parents"] == [
"parent0",
"parent1"],
"parents wrong"
84 assert meta[2][
"parents"] == [
"parent1"],
"parents wrong"
88 assert m[
"eventLow"] == last + 1,
"eventLow is not correct"
90 assert m[
"eventLow"] + m[
"nEvents"] - 1 == m[
"eventHigh"],
"event high is inconsistent"
91 assert m[
"mcEvents"] == 0,
"MC events cannot be saved"
93 assert sum(e[
"nEvents"]
for e
in meta) == 550,
"number of events must be correct"
98 "test_noext":
"test_noext.f00000.root",
100 "test_otherext.foo":
"test_otherext.f00000.root",
103 "file://test_param?foo=bar":
"test_param.f00000.root",
104 "file://test_anchor#foo":
"test_anchor.f00000.root",
106 basf2.logging.log_level = basf2.LogLevel.INFO
108 for name, result
in check_filenames.items():
109 with clean_working_directory():
111 path.add_module(
"EventInfoSetter")
112 path.add_module(CreateDummyData(10,
True))
113 path.add_module(
"RootOutput", outputFileName=name, outputSplitSize=1, updateFileCatalog=
False)
115 assert os.listdir() == [result],
"wrong output file name"