 |
ATLAS Offline Software
|
◆ create_database()
| def python.tests.create_database |
( |
| ) |
|
◆ create_defect_type()
| def python.tests.create_defect_type |
( |
|
ddb, |
|
|
|
n |
|
) |
| |
◆ create_defect_type_unicode()
| def python.tests.create_defect_type_unicode |
( |
|
ddb, |
|
|
|
n, |
|
|
|
desc |
|
) |
| |
◆ invariant()
| def python.tests.invariant |
( |
|
test_data_name | ) |
|
Definition at line 8 of file DataQuality/DQUtils/python/tests.py.
10 testfile =
"%s.%s" % (func.__name__, test_data_name)
12 def check_invariant(*args, **kwargs):
13 result = func(*args, **kwargs)
14 if "DQU_UPDATE_TEST_DATA" in environ:
15 with open(test_data_name,
"wb")
as fd:
17 print(
"Wrote updated test data")
19 test_data = loads(resource_string(
"testdata", testfile))
20 assert result == test_data,
"Data considered 'invariant' has changed"
21 return check_invariant
◆ iov_ranges()
| def python.tests.iov_ranges |
( |
|
iovs | ) |
|
◆ iov_result_depends()
| def python.tests.iov_result_depends |
( |
|
iovs | ) |
|
◆ mungline()
| def python.tests.mungline |
( |
|
f | ) |
|
◆ shortDescription()
| def python.tests.shortDescription |
( |
|
self | ) |
|
◆ teardown_database()
| def python.tests.teardown_database |
( |
| ) |
|
Definition at line 30 of file DataQuality/DQDefects/python/tests/__init__.py.
34 teardown_db._clear_connections()
36 from gc
import collect
39 connection_string =
"/".
join(TEST_DATABASE.split(
"/")[:-1])
40 if connection_string.endswith(
".db"):
41 log.info(
"Deleting %s", connection_string)
42 unlink(connection_string)
45 msg =
"I don't know how to tear down %s" % TEST_DATABASE
47 raise NotImplementedError(msg)
49 @with_setup(create_database, teardown_database)
◆ test_database_creation()
| def python.tests.test_database_creation |
( |
| ) |
|
◆ test_database_creation_unicode()
| def python.tests.test_database_creation_unicode |
( |
| ) |
|
◆ test_database_retrieval()
| def python.tests.test_database_retrieval |
( |
| ) |
|
◆ test_defect_creation()
| def python.tests.test_defect_creation |
( |
| ) |
|
◆ test_defect_empty_retrieval()
| def python.tests.test_defect_empty_retrieval |
( |
| ) |
|
Definition at line 235 of file DataQuality/DQDefects/python/tests/__init__.py.
236 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
237 iovs = ddb.retrieve()
245 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
246 "Comment",
"DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
248 iovs = ddb.retrieve()
251 @with_setup(create_database, teardown_database)
◆ test_defect_failure_nonascii_name()
| def python.tests.test_defect_failure_nonascii_name |
( |
| ) |
|
Check that we raise an error if the defect name is not ASCII
Definition at line 191 of file DataQuality/DQDefects/python/tests/__init__.py.
193 Check that we raise an error if the defect name is not ASCII
196 if ROOT.gROOT.GetVersionInt() < 62000:
200 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
202 ddb.create_defect(
u"DQD_TÉST_DÉFÉCT_0",
"Test")
204 @with_setup(create_database, teardown_database)
◆ test_defect_insertion_retrieval()
| def python.tests.test_defect_insertion_retrieval |
( |
| ) |
|
Definition at line 134 of file DataQuality/DQDefects/python/tests/__init__.py.
135 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
138 TEST_DEFECT_NAME =
"DQD_TEST_DEFECT_%i" % TEST_ID
139 TEST_COMMENT =
"First test defect"
140 TEST_USER =
"DQDefects.tests"
141 TEST_SINCE, TEST_UNTIL = 0, 100
145 ddb.insert(TEST_DEFECT_NAME, TEST_SINCE, TEST_UNTIL, TEST_COMMENT, TEST_USER)
147 iovs = ddb.retrieve()
149 assert len(iovs) == 1
151 assert iov.since == TEST_SINCE
152 assert iov.until == TEST_UNTIL
153 assert iov.channel == TEST_DEFECT_NAME
155 assert not iov.recoverable
156 assert iov.user == TEST_USER
157 assert iov.comment == TEST_COMMENT
159 @with_setup(create_database, teardown_database)
◆ test_defect_insertion_retrieval_unicode()
| def python.tests.test_defect_insertion_retrieval_unicode |
( |
| ) |
|
Definition at line 160 of file DataQuality/DQDefects/python/tests/__init__.py.
162 if ROOT.gROOT.GetVersionInt() < 62000:
166 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
169 TEST_DEFECT_NAME =
"DQD_TEST_DEFECT_%i" % TEST_ID
170 TEST_COMMENT =
u"First test defect with character: ±"
171 TEST_USER =
u"DQDefécts.tests"
172 TEST_SINCE, TEST_UNTIL = 0, 100
173 TEST_DEFECT_DESCRIPTION =
u"À test defect (%i)" % TEST_ID
177 ddb.insert(TEST_DEFECT_NAME, TEST_SINCE, TEST_UNTIL, TEST_COMMENT, TEST_USER)
179 iovs = ddb.retrieve()
181 assert len(iovs) == 1
184 assert not iov.recoverable
185 assert iov.user == TEST_USER
186 assert iov.comment == TEST_COMMENT
187 assert ddb.all_defect_descriptions[TEST_DEFECT_NAME] == TEST_DEFECT_DESCRIPTION
189 @raises(UnicodeEncodeError)
190 @with_setup(create_database, teardown_database)
◆ test_defect_list_update_on_creation()
| def python.tests.test_defect_list_update_on_creation |
( |
| ) |
|
Check that the defect name list is updated when a defect is created
Definition at line 274 of file DataQuality/DQDefects/python/tests/__init__.py.
276 Check that the defect name list is updated when a defect is created
278 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
281 assert ddb.defect_names ==
set([name])
283 @with_setup(create_database, teardown_database)
◆ test_defect_mangle_bad_stored_unicode()
| def python.tests.test_defect_mangle_bad_stored_unicode |
( |
| ) |
|
Check that we recover if any of the string payloads are bad UTF-8
Definition at line 205 of file DataQuality/DQDefects/python/tests/__init__.py.
207 Check that we recover if any of the string payloads are bad UTF-8
210 if ROOT.gROOT.GetVersionInt() < 62000:
214 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
216 TEST_DEFECT_NAME =
'DQD_TEST_DEFECT_0'
217 TEST_SINCE, TEST_UNTIL = 0, 100
219 ddb.create_defect(TEST_DEFECT_NAME,
"Test")
221 store = ddb.defects_folder.storeObject
222 p = ddb._defect_payload
224 p[
"recoverable"] =
False
225 p[
"user"] = b
'\x80abc'
226 p[
"comment"] = b
'\x80abc'
228 defect_id = ddb.defect_chan_as_id(TEST_DEFECT_NAME,
True)
230 store(TEST_SINCE, TEST_UNTIL, p, defect_id, ddb.defects_tag,
False)
231 iovs = ddb.retrieve()
232 assert(iovs[0].user ==
'\\x80abc' and iovs[0].comment ==
'\\x80abc')
234 @with_setup(create_database, teardown_database)
◆ test_get_intolerable_defects()
| def python.tests.test_get_intolerable_defects |
( |
| ) |
|
Check that the intolerable defect listing function works
Definition at line 915 of file DataQuality/DQDefects/python/tests/__init__.py.
917 Check that the intolerable defect listing function works
919 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
928 ddb.new_virtual_defect(
"DQD_TEST_Virtual_DEFECT",
"Comment",
930 ddb.new_virtual_defect(
"PRIMARY",
"Comment",
931 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
932 ddb.new_virtual_defect(
"PHYS_test",
"Comment",
933 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1 DQD_TEST_DEFECT_2")
934 ddb.new_virtual_defect(
"TIGHT",
"Comment",
935 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1 DQD_TEST_DEFECT_2 DQD_TEST_DEFECT_3")
938 assert sorted(ddb.get_intolerable_defects()) == [
"DQD_TEST_DEFECT_0",
"DQD_TEST_DEFECT_1"],
"default params/old_primary_only check failed"
939 assert sorted(ddb.get_intolerable_defects(old_primary_only=
False, exclude=[
'TIGHT'])) == [
"DQD_TEST_DEFECT_0",
"DQD_TEST_DEFECT_1",
"DQD_TEST_DEFECT_2"],
'old_primary_only=False check failed'
940 assert sorted(ddb.get_intolerable_defects(old_primary_only=
False)) == [
"DQD_TEST_DEFECT_0",
"DQD_TEST_DEFECT_1"],
'regex handling check failed'
942 @with_setup(create_database, teardown_database)
◆ test_ignore_defects()
| def python.tests.test_ignore_defects |
( |
| ) |
|
Definition at line 636 of file DataQuality/DQDefects/python/tests/__init__.py.
638 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
645 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"",
"")
646 ddb.insert(
"DQD_TEST_DEFECT_1", 100, 200,
"",
"")
647 ddb.insert(
"DQD_TEST_DEFECT_2", 200, 300,
"",
"")
649 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"",
650 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1 DQD_TEST_DEFECT_2")
652 ignored_defects =
set([
"DQD_TEST_DEFECT_1"])
654 iovs = ddb.retrieve()
657 iovs = ddb.retrieve(ignore=ignored_defects)
658 assert not iov_result_depends(iovs) & ignored_defects,
"result depends on ignored defects"
660 @with_setup(create_database, teardown_database)
◆ test_independent_tags()
| def python.tests.test_independent_tags |
( |
| ) |
|
Definition at line 685 of file DataQuality/DQDefects/python/tests/__init__.py.
687 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
694 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"",
"")
695 ddb.insert(
"DQD_TEST_DEFECT_1", 100, 200,
"",
"")
696 ddb.insert(
"DQD_TEST_DEFECT_2", 200, 300,
"",
"")
698 dtag1 = ddb.new_defects_tag(
"dqd-test",
"New iov tag")
700 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"",
"", present=
False)
702 dtag2 = ddb.new_defects_tag(
"dqd-test-2",
"New iov tag")
705 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"",
706 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
708 ltag1 = ddb.new_logics_tag()
710 ddb.update_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
711 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_2")
713 ltag2 = ddb.new_logics_tag()
715 assert ltag1 != ltag2, f
'{ltag1} and {ltag2} should be different'
717 iovs = DefectsDB(TEST_DATABASE, tag=(
"HEAD", ltag1)).
retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
720 iovs = DefectsDB(TEST_DATABASE, tag=(
"HEAD", ltag2)).
retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
723 iovs = DefectsDB(TEST_DATABASE, tag=(dtag1, ltag1)).
retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
726 iovs = DefectsDB(TEST_DATABASE, tag=(dtag2, ltag2)).
retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
729 htag = ddb.new_hierarchical_tag(dtag2, ltag2)
731 iovs = DefectsDB(TEST_DATABASE, tag=(htag, htag)).
retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
734 iovs = DefectsDB(TEST_DATABASE, tag=htag).
retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
737 @with_setup(create_database, teardown_database)
◆ test_intersect()
| def python.tests.test_intersect |
( |
| ) |
|
Definition at line 812 of file DataQuality/DQDefects/python/tests/__init__.py.
814 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
821 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 1000,
"",
"")
822 ddb.insert(
"DQD_TEST_DEFECT_0", 1000, 2000,
"",
"")
824 iovs = ddb.retrieve(50, 100, intersect=
True)
825 assert len(iovs) == 1
826 assert (iovs[0].since, iovs[0].until) == (50, 100)
828 iovs = ddb.retrieve(999, 1001, intersect=
True)
829 assert len(iovs) == 2
831 assert (first.since, first.until) == (999, 1000)
832 assert (second.since, second.until) == (1000, 1001)
834 @with_setup(create_database, teardown_database)
◆ test_iov_tag_defects()
| def python.tests.test_iov_tag_defects |
( |
| ) |
|
Definition at line 777 of file DataQuality/DQDefects/python/tests/__init__.py.
779 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
786 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"comment1",
"user1", present=
False)
787 ddb.insert(
"DQD_TEST_DEFECT_1", 100, 200,
"",
"")
788 ddb.insert(
"DQD_TEST_DEFECT_2", 200, 300,
"comment2",
"user2", recoverable=
True)
790 ddb.new_defects_tag(
"dqd-test",
"New iov tag",
793 ddb2 = DefectsDB(TEST_DATABASE, tag=(
'DetStatusDEFECTS-dqd-test',
'HEAD'))
794 iovs = ddb2.retrieve(nonpresent=
True)
795 assert len(iovs) == 2
796 assert ((iovs[0].channel, iovs[0].since, iovs[0].until,
797 iovs[0].present, iovs[0].recoverable, iovs[0].user,
800 (
'DQD_TEST_DEFECT_0', 0, 51,
801 False,
False,
'user1',
803 assert ((iovs[1].channel, iovs[1].since, iovs[1].until,
804 iovs[1].present, iovs[1].recoverable, iovs[1].user,
807 (
'DQD_TEST_DEFECT_2', 210, 300,
811 @with_setup(create_database, teardown_database)
◆ test_list_empty_tag()
| def python.tests.test_list_empty_tag |
( |
| ) |
|
Checking that listing a tag works even if the tag is empty
Definition at line 943 of file DataQuality/DQDefects/python/tests/__init__.py.
945 Checking that listing a tag works even if the tag is empty
947 ddb = DefectsDB(TEST_DATABASE, read_only=
False, tag=
"nominal")
948 ddb.virtual_defect_names
950 @with_setup(create_database, teardown_database)
◆ test_many_sparse_channels()
| def python.tests.test_many_sparse_channels |
( |
| ) |
|
Definition at line 353 of file DataQuality/DQDefects/python/tests/__init__.py.
354 "Testing many virtual channels with sparsely placed IoVs"
355 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
360 with ddb.storage_buffer:
361 for i
in all_defects:
362 ddb.insert(i, 0, 100,
"Test",
"DQDefects.tests")
364 queried_defects = all_defects[:-1]
365 result = ddb.retrieve(channels=queried_defects)
366 queried_defects_set =
set(queried_defects)
367 result_defects_set =
set(i.channel
for i
in result)
369 unwanted_defects_set = result_defects_set - queried_defects_set
370 assert not unwanted_defects_set,
"Unwanted defects: %r" % unwanted_defects_set
372 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"Comment",
373 " ".
join(all_defects))
375 result = ddb.retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
376 assert result.channels ==
set([
"DQD_TEST_VIRTUAL_DEFECT"])
377 assert len(result) == 1
379 assert result[0].comment ==
" ".
join(
sorted(all_defects)), result[0].comment
381 result = ddb.retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"],
384 assert result.channels ==
set([
"DQD_TEST_VIRTUAL_DEFECT"])
385 assert len(result) == 1
387 @with_setup(create_database, teardown_database)
◆ test_noncontiguous_defectid_creation()
| def python.tests.test_noncontiguous_defectid_creation |
( |
| ) |
|
Test that defects are inserted correctly into non-contiguous ranges
Definition at line 951 of file DataQuality/DQDefects/python/tests/__init__.py.
953 Test that defects are inserted correctly into non-contiguous ranges
955 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
958 ddb._create_defect_with_id(2,
"TEST_DEFECT_DQD_2",
"")
959 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
960 "Comment",
"DQD_TEST_DEFECT_0 TEST_DEFECT_DQD_2")
961 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT_2",
962 "Comment",
"DQD_TEST_DEFECT_0 TEST_DEFECT_DQD_2")
966 ids, names, m = ddb.get_channels()
967 assert m == {0:
'DQD_TEST_DEFECT_0', 1:
'DQD_TEST_DEFECT_1', 2:
'TEST_DEFECT_DQD_2', 3:
'DQD_TEST_DEFECT_3',
'DQD_TEST_DEFECT_3': 3,
'DQD_TEST_DEFECT_0': 0,
'DQD_TEST_DEFECT_1': 1,
'TEST_DEFECT_DQD_2': 2},
'Primary defect problem'
968 ids, names, m = ddb.get_virtual_channels()
969 assert m == {2147483648:
'DQD_TEST_VIRTUAL_DEFECT', 2147483649:
'DQD_TEST_VIRTUAL_DEFECT_2',
'DQD_TEST_VIRTUAL_DEFECT': 2147483648,
'DQD_TEST_VIRTUAL_DEFECT_2': 2147483649},
'Virtual defect problem'
971 @with_setup(create_database, teardown_database)
◆ test_nonpresent()
| def python.tests.test_nonpresent |
( |
| ) |
|
Definition at line 335 of file DataQuality/DQDefects/python/tests/__init__.py.
336 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
340 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"Test",
"DQDefects.tests")
341 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"Test",
"DQDefects.tests", present=
False)
343 iovs = ddb.retrieve()
345 assert len(iovs) == 0
347 iovs = ddb.retrieve(nonpresent=
True)
349 assert len(iovs) == 1
350 assert not iovs[0].present
352 @with_setup(create_database, teardown_database)
◆ test_normalize_defect_names()
| def python.tests.test_normalize_defect_names |
( |
| ) |
|
Definition at line 835 of file DataQuality/DQDefects/python/tests/__init__.py.
836 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
843 ddb.new_virtual_defect(
"DQD_TEST_Virtual_DEFECT",
"Comment",
844 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
846 assert ddb.normalize_defect_names(
'dQd_tEsT_DeFeCt_0')==
'DQD_TEST_DEFECT_0'
847 assert ddb.normalize_defect_names([
'dQd_tEsT_DeFeCt_0',
'DqD_TeSt_dEfEcT_1'])==[
'DQD_TEST_DEFECT_0',
'DQD_TEST_DEFECT_1']
848 assert ddb.normalize_defect_names(
'dqd_test_virtual_defect')==
'DQD_TEST_Virtual_DEFECT'
850 ddb.normalize_defect_names(
'does_not_exist')
852 except DefectUnknownError:
854 assert wasthrown,
'normalize_defect_names should throw when the defect does not exist'
856 @with_setup(create_database, teardown_database)
◆ test_query_with_primary_dependencies()
| def python.tests.test_query_with_primary_dependencies |
( |
| ) |
|
Definition at line 661 of file DataQuality/DQDefects/python/tests/__init__.py.
663 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
668 for i, defect
in enumerate(defect_names):
669 ddb.insert(defect, i*100, (i+1)*100,
"",
"")
671 ddb.new_virtual_defect(
"DQD_TEST_VDEFECT",
"",
" ".
join(defect_names))
673 iovs = ddb.retrieve(channels=[
"DQD_TEST_VDEFECT"])
674 assert iovs.channels ==
set([
"DQD_TEST_VDEFECT"])
675 assert len(iovs) == len(defect_names)
677 iovs = ddb.retrieve(channels=[
"DQD_TEST_VDEFECT"],
678 with_primary_dependencies=
True)
679 assert iovs.channels ==
set([
"DQD_TEST_VDEFECT"] + defect_names), (
682 assert len(iovs) == len(defect_names)*2
684 @with_setup(create_database, teardown_database)
◆ test_query_with_primary_dependencies_with_ignore()
| def python.tests.test_query_with_primary_dependencies_with_ignore |
( |
| ) |
|
Checking with_primary_dependencies + ignore
Checks that the set of channels and iovs returned contains the correct
number of channels and iovs when specifying both with_primary_dependencies
and ignore to DQDefects.Retrieve
Definition at line 738 of file DataQuality/DQDefects/python/tests/__init__.py.
740 Checking with_primary_dependencies + ignore
742 Checks that the set of channels and iovs returned contains the correct
743 number of channels and iovs when specifying both with_primary_dependencies
744 and ignore to DQDefects.Retrieve
747 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
752 for i, defect
in enumerate(defect_names):
753 ddb.insert(defect, i*100, (i+1)*100,
"",
"")
755 ignored =
set(defect_names[:1])
757 ddb.new_virtual_defect(
"DQD_TEST_VDEFECT",
"",
" ".
join(defect_names))
759 iovs = ddb.retrieve(channels=[
"DQD_TEST_VDEFECT"], ignore=ignored)
760 assert iovs.channels ==
set([
"DQD_TEST_VDEFECT"])
761 assert len(iovs) == len(defect_names)-1
763 iovs = ddb.retrieve(channels=[
"DQD_TEST_VDEFECT"], ignore=ignored,
764 with_primary_dependencies=
True)
765 assert iovs.channels ==
set([
"DQD_TEST_VDEFECT"] + defect_names) - ignored, (
768 assert len(iovs) == len(defect_names[1:])*2
◆ test_reject_duplicate_names()
| def python.tests.test_reject_duplicate_names |
( |
| ) |
|
Definition at line 857 of file DataQuality/DQDefects/python/tests/__init__.py.
858 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
860 ddb.create_defect(
'A_TEST_DEFECT',
'A test defect')
864 ddb.create_defect(
'A_TEST_DEFECT',
'A test defect 2')
865 except DefectExistsError:
867 assert wasthrown,
'Creation of duplicate defects should throw'
871 ddb.create_defect(
'A_test_defect',
'A test defect 2')
872 except DefectExistsError:
874 assert wasthrown,
'Creation of duplicate defects should throw, even with different case'
878 ddb.create_defect(
'A_test_defect_2',
'A test defect 2')
879 ddb.rename_defect(
'A_test_defect_2',
'A_TEST_DEFECT')
880 except DefectExistsError:
882 assert wasthrown,
'Rename of defect to existing defect name should throw'
884 ddb.new_virtual_defect(
'TEST_VIRTUAL_DEFECT',
'Comment',
'A_TEST_DEFECT')
887 ddb.new_virtual_defect(
'Test_Virtual_Defect',
'Comment',
'A_TEST_DEFECT')
888 except DefectExistsError:
890 assert wasthrown,
'Creation of duplicate virtual defects should throw'
892 ddb.new_virtual_defect(
'Test_Virtual_Defect_2',
'Comment',
'A_TEST_DEFECT')
895 ddb.rename_defect(
'Test_Virtual_Defect_2',
'TEST_VIRTUAL_DEFECT')
896 except DefectExistsError:
898 assert wasthrown,
'Rename of virtual defect to existing virtual defect name should throw'
902 ddb.rename_defect(
'Test_Virtual_Defect_2',
'A_TEST_DEFECT')
903 except DefectExistsError:
905 assert wasthrown,
'Rename of virtual defect to existing defect name should throw'
909 ddb.rename_defect(
'A_TEST_DEFECT',
'TEST_VIRTUAL_DEFECT')
910 except DefectExistsError:
912 assert wasthrown,
'Rename of defect to existing virtual defect name should throw'
914 @with_setup(create_database, teardown_database)
◆ test_rename_defects()
| def python.tests.test_rename_defects |
( |
| ) |
|
Definition at line 572 of file DataQuality/DQDefects/python/tests/__init__.py.
574 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
580 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"",
"")
581 ddb.insert(
"DQD_TEST_DEFECT_1", 100, 200,
"",
"")
583 defects_tag = ddb.new_defects_tag(
"dqd-test",
"New iov tag")
586 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"",
587 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
588 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT_2",
"",
589 "DQD_TEST_VIRTUAL_DEFECT")
591 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT_3",
"",
592 "DQD_TEST_DEFECT_0 !DQD_TEST_DEFECT_1")
593 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT_4",
"",
594 "!DQD_TEST_VIRTUAL_DEFECT")
596 original_tag = ddb.new_logics_tag()
597 original_htag = ddb.new_hierarchical_tag(defects_tag, original_tag)
608 ddb.rename_defect(
"DQD_TEST_DEFECT_0",
"DQD_TEST_DEFECT_3")
609 assert ddb.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT'].clauses == [
'DQD_TEST_DEFECT_3',
'DQD_TEST_DEFECT_1'], ddb.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT'].clauses
610 assert ddb.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT_3'].clauses == [
'DQD_TEST_DEFECT_3',
'!DQD_TEST_DEFECT_1'], ddb.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT_3'].clauses
613 ddb2 = DefectsDB(TEST_DATABASE, tag=original_htag)
614 assert ddb2.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT'].clauses == [
'DQD_TEST_DEFECT_3',
'DQD_TEST_DEFECT_1'], ddb2.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT'].clauses
617 ddb.rename_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"DQD_TEST_VIRTUAL_DEFECT_A")
619 assert ddb.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT_2'].clauses == [
'DQD_TEST_VIRTUAL_DEFECT_A'], ddb.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT_2'].clauses
620 assert ddb.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT_4'].clauses == [
'!DQD_TEST_VIRTUAL_DEFECT_A'], ddb.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT_4'].clauses
623 ddb2 = DefectsDB(TEST_DATABASE, tag=original_htag)
624 assert ddb2.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT_2'].clauses == [
'DQD_TEST_VIRTUAL_DEFECT_A'], ddb2.virtual_defect_logics[
'DQD_TEST_VIRTUAL_DEFECT_2'].clauses
626 ddb._virtual_defect_consistency_check()
◆ test_return_types()
| def python.tests.test_return_types |
( |
| ) |
|
Test that return types are appropriate
Definition at line 972 of file DataQuality/DQDefects/python/tests/__init__.py.
974 Test that return types are appropriate
976 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
980 did = ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
981 "Comment",
"DQD_TEST_DEFECT_0")
982 assert type(did) == int
984 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"",
"")
986 dtag = ddb.new_defects_tag(
"dqd-test",
"New iov tag")
987 assert type(dtag) == str, f
'{type(dtag)} instead of str'
988 ltag = ddb.new_logics_tag()
989 assert type(ltag) == str
990 htag = ddb.new_hierarchical_tag(dtag, ltag)
991 assert type(htag) == str
993 assert type(ddb.defects_tags) == list, f
'{type(ddb.defects_tags)} instead of list'
994 assert type(ddb.defects_tags[0]) == str, f
'{type(ddb.defects_tags[0])} instead of str'
995 assert type(ddb.logics_tags) == list, f
'{type(ddb.logics_tags)} instead of list'
996 assert type(ddb.logics_tags[0]) == str, f
'{type(ddb.logics_tags[0])} instead of str'
997 assert type(ddb.tags) == list, f
'{type(ddb.tags)} instead of list'
998 assert type(ddb.tags[0]) == str, f
'{type(ddb.tags[0])} instead of str'
1000 ids, names, _ = ddb.get_channels()
1001 ids =
set(ids); names =
set(names)
1002 assert type(ids.pop()) == int
1003 assert type(names.pop()) == str
1004 ids, names, _ = ddb.get_virtual_channels()
1005 ids =
set(ids); names =
set(names)
1006 assert type(ids.pop()) == int
1007 assert type(names.pop()) == str
1009 iov = ddb.retrieve()
1010 assert type(iov[0].channel) == str
1011 assert type(iov[0].comment) == str
1012 assert type(iov[0].user) == str
1013 assert type(iov[0].present) == bool
1014 assert type(iov[0].recoverable) == bool
1016 assert type(ddb.all_defect_descriptions[
"DQD_TEST_DEFECT_0"]) == str,
str(ddb.all_defect_descriptions)
1017 assert type(ddb.all_defect_descriptions[
"DQD_TEST_VIRTUAL_DEFECT"]) == str,
str(ddb.all_defect_descriptions)
1019 ddb2 = DefectsDB(TEST_DATABASE, read_only=
False, tag=htag)
1020 assert type(ddb2.defects_tag) == str
1021 assert type(ddb2.logics_tag) == str
1022 assert type(ddb2.tag.defects) == str
1023 assert type(ddb2.tag.logic) == str
◆ test_tagging_unicode()
| def python.tests.test_tagging_unicode |
( |
| ) |
|
Definition at line 543 of file DataQuality/DQDefects/python/tests/__init__.py.
545 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
551 ddb.insert(
u"DQD_TEST_DEFECT_0", 0, 100,
u"",
u"")
552 ddb.insert(
u"DQD_TEST_DEFECT_1", 100, 200,
u"",
u"")
554 defects_tag = ddb.new_defects_tag(
"dqd-test",
u"New iov tag")
557 ddb.new_virtual_defect(
u"DQD_TEST_VIRTUAL_DEFECT",
u"",
558 u"DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
560 original_tag = ddb.new_logics_tag()
561 original_htag = ddb.new_hierarchical_tag(defects_tag, original_tag)
563 what = {
"channels": [
u"DQD_TEST_VIRTUAL_DEFECT"]}
565 orig_iovs = DefectsDB((TEST_DATABASE), tag=original_htag).
retrieve(**what)
567 assert len(orig_iovs) == 2
568 assert (orig_iovs[0].since, orig_iovs[0].until) == ( 0, 100)
569 assert (orig_iovs[1].since, orig_iovs[1].until) == (100, 200)
571 @with_setup(create_database, teardown_database)
◆ test_update_virtual_defect()
| def python.tests.test_update_virtual_defect |
( |
| ) |
|
Definition at line 496 of file DataQuality/DQDefects/python/tests/__init__.py.
498 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
505 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"",
"")
506 ddb.insert(
"DQD_TEST_DEFECT_1", 100, 200,
"",
"")
507 ddb.insert(
"DQD_TEST_DEFECT_2", 200, 300,
"",
"")
509 defects_tag = ddb.new_defects_tag(
"dqd-test",
"New iov tag")
512 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"",
513 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
515 original_tag = ddb.new_logics_tag()
516 original_htag = ddb.new_hierarchical_tag(defects_tag, original_tag)
518 ddb.update_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
519 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_2")
521 new_tag = ddb.new_logics_tag()
522 new_htag = ddb.new_hierarchical_tag(defects_tag, new_tag)
524 what = {
"channels": [
"DQD_TEST_VIRTUAL_DEFECT"]}
526 orig_iovs = DefectsDB(TEST_DATABASE, tag=original_htag).
retrieve(**what)
527 new_iovs = DefectsDB(TEST_DATABASE, tag=new_htag).
retrieve(**what)
528 head_iovs = DefectsDB(TEST_DATABASE).
retrieve(**what)
530 assert head_iovs == new_iovs
531 assert head_iovs != orig_iovs
533 assert len(head_iovs) == 2
534 assert (head_iovs[0].since, head_iovs[0].until) == ( 0, 100)
535 assert (head_iovs[1].since, head_iovs[1].until) == (200, 300)
537 from DQUtils.db
import Databases
538 db3 = Databases.get_instance(TEST_DATABASE, read_only=
True)
539 pfs = db3.getFolderSet(
'/GLOBAL/DETSTATUS')
540 assert pfs.tagDescription(new_htag) !=
'',
'Hierarchical tag description not created'
542 @with_setup(create_database, teardown_database)
◆ test_virtual_defect_consistency()
| def python.tests.test_virtual_defect_consistency |
( |
| ) |
|
Checking that virtual flags don't depend on non-existent flags
Definition at line 770 of file DataQuality/DQDefects/python/tests/__init__.py.
772 Checking that virtual flags don't depend on non-existent flags
774 DefectsDB()._virtual_defect_consistency_check()
776 @with_setup(create_database, teardown_database)
◆ test_virtual_defect_creation()
| def python.tests.test_virtual_defect_creation |
( |
| ) |
|
Definition at line 252 of file DataQuality/DQDefects/python/tests/__init__.py.
254 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
261 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
262 "Comment",
"DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
265 assert len(ddb.virtual_defect_ids) == 1
266 assert "DQD_TEST_VIRTUAL_DEFECT" in ddb.virtual_defect_names
269 ddb = DefectsDB(TEST_DATABASE)
270 assert len(ddb.virtual_defect_ids) == 1
271 assert "DQD_TEST_VIRTUAL_DEFECT" in ddb.virtual_defect_names
273 @with_setup(create_database, teardown_database)
◆ test_virtual_defect_creation_unicode()
| def python.tests.test_virtual_defect_creation_unicode |
( |
| ) |
|
Definition at line 296 of file DataQuality/DQDefects/python/tests/__init__.py.
298 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
305 ddb.new_virtual_defect(
u"DQD_TEST_VIRTUAL_DEFECT",
306 u"Comment",
u"DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
309 assert len(ddb.virtual_defect_ids) == 1
310 assert "DQD_TEST_VIRTUAL_DEFECT" in ddb.virtual_defect_names
313 ddb = DefectsDB(TEST_DATABASE)
314 assert len(ddb.virtual_defect_ids) == 1
315 assert "DQD_TEST_VIRTUAL_DEFECT" in ddb.virtual_defect_names
317 @raises(UnicodeEncodeError)
318 @with_setup(create_database, teardown_database)
◆ test_virtual_defect_failure_nonascii_name()
| def python.tests.test_virtual_defect_failure_nonascii_name |
( |
| ) |
|
Check that we raise an error if the virtual defect name is not ASCII
Definition at line 319 of file DataQuality/DQDefects/python/tests/__init__.py.
321 Check that we raise an error if the virtual defect name is not ASCII
324 if ROOT.gROOT.GetVersionInt() < 62000:
328 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
330 ddb.create_defect(
u"DQD_TEST_DEFECT_0",
"Test")
331 ddb.new_virtual_defect(
u"DQD_TÉST_VIRTUAL_DÉFÉCT",
332 u"Comment",
u"DQD_TEST_DEFECT_0")
334 @with_setup(create_database, teardown_database)
◆ test_virtual_defect_hiding()
| def python.tests.test_virtual_defect_hiding |
( |
| ) |
|
Definition at line 476 of file DataQuality/DQDefects/python/tests/__init__.py.
477 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
484 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"Comment",
485 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
487 new_tag = ddb.new_logics_tag()
489 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT_2",
"Comment",
490 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
492 ddb2 = DefectsDB(TEST_DATABASE, tag=(
'HEAD', new_tag), read_only=
True)
493 assert ddb2.virtual_defect_names ==
set([
'DQD_TEST_VIRTUAL_DEFECT']),
'Only one virtual defect should be in this tag'
495 @with_setup(create_database, teardown_database)
◆ test_virtual_defect_list_update_on_creation()
| def python.tests.test_virtual_defect_list_update_on_creation |
( |
| ) |
|
Check that the virtual defect name list is updated when a defect is created
Definition at line 284 of file DataQuality/DQDefects/python/tests/__init__.py.
286 Check that the virtual defect name list is updated when a defect is created
288 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
290 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
293 assert ddb.virtual_defect_names ==
set([
"DQD_TEST_VIRTUAL_DEFECT"])
295 @with_setup(create_database, teardown_database)
◆ test_virtual_defects()
| def python.tests.test_virtual_defects |
( |
| ) |
|
Definition at line 388 of file DataQuality/DQDefects/python/tests/__init__.py.
389 "Testing virtual defect basics"
390 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
397 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"Comment",
398 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
401 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"Test",
"DQDefects.tests")
402 ddb.insert(
"DQD_TEST_DEFECT_1", 150, 200,
"Test",
"DQDefects.tests")
405 iovs = ddb.retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
408 assert len(iovs) == 2
410 assert (first.since, first.until) == (0, 100)
411 assert (second.since, second.until) == (150, 200)
412 assert first.channel == second.channel ==
"DQD_TEST_VIRTUAL_DEFECT"
413 del first, second, iovs
416 ddb.insert(
"DQD_TEST_DEFECT_1", 150, 200,
"Test",
"DQDefects.tests", present=
False)
418 iovs = ddb.retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
420 assert len(iovs) == 1
422 assert (first.since, first.until) == (0, 100)
423 assert first.channel ==
"DQD_TEST_VIRTUAL_DEFECT"
426 ddb.insert(
"DQD_TEST_DEFECT_0", 100, 150,
"Test",
"DQDefects.tests")
427 iovs = ddb.retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
429 assert len(iovs) == 1
431 assert (first.since, first.until) == (0, 150)
432 assert first.channel ==
"DQD_TEST_VIRTUAL_DEFECT"
434 @with_setup(create_database, teardown_database)
◆ test_virtual_defects_deep()
| def python.tests.test_virtual_defects_deep |
( |
| ) |
|
Definition at line 435 of file DataQuality/DQDefects/python/tests/__init__.py.
436 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
443 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"Test",
"DQDefects.tests")
444 ddb.insert(
"DQD_TEST_DEFECT_1", 150, 200,
"Test",
"DQDefects.tests")
447 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT_0",
"",
"DQD_TEST_DEFECT_0")
448 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT_1",
"",
"DQD_TEST_DEFECT_1")
450 ddb = DefectsDB(TEST_DATABASE)
454 @with_setup(create_database, teardown_database)
◆ test_virtual_defects_invert()
| def python.tests.test_virtual_defects_invert |
( |
| ) |
|
Definition at line 84 of file DataQuality/DQDefects/python/tests/__init__.py.
85 "Testing virtual defects involving inversion"
86 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
94 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"Comment",
95 "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1 !DQD_TEST_DEFECT_2")
98 ddb.insert(
"DQD_TEST_DEFECT_0", 0, 100,
"Test",
"DQDefects.tests")
99 ddb.insert(
"DQD_TEST_DEFECT_1", 150, 200,
"Test",
"DQDefects.tests")
100 ddb.insert(
"DQD_TEST_DEFECT_2", 50, 125,
"Test",
"DQDefects.tests")
103 iovs = ddb.retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
106 assert len(iovs) == 4,
list(iovs)
107 first, second, third, fourth = iovs
108 assert (first.since, first.until) == (0, 50), first
109 assert (second.since, second.until) == (50, 100), second
110 assert (third.since, third.until) == (125, 150), third
111 assert (fourth.since, fourth.until) == (150, 200), fourth
112 assert first.channel == second.channel == third.channel == fourth.channel ==
"DQD_TEST_VIRTUAL_DEFECT", (first.channel, second.channel, third.channel, fourth.channel)
113 del first, second, third, fourth, iovs
116 iovs = ddb.retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"], evaluate_full=
False)
117 assert len(iovs) == 2,
list(iovs)
120 ddb.insert(
"DQD_TEST_DEFECT_2", 50, 150,
"Test",
"DQDefects.tests", present=
False)
121 iovs = ddb.retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
124 assert len(iovs) == 3,
list(iovs)
125 first, second, third = iovs
126 assert (first.since, first.until) == (0, 100), first
127 assert (second.since, second.until) == (100, 150), second
128 assert (third.since, third.until) == (150, 200), third
129 assert first.channel == second.channel == third.channel ==
"DQD_TEST_VIRTUAL_DEFECT", (first.channel, second.channel, third.channel)
130 del first, second, third, iovs
133 @with_setup(create_database, teardown_database)
◆ test_virtual_defects_stress()
| def python.tests.test_virtual_defects_stress |
( |
| ) |
|
Definition at line 455 of file DataQuality/DQDefects/python/tests/__init__.py.
456 ddb = DefectsDB(TEST_DATABASE, read_only=
False)
460 for i
in range(STRESS_COUNT):
463 with ddb.storage_buffer:
464 for i
in range(STRESS_COUNT):
465 ddb.insert(
"DQD_TEST_DEFECT_%i" % i, i, i+1,
"Test",
"DQDefects.tests")
467 ALL_DEFECTS =
" ".
join(
"DQD_TEST_DEFECT_%i" % i
for i
in range(STRESS_COUNT))
468 ddb.new_virtual_defect(
"DQD_TEST_VIRTUAL_DEFECT",
"", ALL_DEFECTS)
470 iovs = ddb.retrieve(channels=[
"DQD_TEST_VIRTUAL_DEFECT"])
472 assert len(iovs) == STRESS_COUNT - 1
473 assert (iovs[0].since, iovs[-1].until) == (1, STRESS_COUNT)
475 @with_setup(create_database, teardown_database)
◆ _shortDescription
| python.tests._shortDescription |
|
private |
| python.tests.g = list(globals().keys()) |
◆ log
◆ not_yet
| string python.tests.not_yet |
◆ shortDescription
| python.tests.shortDescription |
◆ teardown_db
| python.tests.teardown_db = None |
◆ TEST_DATABASE
| string python.tests.TEST_DATABASE = "test_defects.db/COMP200" |
def retrieve(aClass, aKey=None)
std::vector< typename R::value_type > sorted(const R &r, PROJ proj={})
Helper function to create a sorted vector from an unsorted range.
def test_reject_duplicate_names()
def test_database_retrieval()
def test_virtual_defect_failure_nonascii_name()
def test_normalize_defect_names()
def test_defect_empty_retrieval()
def test_ignore_defects()
def test_tagging_unicode()
def invariant(test_data_name)
def test_many_sparse_channels()
def test_database_creation()
def test_virtual_defect_consistency()
def test_rename_defects()
def iov_result_depends(iovs)
def test_defect_creation()
def test_query_with_primary_dependencies_with_ignore()
def shortDescription(self)
def test_defect_mangle_bad_stored_unicode()
def test_noncontiguous_defectid_creation()
def create_defect_type_unicode(ddb, n, desc)
def test_list_empty_tag()
def test_virtual_defect_creation()
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
void print(char *figname, TCanvas *c1)
def test_defect_insertion_retrieval()
std::string join(const std::vector< std::string > &v, const char c=',')
def test_defect_failure_nonascii_name()
def test_virtual_defects_invert()
def test_query_with_primary_dependencies()
def test_virtual_defects_stress()
def test_virtual_defect_creation_unicode()
def test_virtual_defect_hiding()
def test_get_intolerable_defects()
def test_defect_list_update_on_creation()
def test_defect_insertion_retrieval_unicode()
void collect(const HLT::TriggerElement *te, std::vector< Trig::Feature< T > > &data, const std::string &label, unsigned int condition, const std::string &teName, const HLT::TrigNavStructure *navstructure)
actual feature acceess implementation It has (thanks to the ClassTraits) functionality to flatten con...
def test_update_virtual_defect()
def create_defect_type(ddb, n)
def test_independent_tags()
def test_iov_tag_defects()
def test_virtual_defects()
def test_virtual_defects_deep()
def test_database_creation_unicode()
def test_virtual_defect_list_update_on_creation()