-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathtest_fstack.py
More file actions
55 lines (46 loc) · 1.69 KB
/
Copy pathtest_fstack.py
File metadata and controls
55 lines (46 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from __future__ import print_function, division, absolute_import
from pyfstack import select, socket, _fstack
from pyfstack._fstack import ffi, lib
import code
def test_select():
fdset = ffi.new("fd_set*")
assert lib.FD_ISSET(10, fdset) == 0
lib.FD_SET(10, fdset)
assert lib.FD_ISSET(10, fdset) == 1
# def test_poll(mocker):
# m = mocker.patch("code.lib.ff_poll")
# m.return_value = 120
# pollobj = select.poll()
# pollobj.register(1, select.POLLIN)
# pollobj.register(2, select.POLLOUT)
# pollobj.poll(10)
# args, _ = m.call_args
# assert args is not None
# fds, nfds, timeout = args
# assert timeout == 10
# assert nfds == 2
def test_addr():
# ipv4
address = ('127.0.0.1', 80)
addr, addrlen = socket._gen_sockaddr(socket.AF_INET, address)
sockaddr = ffi.cast("struct linux_sockaddr*", addr)
assert sockaddr.sa_family == socket.AF_INET
c_addrlen = ffi.new("socklen_t*", addrlen)
ip, port = socket._parse_sockaddr(sockaddr, c_addrlen)
assert socket.inet_pton(socket.AF_INET, ip) == \
socket.inet_pton(socket.AF_INET, address[0])
assert port == address[1]
# ipv6
address = ('2001:0db8:85a3:0000:0000:8a2e:0370:7334', 80)
addr, addrlen = socket._gen_sockaddr(socket.AF_INET6, address)
sockaddr = ffi.cast("struct linux_sockaddr*", addr)
assert sockaddr.sa_family == socket.AF_INET6
c_addrlen = ffi.new("socklen_t*", addrlen)
ip, port = socket._parse_sockaddr(sockaddr, c_addrlen)
assert socket.inet_pton(socket.AF_INET6, ip) == \
socket.inet_pton(socket.AF_INET6, address[0])
assert port == address[1]
def test_epoll():
pass