Пример #1
0
def test_ignore_defects():

    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)
    create_defect_type(ddb, 2)

    ddb.insert("DQD_TEST_DEFECT_0", 0, 100, "", "")
    ddb.insert("DQD_TEST_DEFECT_1", 100, 200, "", "")
    ddb.insert("DQD_TEST_DEFECT_2", 200, 300, "", "")

    ddb.new_virtual_defect(
        "DQD_TEST_VIRTUAL_DEFECT", "",
        "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1 DQD_TEST_DEFECT_2")

    ignored_defects = set(["DQD_TEST_DEFECT_1"])

    iovs = ddb.retrieve()
    assert iov_result_depends(iovs) & ignored_defects, "test is broken"

    iovs = ddb.retrieve(ignore=ignored_defects)
    assert not iov_result_depends(
        iovs) & ignored_defects, "result depends on ignored defects"
Пример #2
0
def test_independent_tags():

    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)
    create_defect_type(ddb, 2)

    ddb.insert("DQD_TEST_DEFECT_0", 0, 100, "", "")
    ddb.insert("DQD_TEST_DEFECT_1", 100, 200, "", "")
    ddb.insert("DQD_TEST_DEFECT_2", 200, 300, "", "")

    dtag1 = ddb.new_defects_tag("dqd-test", "New iov tag")

    ddb.insert("DQD_TEST_DEFECT_0", 0, 100, "", "", present=False)

    dtag2 = ddb.new_defects_tag("dqd-test-2", "New iov tag")

    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT", "",
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")

    ltag1 = ddb.new_logics_tag()

    ddb.update_virtual_defect("DQD_TEST_VIRTUAL_DEFECT",
                              "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_2")

    ltag2 = ddb.new_logics_tag()

    iovs = DefectsDB(
        TEST_DATABASE,
        tag=("HEAD", ltag1)).retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])
    assert iov_ranges(iovs) == [(100, 200)], str(iov_ranges(iovs))

    iovs = DefectsDB(
        TEST_DATABASE,
        tag=("HEAD", ltag2)).retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])
    assert iov_ranges(iovs) == [(200, 300)], str(iov_ranges(iovs))

    iovs = DefectsDB(
        TEST_DATABASE,
        tag=(dtag1, ltag1)).retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])
    assert iov_ranges(iovs) == [(0, 100), (100, 200)], str(iov_ranges(iovs))

    iovs = DefectsDB(
        TEST_DATABASE,
        tag=(dtag2, ltag2)).retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])
    assert iov_ranges(iovs) == [(200, 300)], str(iov_ranges(iovs))

    htag = ddb.new_hierarchical_tag(dtag2, ltag2)

    iovs = DefectsDB(TEST_DATABASE,
                     tag=(htag,
                          htag)).retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])
    assert iov_ranges(iovs) == [(200, 300)], str(iov_ranges(iovs))

    iovs = DefectsDB(TEST_DATABASE,
                     tag=htag).retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])
    assert iov_ranges(iovs) == [(200, 300)], str(iov_ranges(iovs))
