Beispiel #1
0
def test_reset_removes_custom_backend():
    """reset removes a custom registered backend."""

    created = []
    source_instance = object()

    def source_factory(*args, **kwargs):
        created.append(True)
        return source_instance

    Source.register_backend("mytest", source_factory)

    # I can get an instance of it now
    assert Source.get("mytest:")
    assert len(created) == 1

    # But if I reset...
    Source.reset()

    # Then I can't get it any more
    with raises(SourceUrlError) as exc_info:
        Source.get("mytest:")
    assert len(created) == 1

    assert "no registered backend 'mytest'" in str(exc_info)
Beispiel #2
0
def test_reset_restores_overridden_backend():
    """reset restores the original backend for anything which has been
    overridden."""

    # I can get an instance of a built-in backend, like 'staged'.
    # Note: doesn't matter that we're pointing at nonexistent directory
    # (reading doesn't happen until we iterate)
    Source.get("staged:/notexist")

    created = []
    source_instance = object()

    def source_factory(*args, **kwargs):
        created.append(True)
        return source_instance

    # Can override the built-in 'staged' backend.
    Source.register_backend("staged", source_factory)

    # Now it will use what I registered
    assert Source.get("staged:/notexist")
    assert len(created) == 1

    # But if I reset...
    Source.reset()

    # Then I'm not getting what I registered any more, but I'm
    # still getting something OK
    new_src = Source.get("staged:/notexist")
    assert new_src
    assert new_src is not source_instance
    assert len(created) == 1
Beispiel #3
0
def pushsource_reset():
    """Resets pushsource library after each test.

    Allows tests to adjust pushsource backends without interfering
    with each other.
    """
    yield
    Source.reset()
Beispiel #4
0
def reset():
    # Reset sources after every test, since we'll be registering backends
    # as we load config.
    Source.reset()

    # Reset pushsource logger which may have been set to DEBUG
    # if we ran any command with --debug.
    logging.getLogger("pushsource").setLevel(logging.NOTSET)
Beispiel #5
0
def errata_test_backend(fake_errata_tool, koji_test_backend):
    # erratatest backend is errata backend pointing at kojitest and our errata testdata
    bound = Source.get_partial("errata:https://errata.example.com/",
                               koji_source="kojitest:")
    Source.register_backend("erratatest", bound)

    yield

    Source.reset()
Beispiel #6
0
def koji_test_backend(fake_koji, koji_dir):
    # kojitest backend is koji backend pointing at our koji testdata
    bound = Source.get_partial("koji:https://koji.example.com/",
                               basedir=koji_dir)

    Source.register_backend("kojitest", bound)

    yield

    Source.reset()
Beispiel #7
0
def test_loads_entrypoints(monkeypatch):
    """Source.get ensures 'pushsource' entry points are loaded."""

    # Forcibly set the Source class back to uninitialized state.
    monkeypatch.setattr(Source, "_BACKENDS", {})
    monkeypatch.setattr(Source, "_BACKENDS_RESET", {})

    # Let's set up that some custom backends have registered entry points.
    created1 = []
    created2 = []

    class Backend1(object):
        def __init__(self):
            created1.append(True)

        @classmethod
        def resolve(cls):
            Source.register_backend("backend1", Backend1)

    class Backend2(object):
        def __init__(self):
            created2.append(True)

        @classmethod
        def resolve(cls):
            Source.register_backend("backend2", Backend2)

    with patch("pkg_resources.iter_entry_points") as iter_ep:
        iter_ep.return_value = [Backend1, Backend2]

        # I should be able to get instances of those two backends
        assert Source.get("backend1:")
        assert Source.get("backend2:")

    # It should have found them via the expected entry point group
    iter_ep.assert_called_once_with("pushsource")

    # Should have created one instance of each
    assert created1 == [True]
    assert created2 == [True]

    # These should also be retained over a reset()
    Source.reset()
    assert Source.get("backend1:")
    assert Source.get("backend2:")
Beispiel #8
0
def source_reset():
    """Does Source.reset after every test, since we are messing with
    the registered backends."""
    yield
    Source.reset()