Files
openide/python/helpers/pydev/pydev_tests/test_check_pydevconsole.py
Pavel Karateev 9dbd908dc8 PCQA-696 Mute failing debugger Python 3.8 tests
Reasoning to hard-code mutes:

1. Muted via TeamCity UI the tests still fail the build (see PCQA-593)
2. Muted via TeamCity UI the tests are not muted locally

Tickets for muted tests ...

- PCQA-591
- PCQA-592
- PCQA-697
- PCQA-698
- PCQA-699
- PCQA-700
- PCQA-702
- PCQA-703
- PCQA-704
- PCQA-705
- PCQA-706
- PCQA-707
- PCQA-708
- PCQA-709


(cherry picked from commit aefbf8129a680c8c2256462755d7306492aba4fc)

IJ-MR-149693

GitOrigin-RevId: d0e782aec51b2f1a96f1c9620c2f3966075edfc3
2024-11-20 14:45:15 +00:00

115 lines
4.6 KiB
Python

import threading
import unittest
import os
import pytest
import pydevconsole
from _pydev_bundle.pydev_imports import xmlrpclib, SimpleXMLRPCServer
from _pydev_bundle.pydev_localhost import get_localhost
try:
raw_input
raw_input_name = 'raw_input'
except NameError:
raw_input_name = 'input'
try:
from IPython import core # @UnusedImport
has_ipython = True
except:
has_ipython = False
#=======================================================================================================================
# Test
#=======================================================================================================================
@pytest.mark.skipif(os.environ.get('TRAVIS') == 'true' or not has_ipython, reason='Too flaky on Travis (and requires IPython).')
class Test(unittest.TestCase):
def start_client_thread(self, client_port):
class ClientThread(threading.Thread):
def __init__(self, client_port):
threading.Thread.__init__(self)
self.client_port = client_port
def run(self):
class HandleRequestInput:
def RequestInput(self):
client_thread.requested_input = True
return 'RequestInput: OK'
def NotifyFinished(self, *args, **kwargs):
client_thread.notified_finished += 1
return 1
handle_request_input = HandleRequestInput()
from _pydev_bundle import pydev_localhost
self.client_server = client_server = SimpleXMLRPCServer((pydev_localhost.get_localhost(), self.client_port), logRequests=False)
client_server.register_function(handle_request_input.RequestInput)
client_server.register_function(handle_request_input.NotifyFinished)
client_server.serve_forever()
def shutdown(self):
return
self.client_server.shutdown()
client_thread = ClientThread(client_port)
client_thread.requested_input = False
client_thread.notified_finished = 0
client_thread.daemon = True
client_thread.start()
return client_thread
def get_free_addresses(self):
from _pydev_bundle.pydev_localhost import get_socket_names
socket_names = get_socket_names(2, close=True)
return [socket_name[1] for socket_name in socket_names]
@pytest.mark.xfail(reason="PCQA-697")
def test_server(self):
# Just making sure that the singleton is created in this thread.
from _pydev_bundle.pydev_ipython_console_011 import get_pydev_ipython_frontend
get_pydev_ipython_frontend(get_localhost(), 0)
client_port, server_port = self.get_free_addresses()
class ServerThread(threading.Thread):
def __init__(self, client_port, server_port):
threading.Thread.__init__(self)
self.client_port = client_port
self.server_port = server_port
def run(self):
from _pydev_bundle import pydev_localhost
print('Starting server with:', pydev_localhost.get_localhost(), self.server_port, self.client_port)
pydevconsole.start_server(pydev_localhost.get_localhost(), self.server_port, self.client_port)
server_thread = ServerThread(client_port, server_port)
server_thread.daemon = True
server_thread.start()
client_thread = self.start_client_thread(client_port) #@UnusedVariable
try:
import time
time.sleep(.3) #let's give it some time to start the threads
from _pydev_bundle import pydev_localhost
server = xmlrpclib.Server('http://%s:%s' % (pydev_localhost.get_localhost(), server_port))
server.execLine("import sys; print('Running with: %s %s' % (sys.executable or sys.platform, sys.version))")
server.execLine('class Foo:')
server.execLine(' pass')
server.execLine('')
server.execLine('foo = Foo()')
server.execLine('a = %s()' % raw_input_name)
initial = time.time()
while not client_thread.requested_input:
if time.time() - initial > 2:
raise AssertionError('Did not get the return asked before the timeout.')
time.sleep(.1)
frame_xml = server.getFrame()
self.assertTrue('RequestInput' in frame_xml, 'Did not fid RequestInput in:\n%s' % (frame_xml,))
finally:
client_thread.shutdown()