[Notes] [Git][BuildStream/buildstream][master] 3 commits: utils: Fix _pretty_size() for sizes > 1024T



Title: GitLab

richardmaw-codethink pushed to branch master at BuildStream / buildstream

Commits:

3 changed files:

Changes:

  • buildstream/utils.py
    ... ... @@ -634,7 +634,7 @@ def _parse_size(size, volume):
    634 634
     
    
    635 635
     # _pretty_size()
    
    636 636
     #
    
    637
    -# Converts a number of bytes into a string representation in KB, MB, GB, TB
    
    637
    +# Converts a number of bytes into a string representation in KiB, MiB, GiB, TiB
    
    638 638
     # represented as K, M, G, T etc.
    
    639 639
     #
    
    640 640
     # Args:
    
    ... ... @@ -646,10 +646,11 @@ def _parse_size(size, volume):
    646 646
     def _pretty_size(size, dec_places=0):
    
    647 647
         psize = size
    
    648 648
         unit = 'B'
    
    649
    -    for unit in ('B', 'K', 'M', 'G', 'T'):
    
    649
    +    units = ('B', 'K', 'M', 'G', 'T')
    
    650
    +    for unit in units:
    
    650 651
             if psize < 1024:
    
    651 652
                 break
    
    652
    -        else:
    
    653
    +        elif unit != units[-1]:
    
    653 654
                 psize /= 1024
    
    654 655
         return "{size:g}{unit}".format(size=round(psize, dec_places), unit=unit)
    
    655 656
     
    

  • tests/testutils/mock_os.py
    1
    +from contextlib import contextmanager
    
    2
    +import os
    
    3
    +
    
    4
    +
    
    5
    +# MockAttributeResult
    
    6
    +#
    
    7
    +# A class to take a dictionary of kwargs and make them accessible via
    
    8
    +# attributes of the object.
    
    9
    +#
    
    10
    +class MockAttributeResult(dict):
    
    11
    +    __getattr__ = dict.get
    
    12
    +
    
    13
    +
    
    14
    +# mock_statvfs():
    
    15
    +#
    
    16
    +# Gets a function which mocks statvfs and returns a statvfs result with the kwargs accessible.
    
    17
    +#
    
    18
    +# Returns:
    
    19
    +#    func(path) -> object: object will have all the kwargs accessible via object.kwarg
    
    20
    +#
    
    21
    +# Example:
    
    22
    +#    statvfs = mock_statvfs(f_blocks=10)
    
    23
    +#    result = statvfs("regardless/of/path")
    
    24
    +#    assert result.f_blocks == 10 # True
    
    25
    +def mock_statvfs(**kwargs):
    
    26
    +    def statvfs(path):
    
    27
    +        return MockAttributeResult(kwargs)
    
    28
    +    return statvfs
    
    29
    +
    
    30
    +
    
    31
    +# monkey_patch()
    
    32
    +#
    
    33
    +# with monkey_patch("statvfs", custom_statvfs):
    
    34
    +#    assert os.statvfs == custom_statvfs # True
    
    35
    +# assert os.statvfs == custom_statvfs # False
    
    36
    +#
    
    37
    +@contextmanager
    
    38
    +def monkey_patch(to_patch, patched_func):
    
    39
    +    orig = getattr(os, to_patch)
    
    40
    +    setattr(os, to_patch, patched_func)
    
    41
    +    try:
    
    42
    +        yield
    
    43
    +    finally:
    
    44
    +        setattr(os, to_patch, orig)

  • tests/utils/misc.py
    1
    +from buildstream import _yaml
    
    2
    +from ..testutils import mock_os
    
    3
    +from ..testutils.runcli import cli
    
    4
    +
    
    5
    +import os
    
    6
    +import pytest
    
    7
    +
    
    8
    +
    
    9
    +KiB = 1024
    
    10
    +MiB = (KiB * 1024)
    
    11
    +GiB = (MiB * 1024)
    
    12
    +TiB = (GiB * 1024)
    
    13
    +
    
    14
    +
    
    15
    +def test_parse_size_over_1024T(cli, tmpdir):
    
    16
    +    BLOCK_SIZE = 4096
    
    17
    +    cli.configure({
    
    18
    +        'cache': {
    
    19
    +            'quota': 2048 * TiB
    
    20
    +        }
    
    21
    +    })
    
    22
    +    project = tmpdir.join("main")
    
    23
    +    os.makedirs(str(project))
    
    24
    +    _yaml.dump({'name': 'main'}, str(project.join("project.conf")))
    
    25
    +
    
    26
    +    bavail = (1025 * TiB) / BLOCK_SIZE
    
    27
    +    patched_statvfs = mock_os.mock_statvfs(f_bavail=bavail, f_bsize=BLOCK_SIZE)
    
    28
    +    with mock_os.monkey_patch("statvfs", patched_statvfs):
    
    29
    +        result = cli.run(project, args=["build", "file.bst"])
    
    30
    +        assert "1025T of available system storage" in result.stderr



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]