Skip to content
Snippets Groups Projects
Unverified Commit c780ad50 authored by Jean-Paul Calderone's avatar Jean-Paul Calderone
Browse files

Reject sets which apparently weren't ever passed in

Only the documentation was wrong, whew.
parent e71b4837
No related branches found
No related tags found
1 merge request!79Fix `required_passes` docs and (implementation for large results)
...@@ -55,7 +55,7 @@ def required_passes(bytes_per_pass, share_sizes): ...@@ -55,7 +55,7 @@ def required_passes(bytes_per_pass, share_sizes):
:param int bytes_per_pass: The number of bytes the storage of which for :param int bytes_per_pass: The number of bytes the storage of which for
one lease period one pass covers. one lease period one pass covers.
:param set[int] share_sizes: The sizes of the shared which will be stored. :param list[int] share_sizes: The sizes of the shared which will be stored.
:return int: The number of passes required to cover the storage cost. :return int: The number of passes required to cover the storage cost.
""" """
...@@ -64,6 +64,12 @@ def required_passes(bytes_per_pass, share_sizes): ...@@ -64,6 +64,12 @@ def required_passes(bytes_per_pass, share_sizes):
sum(share_sizes, 0) / bytes_per_pass, sum(share_sizes, 0) / bytes_per_pass,
), ),
) )
if not isinstance(share_sizes, list):
raise TypeError(
"Share sizes must be a list of integers, got {!r} instead".format(
share_sizes,
),
)
# print("required_passes({}, {}) == {}".format(bytes_per_pass, share_sizes, result)) # print("required_passes({}, {}) == {}".format(bytes_per_pass, share_sizes, result))
return result return result
......
...@@ -33,6 +33,7 @@ from testtools.matchers import ( ...@@ -33,6 +33,7 @@ from testtools.matchers import (
HasLength, HasLength,
IsInstance, IsInstance,
AfterPreprocessing, AfterPreprocessing,
raises,
) )
from testtools.twistedsupport import ( from testtools.twistedsupport import (
succeeded, succeeded,
...@@ -49,7 +50,9 @@ from hypothesis import ( ...@@ -49,7 +50,9 @@ from hypothesis import (
assume, assume,
) )
from hypothesis.strategies import ( from hypothesis.strategies import (
sets,
tuples, tuples,
integers,
) )
from twisted.python.filepath import ( from twisted.python.filepath import (
...@@ -101,6 +104,7 @@ from ..api import ( ...@@ -101,6 +104,7 @@ from ..api import (
from ..storage_common import ( from ..storage_common import (
slot_testv_and_readv_and_writev_message, slot_testv_and_readv_and_writev_message,
get_implied_data_length, get_implied_data_length,
required_passes,
) )
from ..model import ( from ..model import (
Pass, Pass,
...@@ -148,6 +152,21 @@ class LocalRemote(object): ...@@ -148,6 +152,21 @@ class LocalRemote(object):
) )
class RequiredPassesTests(TestCase):
"""
Tests for ``required_passes``.
"""
@given(integers(min_value=1), sets(integers(min_value=0)))
def test_incorrect_types(self, bytes_per_pass, share_sizes):
"""
``required_passes`` raises ``TypeError`` if passed a ``set`` for
``share_sizes``.
"""
self.assertThat(
lambda: required_passes(bytes_per_pass, share_sizes),
raises(TypeError),
)
class ShareTests(TestCase): class ShareTests(TestCase):
""" """
Tests for interaction with shares. Tests for interaction with shares.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment