efl/src/tests/eet/eet_test_connection.c

147 lines
4.1 KiB
C

#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <Eina.h>
#include <Eet.h>
#include "eet_suite.h"
#include "eet_test_common.h"
typedef struct _Eet_Connection_Data Eet_Connection_Data;
struct _Eet_Connection_Data
{
Eet_Connection *conn;
Eet_Data_Descriptor *edd;
Eina_Bool test;
};
static Eina_Bool
_eet_connection_read(const void *eet_data,
size_t size,
void *user_data)
{
Eet_Connection_Data *dt = user_data;
Eet_Test_Ex_Type *result;
Eet_Node *node;
int test;
result = eet_data_descriptor_decode(dt->edd, eet_data, size);
node = eet_data_node_decode_cipher(eet_data, NULL, size);
/* Test the resulting data. */
fail_if(!node);
fail_if(eet_test_ex_check(result, 0, _dump_call) != 0);
fail_if(eet_test_ex_check(eina_list_data_get(result->list), 1, _dump_call) != 0);
fail_if(eina_list_data_get(result->ilist) == NULL);
fail_if(*((int *)eina_list_data_get(result->ilist)) != 42);
fail_if(eina_list_data_get(result->slist) == NULL);
fail_if(strcmp(eina_list_data_get(result->slist), "test") != 0);
fail_if(eina_hash_find(result->shash, EET_TEST_KEY1) == NULL);
fail_if(strcmp(eina_hash_find(result->shash, EET_TEST_KEY1), "test") != 0);
fail_if(strcmp(result->charray[0], "test") != 0);
test = 0;
if (result->hash)
eina_hash_foreach(result->hash, func, &test);
fail_if(test != 0);
if (result->ihash)
eina_hash_foreach(result->ihash, func7, &test);
fail_if(test != 0);
if (!dt->test)
{
dt->test = EINA_TRUE;
_dump_call = EINA_TRUE;
fail_if(!eet_connection_node_send(dt->conn, node, NULL));
_dump_call = EINA_FALSE;
}
return EINA_TRUE;
}
static Eina_Bool
_eet_connection_write(const void *data,
size_t size,
void *user_data)
{
Eet_Connection_Data *dt = user_data;
int still;
if (!dt->test)
{
int step = size / 3;
eet_connection_received(dt->conn, data, step);
eet_connection_received(dt->conn, (char *)data + step, step);
size -= 2 * step;
still = eet_connection_received(dt->conn, (char *)data + 2 * step, size);
}
else
still = eet_connection_received(dt->conn, data, size);
fail_if(still);
return EINA_TRUE;
}
EFL_START_TEST(eet_test_connection_check)
{
Eet_Data_Descriptor *edd;
Eet_Data_Descriptor_Class eddc;
Eet_Connection_Data ecd;
Eet_Test_Ex_Type etbt;
Eina_Bool on_going;
eet_test_ex_set(&etbt, 0);
etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
etbt.list = eina_list_prepend(etbt.list, eet_test_ex_set(NULL, 1));
etbt.hash = eina_hash_string_superfast_new(NULL);
eina_hash_add(etbt.hash, EET_TEST_KEY1, eet_test_ex_set(NULL, 2));
eina_hash_add(etbt.hash, EET_TEST_KEY2, eet_test_ex_set(NULL, 2));
etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
etbt.ilist = eina_list_prepend(etbt.ilist, &i42);
etbt.ihash = eina_hash_string_superfast_new(NULL);
eina_hash_add(etbt.ihash, EET_TEST_KEY1, &i7);
eina_hash_add(etbt.ihash, EET_TEST_KEY2, &i7);
etbt.slist = eina_list_prepend(NULL, "test");
etbt.shash = eina_hash_string_superfast_new(NULL);
eina_hash_add(etbt.shash, EET_TEST_KEY1, "test");
memset(&etbt.charray, 0, sizeof(etbt.charray));
etbt.charray[0] = "test";
eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc),
"Eet_Test_Ex_Type",
sizeof(Eet_Test_Ex_Type));
edd = eet_data_descriptor_stream_new(&eddc);
fail_if(!edd);
eet_build_ex_descriptor(edd, EINA_TRUE);
/* Init context. */
ecd.test = EINA_FALSE;
ecd.edd = edd;
/* Create a connection. */
ecd.conn = eet_connection_new(_eet_connection_read, _eet_connection_write, &ecd);
fail_if(!ecd.conn);
/* Test the connection. */
fail_if(!eet_connection_send(ecd.conn, edd, &etbt, NULL));
fail_if(!ecd.test);
fail_if(!eet_connection_close(ecd.conn, &on_going));
fail_if(on_going);
}
EFL_END_TEST
void eet_test_connection(TCase *tc)
{
tcase_add_test(tc, eet_test_connection_check);
}