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