summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlessandro Gatti <a.gatti@frob.it>2025-12-10 05:59:16 +0100
committerDamien George <damien@micropython.org>2025-12-17 16:05:29 +1100
commitdbf59db5a10768b374d11f3a5d7cc40dc7afaa79 (patch)
tree67dff7a09fc3ba351f631f624402c399fadbf284 /tests
parent750a366f205f5c688532a4a7f4376240f3cdb78a (diff)
tests/extmod/vfs_blockdev_invalid.py: Handle low memory conditions.
This commit modifies the "extmod/vfs_blockdev_invalid" test to better behave on boards with low available memory. Before these changes the test would fail on ESP8266 (at least), due to low memory, but in a way that could not be easily solved as the error occurred in the middle of the test. The test has been rewritten to delay its output until the very end, so if a low memory condition occurs and needs to stop execution then no real output will show up before the skip marker. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
Diffstat (limited to 'tests')
-rw-r--r--tests/extmod/vfs_blockdev_invalid.py54
-rw-r--r--tests/extmod/vfs_blockdev_invalid.py.exp29
2 files changed, 41 insertions, 42 deletions
diff --git a/tests/extmod/vfs_blockdev_invalid.py b/tests/extmod/vfs_blockdev_invalid.py
index 29d6bd6b2..955f8495b 100644
--- a/tests/extmod/vfs_blockdev_invalid.py
+++ b/tests/extmod/vfs_blockdev_invalid.py
@@ -46,12 +46,16 @@ class RAMBlockDevice:
try:
bdev = RAMBlockDevice(50)
except MemoryError:
- print("SKIP")
+ print("SKIP-TOO-LARGE")
raise SystemExit
-def test(vfs_class):
- print(vfs_class)
+ERROR_EIO = (OSError, "[Errno 5] EIO")
+ERROR_EINVAL = (OSError, "[Errno 22] EINVAL")
+ERROR_TYPE = (TypeError, "can't convert str to int")
+
+
+def test(vfs_class, test_data):
bdev.read_res = 0 # reset function results
bdev.write_res = 0
@@ -61,17 +65,15 @@ def test(vfs_class):
with fs.open("test", "w") as f:
f.write("a" * 64)
- for res in (0, -5, 5, 33, "invalid"):
- # -5 is a legitimate negative failure (EIO), positive integer
- # is not
-
+ for res, error_open, error_read in test_data:
# This variant will fail on open
bdev.read_res = res
try:
with fs.open("test", "r") as f:
- print("opened")
+ assert error_open is None
except Exception as e:
- print(type(e), e)
+ assert error_open is not None
+ assert (type(e), str(e)) == error_open
# This variant should succeed on open, may fail on read
# unless the filesystem cached the contents already
@@ -79,11 +81,35 @@ def test(vfs_class):
try:
with fs.open("test", "r") as f:
bdev.read_res = res
- print("read 1", f.read(1))
- print("read rest", f.read())
+ assert f.read(1) == "a"
+ assert f.read() == "a" * 63
+ assert error_read is None
except Exception as e:
- print(type(e), e)
+ assert error_read is not None
+ assert (type(e), str(e)) == error_read
-test(vfs.VfsLfs2)
-test(vfs.VfsFat)
+try:
+ test(
+ vfs.VfsLfs2,
+ (
+ (0, None, None),
+ (-5, ERROR_EIO, None),
+ (5, ERROR_EINVAL, None),
+ (33, ERROR_EINVAL, None),
+ ("invalid", ERROR_TYPE, None),
+ ),
+ )
+ test(
+ vfs.VfsFat,
+ (
+ (0, None, None),
+ (-5, ERROR_EIO, ERROR_EIO),
+ (5, ERROR_EIO, ERROR_EIO),
+ (33, ERROR_EIO, ERROR_EIO),
+ ("invalid", ERROR_TYPE, ERROR_TYPE),
+ ),
+ )
+ print("OK")
+except MemoryError:
+ print("SKIP-TOO-LARGE")
diff --git a/tests/extmod/vfs_blockdev_invalid.py.exp b/tests/extmod/vfs_blockdev_invalid.py.exp
index 0ea035350..d86bac9de 100644
--- a/tests/extmod/vfs_blockdev_invalid.py.exp
+++ b/tests/extmod/vfs_blockdev_invalid.py.exp
@@ -1,28 +1 @@
-<class 'VfsLfs2'>
-opened
-read 1 a
-read rest aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-<class 'OSError'> [Errno 5] EIO
-read 1 a
-read rest aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-<class 'OSError'> [Errno 22] EINVAL
-read 1 a
-read rest aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-<class 'OSError'> [Errno 22] EINVAL
-read 1 a
-read rest aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-<class 'TypeError'> can't convert str to int
-read 1 a
-read rest aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-<class 'VfsFat'>
-opened
-read 1 a
-read rest aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-<class 'OSError'> [Errno 5] EIO
-<class 'OSError'> [Errno 5] EIO
-<class 'OSError'> [Errno 5] EIO
-<class 'OSError'> [Errno 5] EIO
-<class 'OSError'> [Errno 5] EIO
-<class 'OSError'> [Errno 5] EIO
-<class 'TypeError'> can't convert str to int
-<class 'TypeError'> can't convert str to int
+OK