DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
test_configuration.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2# Andre dos Anjos <andre.dos.anjos@cern.ch>
3
4"""Unit test for the Python bindings to the Configuration class."""
5
6import os
7import unittest
8import conffwk
9
10scriptsdir=os.path.dirname(os.path.realpath(__file__))
11
12class Configuration(unittest.TestCase):
13 """Tests if we can manipulate ConfigurationWrap objects as expected."""
14
16 db = conffwk.Configuration("oksconflibs")
17 db.create_db("test.data.xml", [f'{scriptsdir}/test.schema.xml'])
18 db.commit()
19
21 self.assertRaises(RuntimeError, conffwk.Configuration, "test2.data.xml")
22
24 db = conffwk.Configuration("oksconflibs:test.data.xml")
25 includes = db.get_includes("test.data.xml")
26 self.assertEqual(len(includes), 1)
27 self.assertEqual(includes[0], f"{scriptsdir}/test.schema.xml")
28
30 db = conffwk.Configuration("oksconflibs:test.data.xml")
31 db.add_include(f'{scriptsdir}/core.schema.xml')
32 includes = db.get_includes("test.data.xml")
33 print(includes)
34 self.assertEqual(len(includes), 2)
35 db.commit()
36 includes = db.get_includes("test.data.xml")
37 self.assertEqual(len(includes), 2)
38
40 db = conffwk.Configuration("oksconflibs:test.data.xml")
41 includes = db.get_includes()
42 self.assertEqual(len(includes), 2)
43 db.remove_include(includes[1])
44 db.commit()
45 includes = db.get_includes()
46 self.assertEqual(len(includes), 1)
47
49 db = conffwk.Configuration("oksconflibs:test.data.xml")
50 for i in range(10):
51 db.create_obj("Dummy", "TestDummy-%d" % i)
52 db.commit()
53
55 db = conffwk.Configuration("oksconflibs:test.data.xml")
56 master = db.create_obj("Dummy", "MasterDummy")
57 for i in range(100, 110):
58 db.create_obj("Dummy", "TestDummy-%d" % i)
59 db.commit()
60
62 db = conffwk.Configuration("oksconflibs:test.data.xml")
63 for i in range(10):
64 self.assertTrue(db.test_object("Dummy", "TestDummy-%d" % i, 0, []))
65 for i in range(1000, 1010):
66 self.assertTrue(not db.test_object("Dummy", "TestDummy-%d" % i, 0, []))
67
69 db = conffwk.Configuration("oksconflibs:test.data.xml")
70 self.assertRaises(RuntimeError, db.create_obj, "Dummy", "TestDummy-3")
71
73 db = conffwk.Configuration("oksconflibs:test.data.xml")
74 obj = db.get_obj("Dummy", "TestDummy-4")
75
77 db = conffwk.Configuration("oksconflibs:test.data.xml")
78 objs = db.get_objs("Dummy")
79 self.assertEqual(len(objs), 21)
80
82 db = conffwk.Configuration("oksconflibs:test.data.xml")
83 self.assertRaises(RuntimeError, db.get_obj, "Dummy", "TestDummy-44")
84
86 db = conffwk.Configuration("oksconflibs:test.data.xml")
87 obj = db.get_obj("Dummy", "TestDummy-1")
88 db.destroy_obj(obj)
89 db.commit()
90 self.assertRaises(RuntimeError, db.get_obj, "Dummy", "TestDummy-1")
91
93 db = conffwk.Configuration("oksconflibs:test.data.xml")
94 self.assertTrue(db.loaded())
95 db.unload()
96 self.assertTrue(not db.loaded())
97 db.load("test.data.xml")
98 self.assertTrue(db.loaded())
99 db.unload()
100 self.assertTrue(not db.loaded())
101
103 amount = 10000
104 db = conffwk.Configuration("oksconflibs")
105 db.create_db("test.data.xml", [f'{scriptsdir}/test.schema.xml'])
106 for i in range(amount):
107 db.create_obj("Dummy", "TestDummy-%d" % i)
108 db.commit()
109
111 import sys
112 sys.setrecursionlimit(10000)
113
114 depth = 10000
115 db = conffwk.Configuration("oksconflibs")
116 db.create_db("test.data.xml", [f'{scriptsdir}/test.schema.xml'])
117 previous = None
118 for i in range(depth):
119 obj = db.create_obj("Second", "Object-%d" % i)
120 if previous:
121 obj['Another'] = previous
122 previous = obj
123 db.commit()
124
125
126 # If CanRetrieveDeepRelations fails, don't expect subsequent tests to be able to open oksconflibs:test.data.xml
127
129 # we test if one can leave the rlevel in gets() to "0" and that works
130 import sys
131 sys.setrecursionlimit(10000)
132
133 depth = 10000
134 db = conffwk.Configuration('oksconflibs:test.data.xml')
135 # gets the topmost obj.
136 obj = db.get_obj('Second', 'Object-%d' % (depth-1))
137 counter = 1
138
139 while obj['Another']:
140 counter += 1
141 obj = obj['Another'] # go deep in the relationship
142 self.assertEqual(counter, depth)
143
145 db = conffwk.Configuration("oksconflibs")
146 dbfile = 'testcomment.data.xml'
147 db.create_db(dbfile, [f'{scriptsdir}/test.schema.xml'])
148 comment = "My test comment"
149 db.commit(comment)
150 del db
151 with open(dbfile) as textfile:
152 line = [l for l in textfile if ' <comment ' in l][0]
153
154 element = line.splitlines()[0]
155 self.assertTrue(comment in element)
156
157
158if __name__ == "__main__":
159 import sys
160 sys.argv.append('-v')
161 unittest.main()