Ejemplo n.º 1
0
def start_accept(server):
    """start server in ip and port"""
    sock, address = server.accept()
    sock_fd = sock.makefile('rw')

    # receive data or command
    data = recv_data(sock_fd)

    # sent the same data or command
    send_data(sock_fd, data)
    sock_fd.close()
Ejemplo n.º 2
0
    def _send_chunk_to_ds(self, chunk_id, chunk_data, ds_id):
        packet = AddChunkPacket(chunk_id, len(chunk_data))
        msg = packet.get_message()
        sock = self._get_sockfd_to_ds(
            ds_id.split(':')[0], int(ds_id.split(':')[1]))
        send_command(sock, msg)

        # sending data
        send_data(sock, chunk_data)
        recv = recv_command(sock)
        logging.info('send chunk to ds recv: %s', recv)
        sock.close()
        return recv['state']
Ejemplo n.º 3
0
    def _handle_get_chunk(self, filed, args):
        """handle client -> ds get chunk requst, and response"""
        logging.info('handle get chunk request')

        chunk_id = args['chunk_id']
        total = args['total']
        lists = args['list']
        logging.info('get chunk: %s', chunk_id)

        # get data from local filesystem
        state, data = self._ds.read_chunk(chunk_id, total, lists)
        logging.info('read chunk return: %d', state)

        # reply state
        reply = GetChunkReplyPacket(state)
        msg = reply.get_message()
        logging.info("get chunk return: %s", msg)
        send_command(filed, msg)

        # reply data
        if isinstance(data, list):
            data = b''.join(data)
        send_data(filed, data)
Ejemplo n.º 4
0
    def _handle_get_chunk(self, filed, args):
        """handle client -> ds get chunk requst, and response"""
        logging.info('handle get chunk request')

        chunk_id = args['chunk_id']
        total = args['total']
        lists = args['list']
        logging.info('get chunk: %s', chunk_id)

        # get data from local filesystem
        state, data = self._ds.read_chunk(chunk_id, total, lists)
        logging.info('read chunk return: %d', state)

        # reply state
        reply = GetChunkReplyPacket(state)
        msg = reply.get_message()
        logging.info("get chunk return: %s", msg)
        send_command(filed, msg)

        # reply data
        if isinstance(data, list):
            data = b''.join(data)
        send_data(filed, data)
Ejemplo n.º 5
0
def test_data():
    """test send and recv data"""
    ip = '127.0.0.1'
    port = 8899
    data = 'data'

    # start server to receive data
    print 'start server'
    server = eventlet.listen((ip, port))
    POOL.spawn_n(start_accept, server)

    # connect to server
    print 'start connect'
    client = eventlet.connect((ip, port))
    client_fd = client.makefile('rw')

    # send data
    send_data(client_fd, data)

    # receive response(same with send data)
    response = recv_data(client_fd)

    # check response
    eq_(response, data)
