static int lua_proto_get_masterinfo_string (lua_State *L) { size_t packet_len; const char *packet_str = luaL_checklstring(L, 1, &packet_len); network_mysqld_masterinfo_t *info; network_packet packet; GString s; int err = 0; s.str = (char *)packet_str; s.len = packet_len; packet.data = &s; packet.offset = 0; info = network_mysqld_masterinfo_new(); err = err || network_mysqld_masterinfo_get(&packet, info); if (err) { network_mysqld_masterinfo_free(info); luaL_error(L, "%s: network_mysqld_masterinfo_get() failed", G_STRLOC); return 0; } lua_newtable(L); LUA_EXPORT_INT(info, master_lines); LUA_EXPORT_STR(info, master_log_file); LUA_EXPORT_INT(info, master_log_pos); LUA_EXPORT_STR(info, master_host); LUA_EXPORT_STR(info, master_user); LUA_EXPORT_STR(info, master_password); LUA_EXPORT_INT(info, master_port); LUA_EXPORT_INT(info, master_connect_retry); LUA_EXPORT_INT(info, master_ssl); LUA_EXPORT_STR(info, master_ssl_ca); LUA_EXPORT_STR(info, master_ssl_capath); LUA_EXPORT_STR(info, master_ssl_cert); LUA_EXPORT_STR(info, master_ssl_cipher); LUA_EXPORT_STR(info, master_ssl_key); if (info->master_lines >= 15) { LUA_EXPORT_INT(info, master_ssl_verify_server_cert); } network_mysqld_masterinfo_free(info); return 1; }
static int lua_proto_append_masterinfo_string (lua_State *L) { GString *packet; network_mysqld_masterinfo_t *info; luaL_checktype(L, 1, LUA_TTABLE); info = network_mysqld_masterinfo_new(); LUA_IMPORT_INT(info, master_lines); LUA_IMPORT_STR(info, master_log_file); LUA_IMPORT_INT(info, master_log_pos); LUA_IMPORT_STR(info, master_host); LUA_IMPORT_STR(info, master_user); LUA_IMPORT_STR(info, master_password); LUA_IMPORT_INT(info, master_port); LUA_IMPORT_INT(info, master_connect_retry); LUA_IMPORT_INT(info, master_ssl); LUA_IMPORT_STR(info, master_ssl_ca); LUA_IMPORT_STR(info, master_ssl_capath); LUA_IMPORT_STR(info, master_ssl_cert); LUA_IMPORT_STR(info, master_ssl_cipher); LUA_IMPORT_STR(info, master_ssl_key); LUA_IMPORT_INT(info, master_ssl_verify_server_cert); packet = g_string_new(NULL); network_mysqld_masterinfo_append(packet, info); network_mysqld_masterinfo_free(info); lua_pushlstring(L, S(packet)); g_string_free(packet, TRUE); return 1; }
/** * @test check that network_mysqld_masterinfo_new() returns non-NULL * and that network_mysqld_masterinfo_free() doesn't crash */ void t_masterinfo_new(void) { network_mysqld_masterinfo_t *info; info = network_mysqld_masterinfo_new(); g_assert(info); network_mysqld_masterinfo_free(info); }
/** * @test * network_mysqld_masterinfo_get() can decode a protocol string and * network_mysqld_masterinfo_append() can encode the internal structure and * turns it back into the orignal string */ void t_masterinfo_get(void) { #define PACKET "15\nhostname-bin.000024\n2143897\n127.0.0.1\nroot\n123\n3306\n60\n0\n\n\n\n\n\n0\n" network_mysqld_masterinfo_t *info; network_packet *packet; GString *s; info = network_mysqld_masterinfo_new(); g_assert(info); packet = network_packet_new(); packet->data = g_string_new_len(C(PACKET)); packet->offset = 0; g_assert_cmpint(network_mysqld_masterinfo_get(packet, info), !=, -1); g_assert_cmpstr(info->master_log_file->str, ==, "hostname-bin.000024"); g_assert_cmpint(info->master_log_pos, ==, 2143897); g_assert_cmpstr(info->master_host->str, ==, "127.0.0.1"); g_assert_cmpstr(info->master_user->str, ==, "root"); g_assert_cmpstr(info->master_password->str, ==, "123"); g_assert_cmpint(info->master_port, ==, 3306); g_assert_cmpint(info->master_connect_retry, ==, 60); g_assert_cmpint(info->master_ssl, ==, 0); /* is disabled */ g_assert_cmpint(info->master_ssl_verify_server_cert, ==, 0); s = g_string_new(NULL); g_assert_cmpint(network_mysqld_masterinfo_append(s, info), ==, 0); g_assert_cmpint(s->len, ==, sizeof(PACKET) - 1); g_assert_cmpint(TRUE, ==, g_memeq(S(s), C(PACKET))); g_string_free(s, TRUE); g_string_free(packet->data, TRUE); network_packet_free(packet); network_mysqld_masterinfo_free(info); }