aboutsummaryrefslogtreecommitdiff
path: root/tests/import
diff options
context:
space:
mode:
authorDamien George2018-06-18 17:50:34 +1000
committerDamien George2018-06-18 17:50:34 +1000
commit6d8816fe84f3e9de55b544aec71bb1ebc204d745 (patch)
treea3621635addda3794f225f9f2fd7db885d04192c /tests/import
parente49cd106b4bbbb47b782f73b66000df6094f7afe (diff)
tests/import: Add test for importing invalid .mpy file.
Diffstat (limited to 'tests/import')
-rw-r--r--tests/import/mpy_invalid.py67
-rw-r--r--tests/import/mpy_invalid.py.exp3
2 files changed, 70 insertions, 0 deletions
diff --git a/tests/import/mpy_invalid.py b/tests/import/mpy_invalid.py
new file mode 100644
index 000000000..6a4e116e7
--- /dev/null
+++ b/tests/import/mpy_invalid.py
@@ -0,0 +1,67 @@
+# test importing of invalid .mpy files
+
+import sys, uio
+
+try:
+ uio.IOBase
+ import uos
+ uos.mount
+except (ImportError, AttributeError):
+ print("SKIP")
+ raise SystemExit
+
+
+class UserFile(uio.IOBase):
+ def __init__(self, data):
+ self.data = data
+ self.pos = 0
+ def read(self):
+ return self.data
+ def readinto(self, buf):
+ n = 0
+ while n < len(buf) and self.pos < len(self.data):
+ buf[n] = self.data[self.pos]
+ n += 1
+ self.pos += 1
+ return n
+ def ioctl(self, req, arg):
+ return 0
+
+
+class UserFS:
+ def __init__(self, files):
+ self.files = files
+ def mount(self, readonly, mksfs):
+ pass
+ def umount(self):
+ pass
+ def stat(self, path):
+ if path in self.files:
+ return (32768, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+ raise OSError
+ def open(self, path, mode):
+ return UserFile(self.files[path])
+
+
+# these are the test .mpy files
+user_files = {
+ '/mod0.mpy': b'', # empty file
+ '/mod1.mpy': b'M', # too short header
+ '/mod2.mpy': b'M\x00\x00\x00', # bad version
+}
+
+# create and mount a user filesystem
+uos.mount(UserFS(user_files), '/userfs')
+sys.path.append('/userfs')
+
+# import .mpy files from the user filesystem
+for i in range(len(user_files)):
+ mod = 'mod%u' % i
+ try:
+ __import__(mod)
+ except ValueError as er:
+ print(mod, 'ValueError', er)
+
+# unmount and undo path addition
+uos.umount('/userfs')
+sys.path.pop()
diff --git a/tests/import/mpy_invalid.py.exp b/tests/import/mpy_invalid.py.exp
new file mode 100644
index 000000000..1727ea1ce
--- /dev/null
+++ b/tests/import/mpy_invalid.py.exp
@@ -0,0 +1,3 @@
+mod0 ValueError incompatible .mpy file
+mod1 ValueError incompatible .mpy file
+mod2 ValueError incompatible .mpy file