コード例 #1
0
    def start(self, node, uri, tunnel=False, external_uri=None):
        """ If not tunnel, start listening on uri and handle http requests.
            If tunnel, setup a tunnel to uri and handle requests.
        """
        self.metering = metering.get_metering()
        self.node = node
        self.security = Security(self.node)
        schema, _ = uri.split(':', 1)
        if tunnel:
            # Connect to tunnel server
            self.tunnel_client = CalvinControlTunnelClient(uri, self)
        else:
            url = urlparse(uri)
            self.port = int(url.port)
            self.host = url.hostname
            if external_uri is not None:
                self.external_host = urlparse(external_uri).hostname
            else:
                self.external_host = self.host
            _log.info("Control API trying to listening on: %s:%s" % (self.host, self.port))

            self.server = server_connection.ServerProtocolFactory(self.handle_request, "http", node_name=node.node_name)
            self.server.start(self.host, self.port)

            # Create tunnel server
            self.tunnel_server = CalvinControlTunnelServer(self.node)
コード例 #2
0
    def test_default_line_mode(self):
        print_header("TEST_DEFAULT_LINE_MODE")
        print_header("Setup")
        scheduler = Scheduler_stub()
        self.factory = server_connection.ServerProtocolFactory(scheduler.trigger_loop)
        self.factory.start('localhost', 8123)
        self.conn = None
        self.client_socket = None

        print_header("Test_Connection")
        ##################################################################
        self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        assert not self.factory.connections
        assert not self.factory.pending_connections

        yield threads.defer_to_thread(self.client_socket.connect, ('localhost', 8123))
        yield threads.defer_to_thread(connection_made, self.factory)
        assert self.factory.pending_connections

        _, self.conn = self.factory.accept()

        ####################################################################
        ####################################################################

        print_header("Test_Line_Received")
        ####################################################################
        assert self.conn.data_available is False
        yield threads.defer_to_thread(self.client_socket.send, "sending string \r\n")
        yield threads.defer_to_thread(data_available, self.conn)
        assert self.conn.data_get() == "sending string "

        print_header("Teardown")
        self.factory.stop()
        yield threads.defer_to_thread(no_more_connections, self.factory)
コード例 #3
0
    def test_many_clients(self):
        print_header("TEST_MANY_CLIENTS")
        print_header("Setup")
        scheduler = Scheduler_stub()
        self.factory = server_connection.ServerProtocolFactory(scheduler.trigger_loop, mode='raw', max_length=10)
        self.factory.start('localhost', 8123)
        self.conn = None
        self.client_socket = None

        print_header("Test_Connection")
        ##################################################################
        clients = []
        for i in range(100):
            clients.append(socket.socket(socket.AF_INET, socket.SOCK_STREAM))

        for c in clients:
            yield threads.defer_to_thread(c.connect, ('localhost', 8123))

        yield threads.defer_to_thread(hundred_connection_made, self.factory)

        assert len(self.factory.pending_connections) == 100

        for i in range(100):
            _, self.conn = self.factory.accept()

        assert not self.factory.pending_connections
コード例 #4
0
    def test_raw_mode(self):
        print_header("TEST_RAW_MODE")
        print_header("Setup")
        scheduler = Scheduler_stub()
        self.factory = server_connection.ServerProtocolFactory(scheduler.trigger_loop, mode='raw', max_length=10)
        self.factory.start('localhost', 8123)
        self.conn = None
        self.client_socket = None

        print_header("Test_Connection")
        ##################################################################
        self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        yield threads.defer_to_thread(self.client_socket.connect, ('localhost', 8123))
        yield threads.defer_to_thread(connection_made, self.factory)
        assert self.factory.pending_connections

        _, self.conn = self.factory.accept()
        assert not self.factory.pending_connections

        print_header("Test_Data_Received")
        ####################################################################
        assert self.conn.data_available is False
        yield threads.defer_to_thread(self.client_socket.send, "abcdefghijklmnopqrstuvxyz123456789")
        yield threads.defer_to_thread(data_available, self.conn)
        assert self.conn.data_get() == "abcdefghij"
        assert self.conn.data_get() == "klmnopqrst"
        assert self.conn.data_get() == "uvxyz12345"
        assert self.conn.data_get() == "6789"

        print_header("Teardown")
        self.factory.stop()
        yield threads.defer_to_thread(no_more_connections, self.factory)
