1# Test that errno's propagate correctly through btree module. 2 3try: 4 import btree, uio, uerrno 5 6 uio.IOBase 7except (ImportError, AttributeError): 8 print("SKIP") 9 raise SystemExit 10 11 12class Device(uio.IOBase): 13 def __init__(self, read_ret=0, ioctl_ret=0): 14 self.read_ret = read_ret 15 self.ioctl_ret = ioctl_ret 16 17 def readinto(self, buf): 18 print("read", len(buf)) 19 return self.read_ret 20 21 def ioctl(self, cmd, arg): 22 print("ioctl", cmd) 23 return self.ioctl_ret 24 25 26# Invalid pagesize; errno comes from btree library 27try: 28 db = btree.open(Device(), pagesize=511) 29except OSError as er: 30 print("OSError", er.args[0] == uerrno.EINVAL) 31 32# Valid pagesize, device returns error on read; errno comes from Device.readinto 33try: 34 db = btree.open(Device(-1000), pagesize=512) 35except OSError as er: 36 print(repr(er)) 37 38# Valid pagesize, device returns error on seek; errno comes from Device.ioctl 39try: 40 db = btree.open(Device(0, -1001), pagesize=512) 41except OSError as er: 42 print(repr(er)) 43