diff --git a/swh/loader/core/loader.py b/swh/loader/core/loader.py --- a/swh/loader/core/loader.py +++ b/swh/loader/core/loader.py @@ -74,7 +74,7 @@ return True -class SWHLoader(config.SWHConfig, metaclass=ABCMeta): +class BufferedLoader(config.SWHConfig, metaclass=ABCMeta): """Mixin base class for loader. To use this class, you must: @@ -915,15 +915,15 @@ return self.load_status() -class SWHStatelessLoader(SWHLoader): - """This base class is a pattern for stateless loaders. +class UnbufferedLoader(BufferedLoader): + """This base class is a pattern for unbuffered loaders. - Stateless loaders are able to load all the data in one go. For + UnbufferedLoader loaders are able to load all the data in one go. For example, the loader defined in swh-loader-git :class:`BulkUpdater`. For other loaders (stateful one, (e.g :class:`SWHSvnLoader`), - inherit directly from :class:`SWHLoader`. + inherit directly from :class:`BufferedLoader`. """ ADDITIONAL_CONFIG = {} @@ -985,7 +985,7 @@ raise NotImplementedError def flush(self): - """Stateless loader does not flush since it has no state to flush. + """Unbuffered loader does not flush since it has no state to flush. """ pass diff --git a/swh/loader/core/tests/test_loader.py b/swh/loader/core/tests/test_loader.py --- a/swh/loader/core/tests/test_loader.py +++ b/swh/loader/core/tests/test_loader.py @@ -7,12 +7,12 @@ from swh.model.hashutil import hash_to_bytes -from swh.loader.core.loader import SWHLoader +from swh.loader.core.loader import BufferedLoader, UnbufferedLoader from . import BaseLoaderTest -class DummyLoader(SWHLoader): +class DummyLoader: def cleanup(self): pass @@ -58,9 +58,17 @@ } +class DummyUnbufferedLoader(DummyLoader, UnbufferedLoader): + pass + + +class DummyBufferedLoader(DummyLoader, BufferedLoader): + pass + + class DummyBaseLoaderTest(BaseLoaderTest): def setUp(self): - self.loader = DummyLoader(logging_class='dummyloader') + self.loader = self.loader_class(logging_class='dummyloader') # do not call voluntarily super().setUp() self.storage = self.loader.storage contents = [ @@ -140,14 +148,37 @@ pass -class CoreLoaderTest(DummyBaseLoaderTest): - def test_stateful_loader(self): - """Stateful loader accumulates in place the sent data +class CoreUnbufferedLoaderTest(DummyBaseLoaderTest): + loader_class = DummyUnbufferedLoader + + def test_unbuffered_loader(self): + self.loader.load() # initialize the loader + + self.loader.send_contents(self.in_contents[0:1]) + self.loader.send_directories(self.in_directories[0:1]) + self.loader.send_revisions(self.in_revisions[0:1]) + self.loader.send_releases(self.in_releases[0:1]) + + self.assertCountContents(1) + self.assertCountDirectories(1) + self.assertCountRevisions(1) + self.assertCountReleases(1) + + self.loader.send_contents(self.in_contents[1:]) + self.loader.send_directories(self.in_directories[1:]) + self.loader.send_revisions(self.in_revisions[1:]) + self.loader.send_releases(self.in_releases[1:]) + + self.assertCountContents(len(self.in_contents)) + self.assertCountDirectories(len(self.in_directories)) + self.assertCountRevisions(len(self.in_revisions)) + self.assertCountReleases(len(self.in_releases)) - Note: Those behaviors should be somehow merged but that's - another story. - """ +class CoreBufferedLoaderTest(DummyBaseLoaderTest): + loader_class = DummyBufferedLoader + + def test_buffered_loader(self): self.loader.load() # initialize the loader self.loader.maybe_load_contents(self.in_contents[0:1]) @@ -170,35 +201,6 @@ self.assertCountRevisions(len(self.in_revisions)) self.assertCountReleases(len(self.in_releases)) - def test_stateless_loader(self): - """Stateless loader accumulates in place the sent data as well - - Note: Those behaviors should be somehow merged but that's - another story. - - """ - self.loader.load() # initialize the loader - - self.loader.send_contents(self.in_contents[0:1]) - self.loader.send_directories(self.in_directories[0:1]) - self.loader.send_revisions(self.in_revisions[0:1]) - self.loader.send_releases(self.in_releases[0:1]) - - self.assertCountContents(1) - self.assertCountDirectories(1) - self.assertCountRevisions(1) - self.assertCountReleases(1) - - self.loader.send_contents(self.in_contents[1:]) - self.loader.send_directories(self.in_directories[1:]) - self.loader.send_revisions(self.in_revisions[1:]) - self.loader.send_releases(self.in_releases[1:]) - - self.assertCountContents(len(self.in_contents)) - self.assertCountDirectories(len(self.in_directories)) - self.assertCountRevisions(len(self.in_revisions)) - self.assertCountReleases(len(self.in_releases)) - def test_directory_cascade(self): """Checks that sending a directory triggers sending contents""" self.loader.load() # initialize the loader