def test_send_array(self):
        arrays = [
            np.random.rand(7, 1),
            np.random.rand(10, 2),
            np.random.rand(10, 2, 4),
            np.random.rand(10, 1, 3),
            np.random.rand(10, 4, 3, 1),
        ]
        server = SimpleServer(('127.0.0.1', 0), )
        server.start()
        client = Socket(
            socket.create_connection(('127.0.0.1', server.server_port)))
        sleep(0.1)
        server_socket = Socket(server.do_read()[0])
        for array in arrays:
            server_socket.send_array(array)

            data_type = client.get_string()
            data_len = client.get_int()
            shape_len = client.get_int()
            shape = []
            for ind in range(shape_len):
                shape.append(client.get_int())
            data_bytes = client.check_received_length(data_len)

            data = np.frombuffer(data_bytes, dtype=data_type)
            data = data.reshape(tuple(shape))
            assert np.all(data == array)
        client.close()
        server.stop()
    def test_get_scalar(self):
        scalars = [15489, 2.4589]
        server = SimpleServer(('127.0.0.1', 0), )
        server.start()
        client = Socket(
            socket.create_connection(('127.0.0.1', server.server_port)))
        sleep(0.1)
        server_socket = Socket(server.do_read()[0])

        for scalar in scalars:
            server_socket.send_scalar(scalar)
            assert client.get_scalar() == scalar
        client.close()
        server.stop()
    def test_send_another_list(self):
        listing = [
            'another list that should raise an exception because there is a boolean that is not a valid type',
            [
                'gg',
            ],
        ]
        server = SimpleServer(('127.0.0.1', 0), )
        server.start()
        client = Socket(
            socket.create_connection(('127.0.0.1', server.server_port)))
        sleep(0.1)
        server_socket = Socket(server.do_read()[0])
        with pytest.raises(TypeError):
            assert server_socket.send_list(listing)

        server.stop()
    def test_send_scalar(self):
        scalars = [15489, 2.4589]

        server = SimpleServer(('127.0.0.1', 0), )
        server.start()
        client = Socket(
            socket.create_connection(('127.0.0.1', server.server_port)))
        sleep(0.1)
        server_socket = Socket(server.do_read()[0])

        for scalar in scalars:
            server_socket.send_scalar(scalar)
            data_type = client.get_string()
            data_len = client.get_int()
            data_bytes = client.check_received_length(data_len)
            data = np.frombuffer(data_bytes, dtype=data_type)[0]
            assert data == scalar
        client.close()
        server.stop()
    def test_get_array(self):
        arrays = [
            np.random.rand(7, 1),
            np.random.rand(10, 2),
            np.random.rand(10, 2, 4),
            np.random.rand(10, 1, 3),
            np.random.rand(10, 4, 3, 1),
        ]
        server = SimpleServer(('127.0.0.1', 0), )
        server.start()
        client = Socket(
            socket.create_connection(('127.0.0.1', server.server_port)))
        server_socket = Socket(server.do_read()[0])
        for array in arrays:
            server_socket.send_array(array)

            data = client.get_array()
            assert np.all(data == array)
        client.close()
        server.stop()
    def test_methods(self, qtbot):
        server = SimpleServer(('127.0.0.1', 6341), )
        server.start()

        params = [{
            'title': 'Device index:',
            'name': 'device',
            'type': 'int',
            'value': 0,
            'max': 3,
            'min': 0
        }, {
            'title': 'Infos:',
            'name': 'infos',
            'type': 'str',
            'value': "one_info",
            'readonly': True
        }, {
            'title':
            'Line Settings:',
            'name':
            'line_settings',
            'type':
            'group',
            'expanded':
            False,
            'children': [
                {
                    'name': 'someparam',
                    'type': 'float',
                    'value': 15.54,
                    'readonly': True
                },
            ]
        }]
        param = Parameter.create(name='settings',
                                 type='group',
                                 children=params)
        client = TCPClient(ipaddress="127.0.0.1",
                           port=6341,
                           params_state=param.saveState(),
                           client_type="sometype")
        client.cmd_signal.connect(self.get_cmd_signal)

        #check init method
        assert client.ipaddress == "127.0.0.1"
        assert client.port == 6341
        assert client.client_type == 'sometype'

        client.socket = Socket(
            native_socket.socket(socket.AF_INET, socket.SOCK_STREAM))
        client.socket.connect((client.ipaddress, client.port))
        sleep(0.5)
        server_socket = Socket(server.do_read()[0])

        client.send_data([np.array([0, 1, 2, 3]), 'item', 5.1])
        assert server_socket.get_string() == 'Done'
        utils.check_vals_in_iterable(server_socket.get_list(),
                                     [np.array([0, 1, 2, 3]), 'item', 5.1])

        client.send_infos_xml(custom_tree.parameter_to_xml_string(param))
        assert server_socket.get_string() == 'Infos'
        assert server_socket.get_string(
        ) == custom_tree.parameter_to_xml_string(param).decode()

        client.send_info_string('someinfo', 'this is an info')
        assert server_socket.get_string() == 'Info'
        assert server_socket.get_string() == 'someinfo'
        assert server_socket.get_string() == 'this is an info'

        #test queue_command
        client.cmd_signal.connect(self.get_cmd_signal)
        client_manager = ClientObjectManager()
        client_manager.cmd_signal.connect(client.queue_command)

        with pytest.raises(Exception):
            client.queue_command(utils.ThreadCommand('Weird command'))

        #test get_data
        server_socket.send_string('set_info')
        server_socket.send_list(['line_settings', 'someparam'])
        server_socket.send_string(
            custom_tree.parameter_to_xml_string(
                param.child('line_settings', 'someparam')))

        msg = client.socket.get_string()
        client.get_data(msg)
        assert self.command == 'set_info'
        utils.check_vals_in_iterable(
            self.attributes,
            [['line_settings', 'someparam'],
             custom_tree.parameter_to_xml_string(
                 param.child('line_settings', 'someparam')).decode()])

        server_socket.send_string('move_abs')
        server_socket.send_scalar(12.546)

        msg = client.socket.get_string()
        client.get_data(msg)
        assert self.command == 'move_abs'
        utils.check_vals_in_iterable(self.attributes, [12.546])

        server_socket.send_string('move_rel')
        server_socket.send_scalar(3.2)

        msg = client.socket.get_string()
        client.get_data(msg)
        assert self.command == 'move_rel'
        utils.check_vals_in_iterable(self.attributes, [3.2])

        server.stop()