char *test_message_size() { message m; m.type = 1; m.body = "01234567890123456789"; m.body_size = strlen(m.body); m.crc32 = 0; u_int32_t len = 0; len += sizeof(u_int8_t); len += sizeof(size_t); len += m.body_size; len += sizeof(u_int32_t); mu_assert(message_size(&m) == len, "message size should match memory layout"); return NULL; }
int main(void) { // read data (this is outside time measurements, since the data comes from anywhere and is assumed in (virtual) memory) Mapipbtest__QueryResult query_result; create_result_from_csv(&query_result, DATA_FILE, DATA_COLS, DATA_ROWS, DATA_TYPES, 1); struct snappy_env se; snappy_init_env(&se); // react on queries void *context = zmq_ctx_new(); void *socket = zmq_socket(context, ZMQ_REP); int rc; rc = zmq_bind(socket, SERVER_SOCKET); if (rc != 0) { fprintf(stderr, "Failed to bind to socket %s\n", SERVER_SOCKET); perror("Socket error "); return -1; } long s_time, c_time, req_time; struct timeval start, req_start; while (1) { gettimeofday(&req_start, NULL ); // receive request message query_msg; message_receive(socket, &query_msg); size_t query_msg_size = message_size(&query_msg); void * query_msg_data = message_data(&query_msg); if (COMPRESS) { query_msg_data = message_uncompress(query_msg_data, &query_msg_size); } Mapipbtest__ExecuteQuery * request = mapipbtest__execute_query__unpack( NULL, query_msg_size, query_msg_data); message_close(&query_msg); if (COMPRESS) { free(query_msg_data); } //printf("%s\n", request->sqlquery); //mapipbtest__execute_query__free_unpacked(request, NULL ); // send response gettimeofday(&start, NULL ); size_t query_response_msg_size = mapipbtest__query_result__get_packed_size(&query_result); void * query_response_msg_data = malloc(query_response_msg_size); mapipbtest__query_result__pack(&query_result, query_response_msg_data); s_time = end_timer_ms(&start); gettimeofday(&start, NULL ); char * free_ptr; if (COMPRESS) { free_ptr = query_response_msg_data; query_response_msg_data = message_compress(&se, query_response_msg_data, &query_response_msg_size); } c_time = end_timer_ms(&start); message_send(socket, query_response_msg_data, query_response_msg_size); //free(query_response_msg_data); req_time = end_timer_ms(&req_start); //free(query_response_msg_data); if (COMPRESS) { free(free_ptr); } } zmq_close(socket); zmq_ctx_destroy(context); return 0; }