Test recv(), send() and friends.
(self)
| 3837 | sys.stdout.write(" client: connection closed.\n") |
| 3838 | |
| 3839 | def test_recv_send(self): |
| 3840 | """Test recv(), send() and friends.""" |
| 3841 | if support.verbose: |
| 3842 | sys.stdout.write("\n") |
| 3843 | |
| 3844 | server = ThreadedEchoServer(CERTFILE, |
| 3845 | certreqs=ssl.CERT_NONE, |
| 3846 | ssl_version=ssl.PROTOCOL_TLS_SERVER, |
| 3847 | cacerts=CERTFILE, |
| 3848 | chatty=True, |
| 3849 | connectionchatty=False) |
| 3850 | with server: |
| 3851 | s = test_wrap_socket(socket.socket(), |
| 3852 | server_side=False, |
| 3853 | certfile=CERTFILE, |
| 3854 | ca_certs=CERTFILE, |
| 3855 | cert_reqs=ssl.CERT_NONE) |
| 3856 | s.connect((HOST, server.port)) |
| 3857 | # helper methods for standardising recv* method signatures |
| 3858 | def _recv_into(): |
| 3859 | b = bytearray(b"\0"*100) |
| 3860 | count = s.recv_into(b) |
| 3861 | return b[:count] |
| 3862 | |
| 3863 | def _recvfrom_into(): |
| 3864 | b = bytearray(b"\0"*100) |
| 3865 | count, addr = s.recvfrom_into(b) |
| 3866 | return b[:count] |
| 3867 | |
| 3868 | # (name, method, expect success?, *args, return value func) |
| 3869 | send_methods = [ |
| 3870 | ('send', s.send, True, [], len), |
| 3871 | ('sendto', s.sendto, False, ["some.address"], len), |
| 3872 | ('sendall', s.sendall, True, [], lambda x: None), |
| 3873 | ] |
| 3874 | # (name, method, whether to expect success, *args) |
| 3875 | recv_methods = [ |
| 3876 | ('recv', s.recv, True, []), |
| 3877 | ('recvfrom', s.recvfrom, False, ["some.address"]), |
| 3878 | ('recv_into', _recv_into, True, []), |
| 3879 | ('recvfrom_into', _recvfrom_into, False, []), |
| 3880 | ] |
| 3881 | data_prefix = "PREFIX_" |
| 3882 | |
| 3883 | for (meth_name, send_meth, expect_success, args, |
| 3884 | ret_val_meth) in send_methods: |
| 3885 | indata = (data_prefix + meth_name).encode('ascii') |
| 3886 | try: |
| 3887 | ret = send_meth(indata, *args) |
| 3888 | msg = "sending with {}".format(meth_name) |
| 3889 | self.assertEqual(ret, ret_val_meth(indata), msg=msg) |
| 3890 | outdata = s.read() |
| 3891 | if outdata != indata.lower(): |
| 3892 | self.fail( |
| 3893 | "While sending with <<{name:s}>> bad data " |
| 3894 | "<<{outdata:r}>> ({nout:d}) received; " |
| 3895 | "expected <<{indata:r}>> ({nin:d})\n".format( |
| 3896 | name=meth_name, outdata=outdata[:20], |
nothing calls this directly
no test coverage detected