12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #!/usr/bin/env python
- from erlpack import pack, unpack
- import socket
- import struct
- from string import Template
- PORT = 5001
- HOST = ''
- BACKLOG = 5
- file_tmpl = Template("""
- from erlpack import Atom, pack, unpack
- ${testcases}
- """.strip())
- testcase_pack_tmpl = Template("""
- def test_pack_${name}():
- assert pack(${python_rep}) == ${packed_rep}
- """)
- testcase_unpack_tmpl = Template("""
- def test_unpack_${name}():
- assert unpack(${packed_rep}) == ${python_rep}
- """)
- def start_server():
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- s.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
- s.bind((HOST, PORT))
- s.listen(BACKLOG)
- client, address = s.accept()
- clientfile = client.makefile()
- testcases = ''
- is_name = True
- name = ''
- while 1:
- size_str = clientfile.read(4)
- if not size_str:
- break
- else:
- (size,) = struct.unpack("!L", size_str)
- data_str = clientfile.read(size)
- term = unpack(data_str)
- encoded_term = pack(term)
- out_size = len(encoded_term)
- clientfile.write(struct.pack("!L", long(out_size)))
- clientfile.write(encoded_term)
- clientfile.flush()
- if is_name:
- name = term
- else:
- testcases += testcase_pack_tmpl.substitute(name=name,
- python_rep=repr(term),
- packed_rep=repr(encoded_term))
- testcases += testcase_unpack_tmpl.substitute(name=name,
- python_rep=repr(term),
- packed_rep=repr(data_str))
- is_name = not is_name
- with open('tests/test_generated.py', 'w') as f:
- f.write(file_tmpl.substitute(testcases=testcases))
- clientfile.close()
- client.close()
- start_server()
|