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)
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
def pushsource_reset(): """Resets pushsource library after each test. Allows tests to adjust pushsource backends without interfering with each other. """ yield Source.reset()
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)
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()
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()
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:")
def source_reset(): """Does Source.reset after every test, since we are messing with the registered backends.""" yield Source.reset()