"""
Test lldb 'process connect' command.
"""

import os
import unittest2
import lldb
import pexpect
from lldbtest import *

class ConnectRemoteTestCase(TestBase):

    mydir = os.path.join("functionalities", "connect_remote")

    def test_connect_remote(self):
        """Test "process connect connect:://localhost:12345"."""

        # First, we'll start a fake debugserver (a simple echo server).
        fakeserver = pexpect.spawn('./EchoServer.py')

        # Turn on logging for what the child sends back.
        if self.TraceOn():
            fakeserver.logfile_read = sys.stdout

        # Schedule the fake debugserver to be shutting down during teardown.
        def shutdown_fakeserver():
            fakeserver.close()
        self.addTearDownHook(shutdown_fakeserver)

        # Wait until we receive the server ready message before continuing.
        fakeserver.expect_exact('Listening on localhost:12345')

        # Connect to the fake server....
        if sys.platform.startswith('freebsd') or sys.platform.startswith("linux"):
            self.runCmd("process connect -p gdb-remote connect://localhost:12345")
        else:
            self.runCmd("process connect connect://localhost:12345")


if __name__ == '__main__':
    import atexit
    lldb.SBDebugger.Initialize()
    atexit.register(lambda: lldb.SBDebugger.Terminate())
    unittest2.main()