Пример #3
0
def 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
    """

    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    # Create two defects
    defect_names = [create_defect_type(ddb, i) for i in range(3)]

    for i, defect in enumerate(defect_names):
        ddb.insert(defect, i * 100, (i + 1) * 100, "", "")

    ignored = set(defect_names[:1])

    ddb.new_virtual_defect("DQD_TEST_VDEFECT", "", " ".join(defect_names))

    iovs = ddb.retrieve(channels=["DQD_TEST_VDEFECT"], ignore=ignored)
    assert iovs.channels == set(["DQD_TEST_VDEFECT"])
    assert len(iovs) == len(defect_names) - 1

    iovs = ddb.retrieve(channels=["DQD_TEST_VDEFECT"],
                        ignore=ignored,
                        with_primary_dependencies=True)
    assert iovs.channels == set(["DQD_TEST_VDEFECT"] +
                                defect_names) - ignored, ("Check failed.")

    assert len(iovs) == len(defect_names[1:]) * 2
Пример #4
0
def test_noncontiguous_defectid_creation():
    """
    Test that defects are inserted correctly into non-contiguous ranges
    """
    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    create_defect_type(ddb, 0)
    ddb._create_defect_with_id(2, "TEST_DEFECT_DQD_2", "")
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT", "Comment",
                           "DQD_TEST_DEFECT_0 TEST_DEFECT_DQD_2")
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT_2", "Comment",
                           "DQD_TEST_DEFECT_0 TEST_DEFECT_DQD_2")
    create_defect_type(ddb, 1)
    create_defect_type(ddb, 3)
    # assert primary and virtual defects are right
    ids, names, m = ddb.get_channels()
    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'
    ids, names, m = ddb.get_virtual_channels()
    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'
Пример #5
0
def test_tagging_unicode():

    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)

    ddb.insert(u"DQD_TEST_DEFECT_0", 0, 100, u"", u"")
    ddb.insert(u"DQD_TEST_DEFECT_1", 100, 200, u"", u"")

    defects_tag = ddb.new_defects_tag("dqd-test", u"New iov tag")

    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect(u"DQD_TEST_VIRTUAL_DEFECT", u"",
                           u"DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")

    original_tag = ddb.new_logics_tag()
    original_htag = ddb.new_hierarchical_tag(defects_tag, original_tag)

    what = {"channels": [u"DQD_TEST_VIRTUAL_DEFECT"]}

    orig_iovs = DefectsDB((TEST_DATABASE),
                          tag=six.ensure_text(original_htag)).retrieve(**what)

    assert len(orig_iovs) == 2
    assert (orig_iovs[0].since, orig_iovs[0].until) == (0, 100)
    assert (orig_iovs[1].since, orig_iovs[1].until) == (100, 200)
Пример #6
0
def test_many_sparse_channels():
    "Testing many virtual channels with sparsely placed IoVs"
    ddb = DefectsDB(TEST_DATABASE, read_only=False)
    all_defects = []
    for i in range(52):
        all_defects.append(create_defect_type(ddb, i * 2))

    with ddb.storage_buffer:
        for i in all_defects:
            ddb.insert(i, 0, 100, "Test", "DQDefects.tests")

    queried_defects = all_defects[:-1]
    result = ddb.retrieve(channels=queried_defects)
    queried_defects_set = set(queried_defects)
    result_defects_set = set(i.channel for i in result)

    unwanted_defects_set = result_defects_set - queried_defects_set
    assert not unwanted_defects_set, "Unwanted defects: %r" % unwanted_defects_set

    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT", "Comment",
                           " ".join(all_defects))

    result = ddb.retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])
    assert result.channels == set(["DQD_TEST_VIRTUAL_DEFECT"])
    assert len(result) == 1
    # This assumes evaluate_full == True
    assert result[0].comment == " ".join(
        sorted(all_defects)), result[0].comment

    result = ddb.retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"],
                          evaluate_full=False)

    assert result.channels == set(["DQD_TEST_VIRTUAL_DEFECT"])
    assert len(result) == 1
Пример #7
0
def test_virtual_defects_invert():
    "Testing virtual defects involving inversion"
    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)
    create_defect_type(ddb, 2)

    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect(
        "DQD_TEST_VIRTUAL_DEFECT", "Comment",
        "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1 !DQD_TEST_DEFECT_2")

    # Insert an iov into each
    ddb.insert("DQD_TEST_DEFECT_0", 0, 100, "Test", "DQDefects.tests")
    ddb.insert("DQD_TEST_DEFECT_1", 150, 200, "Test", "DQDefects.tests")
    ddb.insert("DQD_TEST_DEFECT_2", 50, 125, "Test", "DQDefects.tests")

    # See what the result of the virtual defect is
    iovs = ddb.retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])

    # Tests against the value
    assert len(iovs) == 4, list(iovs)
    first, second, third, fourth = iovs
    assert (first.since, first.until) == (0, 50), first
    assert (second.since, second.until) == (50, 100), second
    assert (third.since, third.until) == (125, 150), third
    assert (fourth.since, fourth.until) == (150, 200), fourth
    assert first.channel == second.channel == third.channel == fourth.channel == "DQD_TEST_VIRTUAL_DEFECT", (
        first.channel, second.channel, third.channel, fourth.channel)
    del first, second, third, fourth, iovs

    # Test evaluate_full=False
    iovs = ddb.retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"],
                        evaluate_full=False)
    assert len(iovs) == 2, list(iovs)

    # Now unset the present bit
    ddb.insert("DQD_TEST_DEFECT_2",
               50,
               150,
               "Test",
               "DQDefects.tests",
               present=False)
    iovs = ddb.retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])

    # here we are sensitive to details of python ordering ...
    assert len(iovs) == 3, list(iovs)
    first, second, third = iovs
    assert (first.since, first.until) == (0, 100), first
    assert (second.since, second.until) == (100, 150), second
    assert (third.since, third.until) == (150, 200), third
    assert first.channel == second.channel == third.channel == "DQD_TEST_VIRTUAL_DEFECT", (
        first.channel, second.channel, third.channel)
    del first, second, third, iovs
Пример #8
0
def test_virtual_defects():
    "Testing virtual defect basics"
    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)

    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT", "Comment",
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")

    # Insert an iov into each
    ddb.insert("DQD_TEST_DEFECT_0", 0, 100, "Test", "DQDefects.tests")
    ddb.insert("DQD_TEST_DEFECT_1", 150, 200, "Test", "DQDefects.tests")

    # See what the result of the virtual defect is
    iovs = ddb.retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])

    # Tests against the value
    assert len(iovs) == 2
    first, second = iovs
    assert (first.since, first.until) == (0, 100)
    assert (second.since, second.until) == (150, 200)
    assert first.channel == second.channel == "DQD_TEST_VIRTUAL_DEFECT"
    del first, second, iovs

    # Now unset the present bit, and test again that the relevant preiod is fixed
    ddb.insert("DQD_TEST_DEFECT_1",
               150,
               200,
               "Test",
               "DQDefects.tests",
               present=False)

    iovs = ddb.retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])

    assert len(iovs) == 1
    first = iovs[0]
    assert (first.since, first.until) == (0, 100)
    assert first.channel == "DQD_TEST_VIRTUAL_DEFECT"

    # Now extend the defect and see if we get a contiguous result
    ddb.insert("DQD_TEST_DEFECT_0", 100, 150, "Test", "DQDefects.tests")
    iovs = ddb.retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])

    assert len(iovs) == 1
    first = iovs[0]
    assert (first.since, first.until) == (0, 150)
    assert first.channel == "DQD_TEST_VIRTUAL_DEFECT"
Пример #9
0
def test_get_intolerable_defects():
    '''
    Check that the intolerable defect listing function works
    '''
    ddb = DefectsDB(TEST_DATABASE, read_only=False)
    
    # Create some primary defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)
    create_defect_type(ddb, 2)
    create_defect_type(ddb, 3)
    
    # Make some virtual defects
    ddb.new_virtual_defect("DQD_TEST_Virtual_DEFECT", "Comment", 
                           "DQD_TEST_DEFECT_0")
    ddb.new_virtual_defect("PRIMARY", "Comment",
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
    ddb.new_virtual_defect("PHYS_test", "Comment",
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1 DQD_TEST_DEFECT_2")
    ddb.new_virtual_defect("TIGHT", "Comment",
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1 DQD_TEST_DEFECT_2 DQD_TEST_DEFECT_3")

    # old_primary_only should be True here, so PRIMARY gives the set of defects
    assert sorted(ddb.get_intolerable_defects()) == ["DQD_TEST_DEFECT_0", "DQD_TEST_DEFECT_1"], "default params/old_primary_only check failed"
    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'
    assert sorted(ddb.get_intolerable_defects(old_primary_only=False)) == ["DQD_TEST_DEFECT_0", "DQD_TEST_DEFECT_1"], 'regex handling check failed'
Пример #10
0
def test_defect_empty_retrieval():
    ddb = DefectsDB(TEST_DATABASE, read_only=False)
    iovs = ddb.retrieve()
    assert not iovs

    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)

    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT", "Comment",
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")

    iovs = ddb.retrieve()
    assert not iovs
Пример #11
0
def test_update_virtual_defect():

    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)
    create_defect_type(ddb, 2)

    ddb.insert("DQD_TEST_DEFECT_0", 0, 100, "", "")
    ddb.insert("DQD_TEST_DEFECT_1", 100, 200, "", "")
    ddb.insert("DQD_TEST_DEFECT_2", 200, 300, "", "")

    defects_tag = ddb.new_defects_tag("dqd-test", "New iov tag")

    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT", "",
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")

    original_tag = ddb.new_logics_tag()
    original_htag = ddb.new_hierarchical_tag(defects_tag, original_tag)

    ddb.update_virtual_defect("DQD_TEST_VIRTUAL_DEFECT",
                              "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_2")

    new_tag = ddb.new_logics_tag()
    new_htag = ddb.new_hierarchical_tag(defects_tag, new_tag)

    what = {"channels": ["DQD_TEST_VIRTUAL_DEFECT"]}

    orig_iovs = DefectsDB(TEST_DATABASE, tag=original_htag).retrieve(**what)
    new_iovs = DefectsDB(TEST_DATABASE, tag=new_htag).retrieve(**what)
    head_iovs = DefectsDB(TEST_DATABASE).retrieve(**what)

    assert head_iovs == new_iovs
    assert head_iovs != orig_iovs

    assert len(head_iovs) == 2
    assert (head_iovs[0].since, head_iovs[0].until) == (0, 100)
    assert (head_iovs[1].since, head_iovs[1].until) == (200, 300)

    from DQUtils.db import Databases
    db3 = Databases.get_instance(TEST_DATABASE, read_only=True)
    pfs = db3.getFolderSet('/GLOBAL/DETSTATUS')
    assert pfs.tagDescription(
        new_htag) != '', 'Hierarchical tag description not created'
Пример #12
0
def test_rename_defects():
    
    ddb = DefectsDB(TEST_DATABASE, read_only=False)
    
    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)
    
    ddb.insert("DQD_TEST_DEFECT_0",   0, 100, "", "")
    ddb.insert("DQD_TEST_DEFECT_1", 100, 200, "", "")
    
    defects_tag = ddb.new_defects_tag("dqd-test", "New iov tag")
    
    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT", "", 
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT_2", "", 
                           "DQD_TEST_VIRTUAL_DEFECT")
    # Make ones with inversion logic
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT_3", "", 
                           "DQD_TEST_DEFECT_0 !DQD_TEST_DEFECT_1")
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT_4", "", 
                           "!DQD_TEST_VIRTUAL_DEFECT")
    
    original_tag = ddb.new_logics_tag()
    original_htag = ddb.new_hierarchical_tag(defects_tag, original_tag)

    # The following is no longer considered an error condition
    ## exc_raised = False
    ## try:
    ##     ddb.rename_defect("DQD_TEST_DEFECT_0", "DQD_TEST_0")
    ## except AssertionError:
    ##     exc_raised = True
    ## assert exc_raised, "Bad defect rename did not raise exception"

    # first rename a primary defect
    ddb.rename_defect("DQD_TEST_DEFECT_0", "DQD_TEST_DEFECT_3")
    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
    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

    # also valid in other tags?
    ddb2 = DefectsDB(TEST_DATABASE, tag=original_htag)
    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

    # Now try to rename a virtual defect
    ddb.rename_defect("DQD_TEST_VIRTUAL_DEFECT", "DQD_TEST_VIRTUAL_DEFECT_A")

    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
    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

    # also valid in other tags?
    ddb2 = DefectsDB(TEST_DATABASE, tag=original_htag)
    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

    ddb._virtual_defect_consistency_check()
Пример #13
0
def test_virtual_defects_deep():
    ddb = DefectsDB(TEST_DATABASE, read_only=False)
    
    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)
    
    # Insert an iov into each
    ddb.insert("DQD_TEST_DEFECT_0", 0,   100, "Test", "DQDefects.tests")
    ddb.insert("DQD_TEST_DEFECT_1", 150, 200, "Test", "DQDefects.tests")
    
    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT_0", "", "DQD_TEST_DEFECT_0")
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT_1", "", "DQD_TEST_DEFECT_1")
    
    ddb = DefectsDB(TEST_DATABASE)
    
    iovs = ddb.retrieve()
Пример #14
0
def test_virtual_defect_hiding():
    ddb = DefectsDB(TEST_DATABASE, read_only=False)
    
    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)
    
    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT", "Comment", 
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")
        
    new_tag = ddb.new_logics_tag()
                       
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT_2", "Comment",
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")

    ddb2 = DefectsDB(TEST_DATABASE, tag=('HEAD', new_tag), read_only=True)
    assert ddb2.virtual_defect_names == set(['DQD_TEST_VIRTUAL_DEFECT']), 'Only one virtual defect should be in this tag'
Пример #15
0
def test_normalize_defect_names():
    ddb = DefectsDB(TEST_DATABASE, read_only=False)
    
    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)
    
    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect("DQD_TEST_Virtual_DEFECT", "Comment", 
                           "DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")

    assert ddb.normalize_defect_names('dQd_tEsT_DeFeCt_0')=='DQD_TEST_DEFECT_0'
    assert ddb.normalize_defect_names(['dQd_tEsT_DeFeCt_0', 'DqD_TeSt_dEfEcT_1'])==['DQD_TEST_DEFECT_0', 'DQD_TEST_DEFECT_1']
    assert ddb.normalize_defect_names('dqd_test_virtual_defect')=='DQD_TEST_Virtual_DEFECT'
    try:
        ddb.normalize_defect_names('does_not_exist')
        wasthrown = False
    except DefectUnknownError:
        wasthrown = True
    assert wasthrown, 'normalize_defect_names should throw when the defect does not exist'
Пример #16
0
def test_virtual_defect_creation_unicode():

    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    # Create two defects
    create_defect_type(ddb, 0)
    create_defect_type(ddb, 1)

    # Make a virtual defect whose result is the combination of the above
    ddb.new_virtual_defect(u"DQD_TEST_VIRTUAL_DEFECT", u"Comment",
                           u"DQD_TEST_DEFECT_0 DQD_TEST_DEFECT_1")

    # First test ensures internals are correct
    assert len(ddb.virtual_defect_ids) == 1
    assert "DQD_TEST_VIRTUAL_DEFECT" in ddb.virtual_defect_names

    # Second test to ensure database is in correct state
    ddb = DefectsDB(TEST_DATABASE)
    assert len(ddb.virtual_defect_ids) == 1
    assert "DQD_TEST_VIRTUAL_DEFECT" in ddb.virtual_defect_names
Пример #17
0
def test_virtual_defects_stress():
    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    STRESS_COUNT = 20

    for i in range(STRESS_COUNT):
        create_defect_type(ddb, i)

    with ddb.storage_buffer:
        for i in range(STRESS_COUNT):
            ddb.insert("DQD_TEST_DEFECT_%i" % i, i, i + 1, "Test",
                       "DQDefects.tests")

    ALL_DEFECTS = " ".join("DQD_TEST_DEFECT_%i" % i
                           for i in range(STRESS_COUNT))
    ddb.new_virtual_defect("DQD_TEST_VIRTUAL_DEFECT", "", ALL_DEFECTS)

    iovs = ddb.retrieve(channels=["DQD_TEST_VIRTUAL_DEFECT"])

    assert len(iovs) == STRESS_COUNT - 1
    assert (iovs[0].since, iovs[-1].until) == (1, STRESS_COUNT)
Пример #18
0
def test_query_with_primary_dependencies():

    ddb = DefectsDB(TEST_DATABASE, read_only=False)

    # Create two defects
    defect_names = [create_defect_type(ddb, i) for i in range(3)]

    for i, defect in enumerate(defect_names):
        ddb.insert(defect, i * 100, (i + 1) * 100, "", "")

    ddb.new_virtual_defect("DQD_TEST_VDEFECT", "", " ".join(defect_names))

    iovs = ddb.retrieve(channels=["DQD_TEST_VDEFECT"])
    assert iovs.channels == set(["DQD_TEST_VDEFECT"])
    assert len(iovs) == len(defect_names)

    iovs = ddb.retrieve(channels=["DQD_TEST_VDEFECT"],
                        with_primary_dependencies=True)
    assert iovs.channels == set(["DQD_TEST_VDEFECT"] +
                                defect_names), ("Check failed.")

    assert len(iovs) == len(defect_names) * 2
    print 'Reading in definitions...'
    inclauses = indb.virtual_defect_logics
    print '%d virtual defects retrieved from input database' % len(inclauses)
    inchannels = set(channels if channels is not None else inclauses.keys())
    outchannels = set(outdb.virtual_defect_names)
    missingchannels = inchannels - outchannels
    with outdb.storage_buffer:
        if len(missingchannels) != 0:
            if not opts.createdefects:
                print 'Missing virtual defect(s) in target database:'
                print list(missingchannels)
                print 'Rerun with a restricted virtual defect list (--defects) or with --createdefects'
                sys.exit(1)
            else:
                print 'Creating missing virtual defects on output database...'
                descriptions = indb.get_virtual_channel_descriptions(
                    missingchannels)
                for channel in missingchannels:
                    outdb.new_virtual_defect(
                        channel, descriptions[channel],
                        ' '.join(inclauses[channel].clauses))
                print 'Done'

        print 'Updating existing virtual defects...'
        for channel in inchannels - missingchannels:
            outdb.update_virtual_defect(channel,
                                        ' '.join(inclauses[channel].clauses))

        print 'Done.'
            print 'ERROR: Problem parsing file', f
            print str(e)
            sys.exit(1)
        if not tmp_indict:
            print 'NOTICE: No definitions in file', f
            continue
        interset = set(tmp_indict) & set(indict)
        if len(interset) > 0:
            for k in interset:
                print 'WARNING: Redefinition of defect', k, 'in file', f
                if not opts.ignore_redef:
                    sys.exit(1)
        indict.update(tmp_indict)

    #print '\n'.join(map(str,tocreate))
    from DQDefects import DefectsDB
    from DQDefects.exceptions import DefectUnknownError
    ddb = DefectsDB(opts.db, create=opts.create, read_only=False,
                    tag=opts.tag)

    print 'Now updating defects on', opts.db
    with ddb.storage_buffer:
        for defect, clause in indict.items():
            print defect, clause
            try:
                ddb.update_virtual_defect(defect, ' '.join(clause))
            except DefectUnknownError:
                ddb.new_virtual_defect(defect, '', ' '.join(clause))
                #print 'ERROR: defect', defect, 'not present in DB, unable to update'
                #sys.exit(1)
        ##     try:
        ##         print db.new_virtual_defect(0, defect, defect, ''), defect
        ##     except DefectExistsError:
        ##         if opts.ignoreold:
        ##             print 'Defect', defect, 'already exists; ignoring'
        ##         else:
        ##             raise
        folder = Databases.get_folder(opts.origpridb, read_only=True)
        ids, names, cdict = get_channel_ids_names(folder)
        for defect in names:
            if defect in DEPRECATED_PRIMARY_FLAGS:
                print 'Skipping', defect, 'as it is deprecated'
                continue
            #print defect, folder.channelDescription(cdict[defect])
            try:
                print db.new_virtual_defect(defect, defect, ''), defect
            except DefectExistsError:
                if opts.ignoreold:
                    print 'Defect', defect, 'already exists; ignoring'
                else:
                    raise

        print 'Populating old virtual flags'
        folder = Databases.get_folder(opts.origvfdb, read_only=True)

        ids, names, cdict = get_channel_ids_names(folder)
        iovs = fetch_iovs(opts.origvfdb, (opts.vfrun, 1), (opts.vfrun, 2),
                          tag=opts.vftag,
                          with_channel=True)

        for defect in iovs: