Make it easier to use the eventlet backdoor locally
In order to determine what to do about this module it is quite useful to provide for a way to run it as its own main program (and interact with it from another telnet session). This adds a simple `main` function and uses it. This can then be used like: $ python oslo_service/eventlet_backdoor.py --backdoor_port 8000 Then from another terminal: $ telnet localhost 8000 Change-Id: I8c2b93dfad328929e1a106c5883903fe0bfb188a
This commit is contained in:
parent
eea13af645
commit
c527448894
@ -93,7 +93,7 @@ def _listen(host, start_port, end_port, listen_func):
|
||||
try_port += 1
|
||||
|
||||
|
||||
def initialize_if_enabled(conf):
|
||||
def _initialize_if_enabled(conf):
|
||||
conf.register_opts(_options.eventlet_backdoor_opts)
|
||||
backdoor_locals = {
|
||||
'exit': _dont_use_this, # So we don't exit the entire process
|
||||
@ -127,6 +127,40 @@ def initialize_if_enabled(conf):
|
||||
_LI('Eventlet backdoor listening on %(port)s for process %(pid)d'),
|
||||
{'port': port, 'pid': os.getpid()}
|
||||
)
|
||||
eventlet.spawn_n(eventlet.backdoor.backdoor_server, sock,
|
||||
locals=backdoor_locals)
|
||||
return port
|
||||
thread = eventlet.spawn(eventlet.backdoor.backdoor_server, sock,
|
||||
locals=backdoor_locals)
|
||||
return (port, thread)
|
||||
|
||||
|
||||
def initialize_if_enabled(conf):
|
||||
port_thread = _initialize_if_enabled(conf)
|
||||
if not port_thread:
|
||||
return None
|
||||
else:
|
||||
port, _thread = port_thread
|
||||
return port
|
||||
|
||||
|
||||
def _main():
|
||||
import eventlet
|
||||
eventlet.monkey_patch(all=True)
|
||||
|
||||
from oslo_config import cfg
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
conf = cfg.ConfigOpts()
|
||||
conf.register_cli_opts(_options.eventlet_backdoor_opts)
|
||||
conf(sys.argv[1:])
|
||||
|
||||
port_thread = _initialize_if_enabled(conf)
|
||||
if not port_thread:
|
||||
raise RuntimeError("Did not create backdoor at requested port")
|
||||
else:
|
||||
_port, thread = port_thread
|
||||
thread.wait()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# simple CLI for testing
|
||||
_main()
|
||||
|
@ -36,7 +36,7 @@ class BackdoorPortTest(base.ServiceBaseTestCase):
|
||||
def common_backdoor_port_setup(self):
|
||||
self.sock = self.mox.CreateMockAnything()
|
||||
self.mox.StubOutWithMock(eventlet, 'listen')
|
||||
self.mox.StubOutWithMock(eventlet, 'spawn_n')
|
||||
self.mox.StubOutWithMock(eventlet, 'spawn')
|
||||
|
||||
def test_backdoor_port_inuse(self):
|
||||
self.config(backdoor_port=2345)
|
||||
@ -52,8 +52,8 @@ class BackdoorPortTest(base.ServiceBaseTestCase):
|
||||
self.common_backdoor_port_setup()
|
||||
eventlet.listen(('localhost', 8800)).AndReturn(self.sock)
|
||||
self.sock.getsockname().AndReturn(('127.0.0.1', 8800))
|
||||
eventlet.spawn_n(eventlet.backdoor.backdoor_server, self.sock,
|
||||
locals=moxstubout.mox.IsA(dict))
|
||||
eventlet.spawn(eventlet.backdoor.backdoor_server, self.sock,
|
||||
locals=moxstubout.mox.IsA(dict))
|
||||
self.mox.ReplayAll()
|
||||
port = eventlet_backdoor.initialize_if_enabled(self.conf)
|
||||
self.assertEqual(port, 8800)
|
||||
|
@ -287,12 +287,12 @@ class LauncherTest(base.ServiceBaseTestCase):
|
||||
|
||||
sock = self.mox.CreateMockAnything()
|
||||
self.mox.StubOutWithMock(eventlet, 'listen')
|
||||
self.mox.StubOutWithMock(eventlet, 'spawn_n')
|
||||
self.mox.StubOutWithMock(eventlet, 'spawn')
|
||||
|
||||
eventlet.listen(('localhost', 1234)).AndReturn(sock)
|
||||
sock.getsockname().AndReturn(('127.0.0.1', 1234))
|
||||
eventlet.spawn_n(eventlet.backdoor.backdoor_server, sock,
|
||||
locals=mox.IsA(dict))
|
||||
eventlet.spawn(eventlet.backdoor.backdoor_server, sock,
|
||||
locals=mox.IsA(dict))
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
@ -315,14 +315,14 @@ class LauncherTest(base.ServiceBaseTestCase):
|
||||
|
||||
sock = self.mox.CreateMockAnything()
|
||||
self.mox.StubOutWithMock(eventlet, 'listen')
|
||||
self.mox.StubOutWithMock(eventlet, 'spawn_n')
|
||||
self.mox.StubOutWithMock(eventlet, 'spawn')
|
||||
|
||||
eventlet.listen(('localhost', 8800)).AndRaise(
|
||||
socket.error(errno.EADDRINUSE, ''))
|
||||
eventlet.listen(('localhost', 8801)).AndReturn(sock)
|
||||
sock.getsockname().AndReturn(('127.0.0.1', 8801))
|
||||
eventlet.spawn_n(eventlet.backdoor.backdoor_server, sock,
|
||||
locals=mox.IsA(dict))
|
||||
eventlet.spawn(eventlet.backdoor.backdoor_server, sock,
|
||||
locals=mox.IsA(dict))
|
||||
|
||||
self.mox.ReplayAll()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user