コード例 #5
0
    def test_args_in_line_mode(self):
        print_header("TEST_ARGS_IN_LINE_MODE")
        print_header("Setup")
        scheduler = Scheduler_stub()
        self.factory = server_connection.ServerProtocolFactory(scheduler.trigger_loop, delimiter='end', max_length=3)
        self.factory.start('localhost', 8123)
        self.conn = None
        self.client_socket = None

        self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        yield threads.defer_to_thread(self.client_socket.connect, ('localhost', 8123))
        yield threads.defer_to_thread(connection_made, self.factory)

        _, self.conn = self.factory.accept()

        print_header("Test_Short_Line_Received")
        ####################################################################
        yield threads.defer_to_thread(self.client_socket.send, "123end")
        yield threads.defer_to_thread(data_available, self.conn)

        assert self.conn.data_get() == "123"

        print_header("Test_Long_Line_Received")
        ####################################################################
        yield threads.defer_to_thread(self.client_socket.send, "1234end")
        yield threads.defer_to_thread(data_available, self.conn)

        assert self.conn.data_get() == "1234"

        print_header("Teardown")
        self.factory.stop()
        yield threads.defer_to_thread(no_more_connections, self.factory)
コード例 #6
0
    def start(self, node, uri):
        """ Start listening and handle request on uri
        """
        self.port = int(urlparse(uri).port)
        self.host = urlparse(uri).hostname
        _log.info("Listening on: %s:%s" % (self.host, self.port))

        self.node = node

        # Set routes for requests
        self.routes = [
            (re_get_actor_doc, self.handle_get_actor_doc),
            (re_get_log, self.handle_get_log),
            (re_get_node_id, self.handle_get_node_id),
            (re_get_nodes, self.handle_get_nodes),
            (re_get_node, self.handle_get_node),
            (re_post_peer_setup, self.handle_peer_setup),
            (re_get_applications, self.handle_get_applications),
            (re_get_application, self.handle_get_application),
            (re_del_application, self.handle_del_application),
            (re_post_new_actor, self.handle_new_actor),
            (re_get_actors, self.handle_get_actors),
            (re_get_actor, self.handle_get_actor),
            (re_del_actor, self.handle_del_actor),
            (re_get_actor_report, self.handle_get_actor_report),
            (re_post_actor_migrate, self.handle_actor_migrate),
            (re_post_application_requirements, self.handle_application_requirements),
            (re_post_actor_disable, self.handle_actor_disable),
            (re_get_port, self.handle_get_port),
            (re_get_port_state, self.handle_get_port_state),
            (re_post_connect, self.handle_connect),
            (re_set_port_property, self.handle_set_port_property),
            (re_post_deploy, self.handle_deploy),
            (re_delete_node, self.handle_quit),
            (re_post_disconnect, self.handle_disconnect),
            (re_post_index, self.handle_post_index),
            (re_delete_index, self.handle_delete_index),
            (re_get_index, self.handle_get_index),
            (re_get_storage, self.handle_get_storage),
            (re_post_storage, self.handle_post_storage),
            (re_options, self.handle_options)
        ]
        self.server = server_connection.ServerProtocolFactory(self.handle_request, "http")
        self.server.start(self.host, self.port)
コード例 #7
0
    def __init__(self, tunnel):
        self.tunnel = tunnel
        self.connections = {}

        # Start a socket server on same interface as calvincontrol
        self.host = get_calvincontrol().host

        for x in range(0, 10):
            try:
                self.port = randint(5100, 5200)
                self.server = server_connection.ServerProtocolFactory(self.handle_request, "http")
                self.server.start(self.host, self.port)
                _log.info("Control proxy for %s listening on: %s:%s" % (tunnel.peer_node_id, self.host, self.port))
                break
            except:
                pass

        # Tell peer node that we a listening and on what uri
        msg = {"cmd": "started",
               "controluri": "http://" + get_calvincontrol().external_host + ":" + str(self.port)}
        self.tunnel.send(msg)
コード例 #8
0
 def __init__(self, node, mode, delimiter, max_length):
     self.connection_factory = server_connection.ServerProtocolFactory(
         node.sched.trigger_loop, mode, delimiter, max_length)
コード例 #9
0
 def __init__(self, node, mode, delimiter, max_length, actor_id=None):
     super(Server, self).__init__()
     self.connection_factory = server_connection.ServerProtocolFactory(node.sched.trigger_loop, mode,
                                                                       delimiter, max_length, actor_id)