PATH: //opt/alt/python311/lib64/python3.11/test
FILE_BARU
CREATE
FOLDER_BARU
MKDIR
UPLOAD_FILE
GO
[ .. KEMBALI ]
📄 Sine-1000Hz-300ms.aif
↓
X
📄 __init__.py
↓
X
📄 __main__.py
↓
X
📁 __pycache__/
X
📄 _test_atexit.py
↓
X
📄 _test_eintr.py
↓
X
📄 _test_embed_set_config.py
↓
X
📄 _test_embed_structseq.py
↓
X
📄 _test_multiprocessing.py
↓
X
📄 _test_venv_multiprocessing.py
↓
X
📄 archiver_tests.py
↓
X
📁 audiodata/
X
📄 audiotest.au
↓
X
📄 audiotests.py
↓
X
📄 audit-tests.py
↓
X
📄 autotest.py
↓
X
📄 bisect_cmd.py
↓
X
📁 certdata/
X
📁 cjkencodings/
X
📄 clinic.test.c
↓
X
📄 cmath_testcases.txt
↓
X
📁 configdata/
X
📁 crashers/
X
📄 curses_tests.py
↓
X
📁 data/
X
📄 datetimetester.py
↓
X
📁 decimaltestdata/
X
📄 dis_module.py
↓
X
📁 dtracedata/
X
📄 empty.vbs
↓
X
📁 encoded_modules/
X
📄 exception_hierarchy.txt
↓
X
📄 floating_points.txt
↓
X
📄 fork_wait.py
↓
X
📄 formatfloat_testcases.txt
↓
X
📄 ieee754.txt
↓
X
📁 imghdrdata/
X
📄 imp_dummy.py
↓
X
📁 leakers/
X
📁 libregrtest/
X
📄 list_tests.py
↓
X
📄 lock_tests.py
↓
X
📄 mailcap.txt
↓
X
📄 mapping_tests.py
↓
X
📄 math_testcases.txt
↓
X
📄 memory_watchdog.py
↓
X
📄 mime.types
↓
X
📄 mock_socket.py
↓
X
📄 mp_fork_bomb.py
↓
X
📄 mp_preload.py
↓
X
📄 multibytecodec_support.py
↓
X
📄 pickletester.py
↓
X
📄 profilee.py
↓
X
📄 pstats.pck
↓
X
📄 pyclbr_input.py
↓
X
📄 pythoninfo.py
↓
X
📄 randv2_32.pck
↓
X
📄 randv2_64.pck
↓
X
📄 randv3.pck
↓
X
📄 re_tests.py
↓
X
📄 recursion.tar
↓
X
📄 regrtest.py
↓
X
📁 regrtestdata/
X
📄 relimport.py
↓
X
📄 reperf.py
↓
X
📄 seq_tests.py
↓
X
📄 signalinterproctester.py
↓
X
📁 sndhdrdata/
X
📄 ssl_servers.py
↓
X
📄 ssltests.py
↓
X
📄 string_tests.py
↓
X
📁 subprocessdata/
X
📁 support/
X
📄 test___all__.py
↓
X
📄 test__locale.py
↓
X
📄 test__opcode.py
↓
X
📄 test__osx_support.py
↓
X
📄 test__xxsubinterpreters.py
↓
X
📄 test_abc.py
↓
X
📄 test_abstract_numbers.py
↓
X
📄 test_aifc.py
↓
X
📄 test_argparse.py
↓
X
📄 test_array.py
↓
X
📄 test_asdl_parser.py
↓
X
📄 test_ast.py
↓
X
📄 test_asyncgen.py
↓
X
📄 test_asynchat.py
↓
X
📁 test_asyncio/
X
📄 test_asyncore.py
↓
X
📄 test_atexit.py
↓
X
📄 test_audioop.py
↓
X
📄 test_audit.py
↓
X
📄 test_augassign.py
↓
X
📄 test_base64.py
↓
X
📄 test_baseexception.py
↓
X
📄 test_bdb.py
↓
X
📄 test_bigaddrspace.py
↓
X
📄 test_bigmem.py
↓
X
📄 test_binascii.py
↓
X
📄 test_binop.py
↓
X
📄 test_bisect.py
↓
X
📄 test_bool.py
↓
X
📄 test_buffer.py
↓
X
📄 test_bufio.py
↓
X
📄 test_builtin.py
↓
X
📄 test_bytes.py
↓
X
📄 test_bz2.py
↓
X
📄 test_c_locale_coercion.py
↓
X
📄 test_calendar.py
↓
X
📄 test_call.py
↓
X
📁 test_capi/
X
📄 test_cgi.py
↓
X
📄 test_cgitb.py
↓
X
📄 test_charmapcodec.py
↓
X
📄 test_check_c_globals.py
↓
X
📄 test_class.py
↓
X
📄 test_clinic.py
↓
X
📄 test_cmath.py
↓
X
📄 test_cmd.py
↓
X
📄 test_cmd_line.py
↓
X
📄 test_cmd_line_script.py
↓
X
📄 test_code.py
↓
X
📄 test_code_module.py
↓
X
📄 test_codeccallbacks.py
↓
X
📄 test_codecencodings_cn.py
↓
X
📄 test_codecencodings_hk.py
↓
X
📄 test_codecencodings_iso2022.py
↓
X
📄 test_codecencodings_jp.py
↓
X
📄 test_codecencodings_kr.py
↓
X
📄 test_codecencodings_tw.py
↓
X
📄 test_codecmaps_cn.py
↓
X
📄 test_codecmaps_hk.py
↓
X
📄 test_codecmaps_jp.py
↓
X
📄 test_codecmaps_kr.py
↓
X
📄 test_codecmaps_tw.py
↓
X
📄 test_codecs.py
↓
X
📄 test_codeop.py
↓
X
📄 test_collections.py
↓
X
📄 test_colorsys.py
↓
X
📄 test_compare.py
↓
X
📄 test_compile.py
↓
X
📄 test_compileall.py
↓
X
📄 test_complex.py
↓
X
📁 test_concurrent_futures/
X
📄 test_configparser.py
↓
X
📄 test_contains.py
↓
X
📄 test_context.py
↓
X
📄 test_contextlib.py
↓
X
📄 test_contextlib_async.py
↓
X
📄 test_copy.py
↓
X
📄 test_copyreg.py
↓
X
📄 test_coroutines.py
↓
X
📁 test_cppext/
X
📄 test_cprofile.py
↓
X
📄 test_crashers.py
↓
X
📄 test_crypt.py
↓
X
📄 test_csv.py
↓
X
📄 test_ctypes.py
↓
X
📄 test_curses.py
↓
X
📁 test_dataclasses/
X
📄 test_datetime.py
↓
X
📄 test_dbm.py
↓
X
📄 test_dbm_dumb.py
↓
X
📄 test_dbm_gnu.py
↓
X
📄 test_dbm_ndbm.py
↓
X
📄 test_decimal.py
↓
X
📄 test_decorators.py
↓
X
📄 test_defaultdict.py
↓
X
📄 test_deque.py
↓
X
📄 test_descr.py
↓
X
📄 test_descrtut.py
↓
X
📄 test_devpoll.py
↓
X
📄 test_dict.py
↓
X
📄 test_dict_version.py
↓
X
📄 test_dictcomps.py
↓
X
📄 test_dictviews.py
↓
X
📄 test_difflib.py
↓
X
📄 test_difflib_expect.html
↓
X
📄 test_dis.py
↓
X
📄 test_distutils.py
↓
X
📁 test_doctest/
X
📄 test_docxmlrpc.py
↓
X
📄 test_dtrace.py
↓
X
📄 test_dynamic.py
↓
X
📄 test_dynamicclassattribute.py
↓
X
📄 test_eintr.py
↓
X
📁 test_email/
X
📄 test_embed.py
↓
X
📄 test_ensurepip.py
↓
X
📄 test_enum.py
↓
X
📄 test_enumerate.py
↓
X
📄 test_eof.py
↓
X
📄 test_epoll.py
↓
X
📄 test_errno.py
↓
X
📄 test_except_star.py
↓
X
📄 test_exception_group.py
↓
X
📄 test_exception_hierarchy.py
↓
X
📄 test_exception_variations.py
↓
X
📄 test_exceptions.py
↓
X
📄 test_extcall.py
↓
X
📄 test_faulthandler.py
↓
X
📄 test_fcntl.py
↓
X
📄 test_file.py
↓
X
📄 test_file_eintr.py
↓
X
📄 test_filecmp.py
↓
X
📄 test_fileinput.py
↓
X
📄 test_fileio.py
↓
X
📄 test_fileutils.py
↓
X
📄 test_finalization.py
↓
X
📄 test_float.py
↓
X
📄 test_flufl.py
↓
X
📄 test_fnmatch.py
↓
X
📄 test_fork1.py
↓
X
📄 test_format.py
↓
X
📄 test_fractions.py
↓
X
📄 test_frame.py
↓
X
📄 test_frozen.py
↓
X
📄 test_fstring.py
↓
X
📄 test_ftplib.py
↓
X
📄 test_funcattrs.py
↓
X
📄 test_functools.py
↓
X
📁 test_future_stmt/
X
📄 test_gc.py
↓
X
📁 test_gdb/
X
📄 test_generator_stop.py
↓
X
📄 test_generators.py
↓
X
📄 test_genericalias.py
↓
X
📄 test_genericclass.py
↓
X
📄 test_genericpath.py
↓
X
📄 test_genexps.py
↓
X
📄 test_getopt.py
↓
X
📄 test_getpass.py
↓
X
📄 test_getpath.py
↓
X
📄 test_gettext.py
↓
X
📄 test_glob.py
↓
X
📄 test_global.py
↓
X
📄 test_grammar.py
↓
X
📄 test_graphlib.py
↓
X
📄 test_grp.py
↓
X
📄 test_gzip.py
↓
X
📄 test_hash.py
↓
X
📄 test_hashlib.py
↓
X
📄 test_heapq.py
↓
X
📄 test_hmac.py
↓
X
📄 test_html.py
↓
X
📄 test_htmlparser.py
↓
X
📄 test_http_cookiejar.py
↓
X
📄 test_http_cookies.py
↓
X
📄 test_httplib.py
↓
X
📄 test_httpservers.py
↓
X
📄 test_idle.py
↓
X
📄 test_imaplib.py
↓
X
📄 test_imghdr.py
↓
X
📄 test_imp.py
↓
X
📁 test_import/
X
📁 test_importlib/
X
📄 test_index.py
↓
X
📁 test_inspect/
X
📄 test_int.py
↓
X
📄 test_int_literal.py
↓
X
📄 test_interpreters.py
↓
X
📄 test_io.py
↓
X
📄 test_ioctl.py
↓
X
📄 test_ipaddress.py
↓
X
📄 test_isinstance.py
↓
X
📄 test_iter.py
↓
X
📄 test_iterlen.py
↓
X
📄 test_itertools.py
↓
X
📁 test_json/
X
📄 test_keyword.py
↓
X
📄 test_keywordonlyarg.py
↓
X
📄 test_kqueue.py
↓
X
📄 test_largefile.py
↓
X
📄 test_launcher.py
↓
X
📄 test_lib2to3.py
↓
X
📄 test_linecache.py
↓
X
📄 test_list.py
↓
X
📄 test_listcomps.py
↓
X
📄 test_lltrace.py
↓
X
📄 test_locale.py
↓
X
📄 test_logging.py
↓
X
📄 test_long.py
↓
X
📄 test_longexp.py
↓
X
📄 test_lzma.py
↓
X
📄 test_mailbox.py
↓
X
📄 test_mailcap.py
↓
X
📄 test_marshal.py
↓
X
📄 test_math.py
↓
X
📄 test_memoryio.py
↓
X
📄 test_memoryview.py
↓
X
📄 test_metaclass.py
↓
X
📄 test_mimetypes.py
↓
X
📄 test_minidom.py
↓
X
📄 test_mmap.py
↓
X
📁 test_module/
X
📄 test_modulefinder.py
↓
X
📄 test_msilib.py
↓
X
📄 test_multibytecodec.py
↓
X
📁 test_multiprocessing_fork/
X
📁 test_multiprocessing_forkserver/
X
📄 test_multiprocessing_main_handling.py
↓
X
📁 test_multiprocessing_spawn/
X
📄 test_named_expressions.py
↓
X
📄 test_netrc.py
↓
X
📄 test_nis.py
↓
X
📄 test_nntplib.py
↓
X
📄 test_ntpath.py
↓
X
📄 test_numeric_tower.py
↓
X
📄 test_opcache.py
↓
X
📄 test_opcodes.py
↓
X
📄 test_openpty.py
↓
X
📄 test_operator.py
↓
X
📄 test_optparse.py
↓
X
📄 test_ordered_dict.py
↓
X
📄 test_os.py
↓
X
📄 test_ossaudiodev.py
↓
X
📄 test_osx_env.py
↓
X
📄 test_pathlib.py
↓
X
📄 test_patma.py
↓
X
📄 test_pdb.py
↓
X
📄 test_peepholer.py
↓
X
📁 test_peg_generator/
X
📄 test_pep646_syntax.py
↓
X
📄 test_pickle.py
↓
X
📄 test_picklebuffer.py
↓
X
📄 test_pickletools.py
↓
X
📄 test_pipes.py
↓
X
📄 test_pkg.py
↓
X
📄 test_pkgutil.py
↓
X
📄 test_platform.py
↓
X
📄 test_plistlib.py
↓
X
📄 test_poll.py
↓
X
📄 test_popen.py
↓
X
📄 test_poplib.py
↓
X
📄 test_positional_only_arg.py
↓
X
📄 test_posix.py
↓
X
📄 test_posixpath.py
↓
X
📄 test_pow.py
↓
X
📄 test_pprint.py
↓
X
📄 test_print.py
↓
X
📄 test_profile.py
↓
X
📄 test_property.py
↓
X
📄 test_pstats.py
↓
X
📄 test_pty.py
↓
X
📄 test_pulldom.py
↓
X
📄 test_pwd.py
↓
X
📄 test_py_compile.py
↓
X
📄 test_pyclbr.py
↓
X
📁 test_pydoc/
X
📄 test_pyexpat.py
↓
X
📄 test_queue.py
↓
X
📄 test_quopri.py
↓
X
📄 test_raise.py
↓
X
📄 test_random.py
↓
X
📄 test_range.py
↓
X
📄 test_re.py
↓
X
📄 test_readline.py
↓
X
📄 test_regrtest.py
↓
X
📄 test_repl.py
↓
X
📄 test_reprlib.py
↓
X
📄 test_resource.py
↓
X
📄 test_richcmp.py
↓
X
📄 test_rlcompleter.py
↓
X
📄 test_robotparser.py
↓
X
📄 test_runpy.py
↓
X
📄 test_sax.py
↓
X
📄 test_sched.py
↓
X
📄 test_scope.py
↓
X
📄 test_script_helper.py
↓
X
📄 test_secrets.py
↓
X
📄 test_select.py
↓
X
📄 test_selectors.py
↓
X
📄 test_set.py
↓
X
📄 test_setcomps.py
↓
X
📄 test_shelve.py
↓
X
📄 test_shlex.py
↓
X
📄 test_shutil.py
↓
X
📄 test_signal.py
↓
X
📄 test_site.py
↓
X
📄 test_slice.py
↓
X
📄 test_smtpd.py
↓
X
📄 test_smtplib.py
↓
X
📄 test_smtpnet.py
↓
X
📄 test_sndhdr.py
↓
X
📄 test_socket.py
↓
X
📄 test_socketserver.py
↓
X
📄 test_sort.py
↓
X
📄 test_source_encoding.py
↓
X
📄 test_spwd.py
↓
X
📁 test_sqlite3/
X
📄 test_ssl.py
↓
X
📄 test_stable_abi_ctypes.py
↓
X
📄 test_startfile.py
↓
X
📄 test_stat.py
↓
X
📄 test_statistics.py
↓
X
📄 test_strftime.py
↓
X
📄 test_string.py
↓
X
📄 test_string_literals.py
↓
X
📄 test_stringprep.py
↓
X
📄 test_strptime.py
↓
X
📄 test_strtod.py
↓
X
📄 test_struct.py
↓
X
📄 test_structseq.py
↓
X
📄 test_subclassinit.py
↓
X
📄 test_subprocess.py
↓
X
📄 test_sunau.py
↓
X
📄 test_sundry.py
↓
X
📄 test_super.py
↓
X
📄 test_support.py
↓
X
📄 test_symtable.py
↓
X
📄 test_syntax.py
↓
X
📄 test_sys.py
↓
X
📄 test_sys_setprofile.py
↓
X
📄 test_sys_settrace.py
↓
X
📄 test_sysconfig.py
↓
X
📄 test_syslog.py
↓
X
📄 test_tabnanny.py
↓
X
📄 test_tarfile.py
↓
X
📄 test_tcl.py
↓
X
📄 test_telnetlib.py
↓
X
📄 test_tempfile.py
↓
X
📄 test_termios.py
↓
X
📄 test_textwrap.py
↓
X
📄 test_thread.py
↓
X
📄 test_threadedtempfile.py
↓
X
📄 test_threading.py
↓
X
📄 test_threading_local.py
↓
X
📄 test_threadsignals.py
↓
X
📄 test_time.py
↓
X
📄 test_timeit.py
↓
X
📄 test_timeout.py
↓
X
📄 test_tix.py
↓
X
📄 test_tk.py
↓
X
📄 test_tokenize.py
↓
X
📁 test_tomllib/
X
📁 test_tools/
X
📄 test_trace.py
↓
X
📄 test_traceback.py
↓
X
📄 test_tracemalloc.py
↓
X
📄 test_ttk_guionly.py
↓
X
📄 test_ttk_textonly.py
↓
X
📄 test_tty.py
↓
X
📄 test_tuple.py
↓
X
📄 test_turtle.py
↓
X
📄 test_type_annotations.py
↓
X
📄 test_type_cache.py
↓
X
📄 test_type_comments.py
↓
X
📄 test_typechecks.py
↓
X
📄 test_types.py
↓
X
📄 test_typing.py
↓
X
📄 test_ucn.py
↓
X
📄 test_unary.py
↓
X
📄 test_unicode.py
↓
X
📄 test_unicode_file.py
↓
X
📄 test_unicode_file_functions.py
↓
X
📄 test_unicode_identifiers.py
↓
X
📄 test_unicodedata.py
↓
X
📄 test_unittest.py
↓
X
📄 test_univnewlines.py
↓
X
📄 test_unpack.py
↓
X
📄 test_unpack_ex.py
↓
X
📄 test_unparse.py
↓
X
📄 test_urllib.py
↓
X
📄 test_urllib2.py
↓
X
📄 test_urllib2_localnet.py
↓
X
📄 test_urllib2net.py
↓
X
📄 test_urllib_response.py
↓
X
📄 test_urllibnet.py
↓
X
📄 test_urlparse.py
↓
X
📄 test_userdict.py
↓
X
📄 test_userlist.py
↓
X
📄 test_userstring.py
↓
X
📄 test_utf8_mode.py
↓
X
📄 test_utf8source.py
↓
X
📄 test_uu.py
↓
X
📄 test_uuid.py
↓
X
📄 test_venv.py
↓
X
📄 test_wait3.py
↓
X
📄 test_wait4.py
↓
X
📁 test_warnings/
X
📄 test_wave.py
↓
X
📄 test_weakref.py
↓
X
📄 test_weakset.py
↓
X
📄 test_webbrowser.py
↓
X
📄 test_winconsoleio.py
↓
X
📄 test_winreg.py
↓
X
📄 test_winsound.py
↓
X
📄 test_with.py
↓
X
📄 test_wsgiref.py
↓
X
📄 test_xdrlib.py
↓
X
📄 test_xml_dom_minicompat.py
↓
X
📄 test_xml_etree.py
↓
X
📄 test_xml_etree_c.py
↓
X
📄 test_xmlrpc.py
↓
X
📄 test_xmlrpc_net.py
↓
X
📄 test_xxlimited.py
↓
X
📄 test_xxtestfuzz.py
↓
X
📄 test_yield_from.py
↓
X
📄 test_zipapp.py
↓
X
📄 test_zipfile.py
↓
X
📄 test_zipfile64.py
↓
X
📄 test_zipimport.py
↓
X
📄 test_zipimport_support.py
↓
X
📄 test_zlib.py
↓
X
📁 test_zoneinfo/
X
📄 testcodec.py
↓
X
📄 testtar.tar
↓
X
📄 testtar.tar.xz
↓
X
📄 tf_inherit_check.py
↓
X
📄 time_hashlib.py
↓
X
📁 tokenizedata/
X
📁 tracedmodules/
X
📁 typinganndata/
X
📄 win_console_handler.py
↓
X
📁 xmltestdata/
X
📄 xmltests.py
↓
X
📄 zip_cp437_header.zip
↓
X
📄 zipdir.zip
↓
X
📄 zipdir_backslash.zip
↓
X
📁 ziptestdata/
X
SAVING...
BERHASIL DIUBAH!
EDITING: test_telnetlib.py
import socket import selectors import threading import contextlib from test import support from test.support import socket_helper, warnings_helper import unittest support.requires_working_socket(module=True) telnetlib = warnings_helper.import_deprecated('telnetlib') HOST = socket_helper.HOST def server(evt, serv): serv.listen() evt.set() try: conn, addr = serv.accept() conn.close() except TimeoutError: pass finally: serv.close() class GeneralTests(unittest.TestCase): def setUp(self): self.evt = threading.Event() self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.settimeout(60) # Safety net. Look issue 11812 self.port = socket_helper.bind_port(self.sock) self.thread = threading.Thread(target=server, args=(self.evt,self.sock)) self.thread.daemon = True self.thread.start() self.evt.wait() def tearDown(self): self.thread.join() del self.thread # Clear out any dangling Thread objects. def testBasic(self): # connects telnet = telnetlib.Telnet(HOST, self.port) telnet.sock.close() def testContextManager(self): with telnetlib.Telnet(HOST, self.port) as tn: self.assertIsNotNone(tn.get_socket()) self.assertIsNone(tn.get_socket()) def testTimeoutDefault(self): self.assertTrue(socket.getdefaulttimeout() is None) socket.setdefaulttimeout(30) try: telnet = telnetlib.Telnet(HOST, self.port) finally: socket.setdefaulttimeout(None) self.assertEqual(telnet.sock.gettimeout(), 30) telnet.sock.close() def testTimeoutNone(self): # None, having other default self.assertTrue(socket.getdefaulttimeout() is None) socket.setdefaulttimeout(30) try: telnet = telnetlib.Telnet(HOST, self.port, timeout=None) finally: socket.setdefaulttimeout(None) self.assertTrue(telnet.sock.gettimeout() is None) telnet.sock.close() def testTimeoutValue(self): telnet = telnetlib.Telnet(HOST, self.port, timeout=30) self.assertEqual(telnet.sock.gettimeout(), 30) telnet.sock.close() def testTimeoutOpen(self): telnet = telnetlib.Telnet() telnet.open(HOST, self.port, timeout=30) self.assertEqual(telnet.sock.gettimeout(), 30) telnet.sock.close() def testGetters(self): # Test telnet getter methods telnet = telnetlib.Telnet(HOST, self.port, timeout=30) t_sock = telnet.sock self.assertEqual(telnet.get_socket(), t_sock) self.assertEqual(telnet.fileno(), t_sock.fileno()) telnet.sock.close() class SocketStub(object): ''' a socket proxy that re-defines sendall() ''' def __init__(self, reads=()): self.reads = list(reads) # Intentionally make a copy. self.writes = [] self.block = False def sendall(self, data): self.writes.append(data) def recv(self, size): out = b'' while self.reads and len(out) < size: out += self.reads.pop(0) if len(out) > size: self.reads.insert(0, out[size:]) out = out[:size] return out class TelnetAlike(telnetlib.Telnet): def fileno(self): raise NotImplementedError() def close(self): pass def sock_avail(self): return (not self.sock.block) def msg(self, msg, *args): with support.captured_stdout() as out: telnetlib.Telnet.msg(self, msg, *args) self._messages += out.getvalue() return class MockSelector(selectors.BaseSelector): def __init__(self): self.keys = {} @property def resolution(self): return 1e-3 def register(self, fileobj, events, data=None): key = selectors.SelectorKey(fileobj, 0, events, data) self.keys[fileobj] = key return key def unregister(self, fileobj): return self.keys.pop(fileobj) def select(self, timeout=None): block = False for fileobj in self.keys: if isinstance(fileobj, TelnetAlike): block = fileobj.sock.block break if block: return [] else: return [(key, key.events) for key in self.keys.values()] def get_map(self): return self.keys @contextlib.contextmanager def test_socket(reads): def new_conn(*ignored): return SocketStub(reads) try: old_conn = socket.create_connection socket.create_connection = new_conn yield None finally: socket.create_connection = old_conn return def test_telnet(reads=(), cls=TelnetAlike): ''' return a telnetlib.Telnet object that uses a SocketStub with reads queued up to be read ''' for x in reads: assert type(x) is bytes, x with test_socket(reads): telnet = cls('dummy', 0) telnet._messages = '' # debuglevel output return telnet class ExpectAndReadTestCase(unittest.TestCase): def setUp(self): self.old_selector = telnetlib._TelnetSelector telnetlib._TelnetSelector = MockSelector def tearDown(self): telnetlib._TelnetSelector = self.old_selector class ReadTests(ExpectAndReadTestCase): def test_read_until(self): """ read_until(expected, timeout=None) test the blocking version of read_util """ want = [b'xxxmatchyyy'] telnet = test_telnet(want) data = telnet.read_until(b'match') self.assertEqual(data, b'xxxmatch', msg=(telnet.cookedq, telnet.rawq, telnet.sock.reads)) reads = [b'x' * 50, b'match', b'y' * 50] expect = b''.join(reads[:-1]) telnet = test_telnet(reads) data = telnet.read_until(b'match') self.assertEqual(data, expect) def test_read_all(self): """ read_all() Read all data until EOF; may block. """ reads = [b'x' * 500, b'y' * 500, b'z' * 500] expect = b''.join(reads) telnet = test_telnet(reads) data = telnet.read_all() self.assertEqual(data, expect) return def test_read_some(self): """ read_some() Read at least one byte or EOF; may block. """ # test 'at least one byte' telnet = test_telnet([b'x' * 500]) data = telnet.read_some() self.assertTrue(len(data) >= 1) # test EOF telnet = test_telnet() data = telnet.read_some() self.assertEqual(b'', data) def _read_eager(self, func_name): """ read_*_eager() Read all data available already queued or on the socket, without blocking. """ want = b'x' * 100 telnet = test_telnet([want]) func = getattr(telnet, func_name) telnet.sock.block = True self.assertEqual(b'', func()) telnet.sock.block = False data = b'' while True: try: data += func() except EOFError: break self.assertEqual(data, want) def test_read_eager(self): # read_eager and read_very_eager make the same guarantees # (they behave differently but we only test the guarantees) self._read_eager('read_eager') self._read_eager('read_very_eager') # NB -- we need to test the IAC block which is mentioned in the # docstring but not in the module docs def read_very_lazy(self): want = b'x' * 100 telnet = test_telnet([want]) self.assertEqual(b'', telnet.read_very_lazy()) while telnet.sock.reads: telnet.fill_rawq() data = telnet.read_very_lazy() self.assertEqual(want, data) self.assertRaises(EOFError, telnet.read_very_lazy) def test_read_lazy(self): want = b'x' * 100 telnet = test_telnet([want]) self.assertEqual(b'', telnet.read_lazy()) data = b'' while True: try: read_data = telnet.read_lazy() data += read_data if not read_data: telnet.fill_rawq() except EOFError: break self.assertTrue(want.startswith(data)) self.assertEqual(data, want) class nego_collector(object): def __init__(self, sb_getter=None): self.seen = b'' self.sb_getter = sb_getter self.sb_seen = b'' def do_nego(self, sock, cmd, opt): self.seen += cmd + opt if cmd == tl.SE and self.sb_getter: sb_data = self.sb_getter() self.sb_seen += sb_data tl = telnetlib class WriteTests(unittest.TestCase): '''The only thing that write does is replace each tl.IAC for tl.IAC+tl.IAC''' def test_write(self): data_sample = [b'data sample without IAC', b'data sample with' + tl.IAC + b' one IAC', b'a few' + tl.IAC + tl.IAC + b' iacs' + tl.IAC, tl.IAC, b''] for data in data_sample: telnet = test_telnet() telnet.write(data) written = b''.join(telnet.sock.writes) self.assertEqual(data.replace(tl.IAC,tl.IAC+tl.IAC), written) class OptionTests(unittest.TestCase): # RFC 854 commands cmds = [tl.AO, tl.AYT, tl.BRK, tl.EC, tl.EL, tl.GA, tl.IP, tl.NOP] def _test_command(self, data): """ helper for testing IAC + cmd """ telnet = test_telnet(data) data_len = len(b''.join(data)) nego = nego_collector() telnet.set_option_negotiation_callback(nego.do_nego) txt = telnet.read_all() cmd = nego.seen self.assertTrue(len(cmd) > 0) # we expect at least one command self.assertIn(cmd[:1], self.cmds) self.assertEqual(cmd[1:2], tl.NOOPT) self.assertEqual(data_len, len(txt + cmd)) nego.sb_getter = None # break the nego => telnet cycle def test_IAC_commands(self): for cmd in self.cmds: self._test_command([tl.IAC, cmd]) self._test_command([b'x' * 100, tl.IAC, cmd, b'y'*100]) self._test_command([b'x' * 10, tl.IAC, cmd, b'y'*10]) # all at once self._test_command([tl.IAC + cmd for (cmd) in self.cmds]) def test_SB_commands(self): # RFC 855, subnegotiations portion send = [tl.IAC + tl.SB + tl.IAC + tl.SE, tl.IAC + tl.SB + tl.IAC + tl.IAC + tl.IAC + tl.SE, tl.IAC + tl.SB + tl.IAC + tl.IAC + b'aa' + tl.IAC + tl.SE, tl.IAC + tl.SB + b'bb' + tl.IAC + tl.IAC + tl.IAC + tl.SE, tl.IAC + tl.SB + b'cc' + tl.IAC + tl.IAC + b'dd' + tl.IAC + tl.SE, ] telnet = test_telnet(send) nego = nego_collector(telnet.read_sb_data) telnet.set_option_negotiation_callback(nego.do_nego) txt = telnet.read_all() self.assertEqual(txt, b'') want_sb_data = tl.IAC + tl.IAC + b'aabb' + tl.IAC + b'cc' + tl.IAC + b'dd' self.assertEqual(nego.sb_seen, want_sb_data) self.assertEqual(b'', telnet.read_sb_data()) nego.sb_getter = None # break the nego => telnet cycle def test_debuglevel_reads(self): # test all the various places that self.msg(...) is called given_a_expect_b = [ # Telnet.fill_rawq (b'a', ": recv b''\n"), # Telnet.process_rawq (tl.IAC + bytes([88]), ": IAC 88 not recognized\n"), (tl.IAC + tl.DO + bytes([1]), ": IAC DO 1\n"), (tl.IAC + tl.DONT + bytes([1]), ": IAC DONT 1\n"), (tl.IAC + tl.WILL + bytes([1]), ": IAC WILL 1\n"), (tl.IAC + tl.WONT + bytes([1]), ": IAC WONT 1\n"), ] for a, b in given_a_expect_b: telnet = test_telnet([a]) telnet.set_debuglevel(1) txt = telnet.read_all() self.assertIn(b, telnet._messages) return def test_debuglevel_write(self): telnet = test_telnet() telnet.set_debuglevel(1) telnet.write(b'xxx') expected = "send b'xxx'\n" self.assertIn(expected, telnet._messages) def test_debug_accepts_str_port(self): # Issue 10695 with test_socket([]): telnet = TelnetAlike('dummy', '0') telnet._messages = '' telnet.set_debuglevel(1) telnet.msg('test') self.assertRegex(telnet._messages, r'0.*test') class ExpectTests(ExpectAndReadTestCase): def test_expect(self): """ expect(expected, [timeout]) Read until the expected string has been seen, or a timeout is hit (default is no timeout); may block. """ want = [b'x' * 10, b'match', b'y' * 10] telnet = test_telnet(want) (_,_,data) = telnet.expect([b'match']) self.assertEqual(data, b''.join(want[:-1])) if __name__ == '__main__': unittest.main()
SIMPAN PERUBAHAN