Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 18 additions & 11 deletions docker/utils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,12 @@ def datetime_to_timestamp(dt):
return delta.seconds + delta.days * 24 * 3600


def longint(n):
if six.PY3:
return int(n)
return long(n)


def parse_bytes(s):
if len(s) == 0:
s = 0
Expand All @@ -506,20 +512,21 @@ def parse_bytes(s):

if suffix in units.keys() or suffix.isdigit():
try:
digits = int(digits_part)
digits = longint(digits_part)
except ValueError:
message = ('Failed converting the string value for'
'memory ({0}) to a number.')
formatted_message = message.format(digits_part)
raise errors.DockerException(formatted_message)
raise errors.DockerException(
'Failed converting the string value for memory ({0}) to'
' an integer.'.format(digits_part)
)

s = digits * units[suffix]
# Reconvert to long for the final result
s = longint(digits * units[suffix])
else:
message = ('The specified value for memory'
' ({0}) should specify the units. The postfix'
' should be one of the `b` `k` `m` `g`'
' characters')
raise errors.DockerException(message.format(s))
raise errors.DockerException(
'The specified value for memory ({0}) should specify the'
' units. The postfix should be one of the `b` `k` `m` `g`'
' characters'.format(s)
)

return s

Expand Down
25 changes: 20 additions & 5 deletions tests/unit/utils_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import os
import os.path
import shutil
import sys
import tarfile
import tempfile

Expand Down Expand Up @@ -465,14 +466,28 @@ def test_hybrid_list(self):
})


class UtilsTest(base.BaseTestCase):
longMessage = True
class ParseBytesTest(base.BaseTestCase):
def test_parse_bytes_valid(self):
self.assertEqual(parse_bytes("512MB"), 536870912)
self.assertEqual(parse_bytes("512M"), 536870912)
self.assertEqual(parse_bytes("512m"), 536870912)

def test_parse_bytes(self):
self.assertEqual(parse_bytes("512MB"), (536870912))
self.assertEqual(parse_bytes("512M"), (536870912))
def test_parse_bytes_invalid(self):
self.assertRaises(DockerException, parse_bytes, "512MK")
self.assertRaises(DockerException, parse_bytes, "512L")
self.assertRaises(DockerException, parse_bytes, "127.0.0.1K")

def test_parse_bytes_float(self):
self.assertRaises(DockerException, parse_bytes, "1.5k")

def test_parse_bytes_maxint(self):
self.assertEqual(
parse_bytes("{0}k".format(sys.maxsize)), sys.maxsize * 1024
)


class UtilsTest(base.BaseTestCase):
longMessage = True

def test_convert_filters(self):
tests = [
Expand Down