Ejemplo n.º 6
0
def test_ds():
    """test function: add_chunk(chunk_id, chunk_length, chunk_data)"""
    # start the sever to receive command
    # get config options
    config = configparser.ConfigParser()
    config.read(DS_CONFIG_FILE)
    config.set('storage', 'chunk_store_dir', './bin/storage/')

    # start server
    ds_ = DSServer(config, test=True)
    POOL.spawn_n(start_server, ds_)

    # test add chunk
    chunk_id = 'obj0_chk0'
    length = DATA_LENGTH
    data = os.urandom(length)  # generate test data of length size

    packet = AddChunkPacket(chunk_id, length)
    msg = packet.get_message()

    sock = get_new_connection()
    sock_fd = sock.makefile('rw')

    logging.info('%s', msg)
    send_command(sock_fd, msg)

    # sending data
    send_data(sock_fd, data)

    recv = recv_command(sock_fd)
    print recv
    logging.info('recv: %s', recv)
    sock_fd.close()
    eq_(recv['state'], RET_SUCCESS)
    eq_(recv['method'], OP_ADD_CHUNK_REPLY)

    # test get chunk
    """test function: get_chunk(chunk_id, total_blocks, block_list)"""
    chunk_id = 'obj0_chk0'
    total_blocks = 10
    block_list = [0, 1, 2, 3, 4]

    packet = GetChunkPacket(chunk_id, total_blocks, block_list)
    msg = packet.get_message()

    sock = get_new_connection()
    sock_fd = sock.makefile('rw')

    logging.info('%s', msg)
    send_command(sock_fd, msg)

    recv = recv_command(sock_fd)
    print recv
    logging.info('recv: %s', recv)
    eq_(recv['state'], RET_SUCCESS)
    eq_(recv['method'], OP_GET_CHUNK_REPLY)

    # recieve data
    get_data = recv_data(sock_fd)
    eq_(get_data, data[:length/2])

    # test delete chunk
    """test function: delete_chunk(chunk_id)"""
    chunk_id = 'obj0_chk0'

    packet = DeleteChunkPacket(chunk_id)
    msg = packet.get_message()

    sock = get_new_connection()
    sock_fd = sock.makefile()

    logging.info('%s', msg)
    send_command(sock_fd, msg)

    recv = recv_command(sock_fd)
    print recv
    logging.info('recv: %s', recv)
    eq_(recv['state'], RET_SUCCESS)
    eq_(recv['method'], OP_DELETE_CHUNK_REPLY)
Ejemplo n.º 7
0
def test_ds():
    """test function: add_chunk(chunk_id, chunk_length, chunk_data)"""
    # start the sever to receive command
    # get config options
    config = configparser.ConfigParser()
    config.read(DS_CONFIG_FILE)
    config.set('storage', 'chunk_store_dir', './bin/storage/')

    # start server
    ds_ = DSServer(config, test=True)
    POOL.spawn_n(start_server, ds_)

    # test add chunk
    chunk_id = 'obj0_chk0'
    length = DATA_LENGTH
    data = os.urandom(length)  # generate test data of length size

    packet = AddChunkPacket(chunk_id, length)
    msg = packet.get_message()

    sock = get_new_connection()
    sock_fd = sock.makefile('rw')

    logging.info('%s', msg)
    send_command(sock_fd, msg)

    # sending data
    send_data(sock_fd, data)

    recv = recv_command(sock_fd)
    print recv
    logging.info('recv: %s', recv)
    sock_fd.close()
    eq_(recv['state'], RET_SUCCESS)
    eq_(recv['method'], OP_ADD_CHUNK_REPLY)

    # test get chunk
    """test function: get_chunk(chunk_id, total_blocks, block_list)"""
    chunk_id = 'obj0_chk0'
    total_blocks = 10
    block_list = [0, 1, 2, 3, 4]

    packet = GetChunkPacket(chunk_id, total_blocks, block_list)
    msg = packet.get_message()

    sock = get_new_connection()
    sock_fd = sock.makefile('rw')

    logging.info('%s', msg)
    send_command(sock_fd, msg)

    recv = recv_command(sock_fd)
    print recv
    logging.info('recv: %s', recv)
    eq_(recv['state'], RET_SUCCESS)
    eq_(recv['method'], OP_GET_CHUNK_REPLY)

    # recieve data
    get_data = recv_data(sock_fd)
    eq_(get_data, data[:length / 2])

    # test delete chunk
    """test function: delete_chunk(chunk_id)"""
    chunk_id = 'obj0_chk0'

    packet = DeleteChunkPacket(chunk_id)
    msg = packet.get_message()

    sock = get_new_connection()
    sock_fd = sock.makefile()

    logging.info('%s', msg)
    send_command(sock_fd, msg)

    recv = recv_command(sock_fd)
    print recv
    logging.info('recv: %s', recv)
    eq_(recv['state'], RET_SUCCESS)
    eq_(recv['method'], OP_DELETE_CHUNK_REPLY)