From: Tor Didriksen Date: February 21 2011 7:52am Subject: bzr commit into mysql-trunk branch (tor.didriksen:3684) Bug#11788245 List-Archive: http://lists.mysql.com/commits/131710 X-Bug: 11788245 Message-Id: <20110221075224.A751CADE@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3188069006863247499==" --===============3188069006863247499== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/didrik/repo/trunk-thdinit-gtest/ based on revid:nirbhay.choubey@stripped 3684 Tor Didriksen 2011-02-18 Bug #11788245 - 60110 DO MORE THD AND GLOBAL INITIALIZATION FOR UNIT TESTING @ sql/mysqld.cc Let unit test setup call init_common_variables() rather than init_thread_environment() Add utility set_remaining_args() to set global variables remaining_xxx. check_enough_stack_size should have C linkage (warning by sun compiler) @ sql/mysqld.h Let unit test setup call init_common_variables() rather than init_thread_environment() Add utility set_remaining_args() to set global variables remaining_xxx. @ sql/sql_class.cc Change interface of plugin_thdvar_init() @ sql/sql_plugin.cc Change interface of plugin_thdvar_init() @ sql/sql_plugin.h Change interface of plugin_thdvar_init() @ unittest/gunit/item-t.cc More initializations in SetUpTestCase() New tests: ItemFuncSetUserVar, OutOfMemory modified: sql/mysqld.cc sql/mysqld.h sql/sql_class.cc sql/sql_plugin.cc sql/sql_plugin.h unittest/gunit/item-t.cc === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2011-02-16 17:13:30 +0000 +++ b/sql/mysqld.cc 2011-02-18 11:39:05 +0000 @@ -680,6 +680,12 @@ static char *opt_bin_logname; int orig_argc; char **orig_argv; +void set_remaining_args(int argc, char **argv) +{ + remaining_argc= argc; + remaining_argv= argv; +} + /* Since buffered_option_error_reporter is only used currently for parsing performance schema options, this code is not needed @@ -944,6 +950,7 @@ static int get_options(int *argc_ptr, ch static bool add_terminator(DYNAMIC_ARRAY *options); extern "C" my_bool mysqld_get_one_option(int, const struct my_option *, char *); static void set_server_version(void); +static int init_thread_environment(); static char *get_relative_path(const char *path); static int fix_paths(void); void handle_connections_sockets(); @@ -2887,7 +2894,8 @@ sizeof(load_default_groups)/sizeof(load_ #ifndef EMBEDDED_LIBRARY -static +namespace { +extern "C" int check_enough_stack_size() { @@ -2896,6 +2904,7 @@ check_enough_stack_size() return check_stack_overrun(current_thd, STACK_MIN_SIZE, &stack_top); } +} #endif @@ -3118,7 +3127,7 @@ rpl_make_log_name(const char *opt, } -static int init_common_variables() +int init_common_variables() { char buff[FN_REFLEN]; umask(((~my_umask) & 0666)); @@ -3567,7 +3576,7 @@ You should consider changing lower_case_ } -int init_thread_environment() +static int init_thread_environment() { mysql_mutex_init(key_LOCK_thread_count, &LOCK_thread_count, MY_MUTEX_INIT_FAST); mysql_mutex_init(key_LOCK_status, &LOCK_status, MY_MUTEX_INIT_FAST); === modified file 'sql/mysqld.h' --- a/sql/mysqld.h 2011-02-01 07:52:46 +0000 +++ b/sql/mysqld.h 2011-02-18 11:39:05 +0000 @@ -72,7 +72,10 @@ bool one_thread_per_connection_end(THD * void flush_thread_cache(); void refresh_status(THD *thd); bool is_secure_file_path(char *path); -int init_thread_environment(); + +// These are needed for unit testing. +void set_remaining_args(int argc, char **argv); +int init_common_variables(); extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *system_charset_info; extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *files_charset_info ; === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2011-02-03 10:13:06 +0000 +++ b/sql/sql_class.cc 2011-02-18 11:39:05 +0000 @@ -929,8 +929,7 @@ extern "C" THD *_current_thd_noinline( void THD::init(void) { mysql_mutex_lock(&LOCK_global_system_variables); - if (m_enable_plugins) - plugin_thdvar_init(this); + plugin_thdvar_init(this, m_enable_plugins); /* variables= global_system_variables above has reset variables.pseudo_thread_id to 0. We need to correct it here to === modified file 'sql/sql_plugin.cc' --- a/sql/sql_plugin.cc 2011-02-01 07:52:46 +0000 +++ b/sql/sql_plugin.cc 2011-02-18 11:39:05 +0000 @@ -2599,7 +2599,7 @@ static char **mysql_sys_var_str(THD* thd return (char **) intern_sys_var_ptr(thd, offset, true); } -void plugin_thdvar_init(THD *thd) +void plugin_thdvar_init(THD *thd, bool enable_plugins) { plugin_ref old_table_plugin= thd->variables.table_plugin; DBUG_ENTER("plugin_thdvar_init"); @@ -2615,11 +2615,14 @@ void plugin_thdvar_init(THD *thd) thd->variables.dynamic_variables_size= 0; thd->variables.dynamic_variables_ptr= 0; - mysql_mutex_lock(&LOCK_plugin); - thd->variables.table_plugin= - my_intern_plugin_lock(NULL, global_system_variables.table_plugin); - intern_plugin_unlock(NULL, old_table_plugin); - mysql_mutex_unlock(&LOCK_plugin); + if (enable_plugins) + { + mysql_mutex_lock(&LOCK_plugin); + thd->variables.table_plugin= + my_intern_plugin_lock(NULL, global_system_variables.table_plugin); + intern_plugin_unlock(NULL, old_table_plugin); + mysql_mutex_unlock(&LOCK_plugin); + } DBUG_VOID_RETURN; } === modified file 'sql/sql_plugin.h' --- a/sql/sql_plugin.h 2010-12-21 15:27:40 +0000 +++ b/sql/sql_plugin.h 2011-02-18 11:39:05 +0000 @@ -152,7 +152,7 @@ extern bool mysql_install_plugin(THD *th const LEX_STRING *dl); extern bool mysql_uninstall_plugin(THD *thd, const LEX_STRING *name); extern bool plugin_register_builtin(struct st_mysql_plugin *plugin); -extern void plugin_thdvar_init(THD *thd); +extern void plugin_thdvar_init(THD *thd, bool enable_plugins); extern void plugin_thdvar_cleanup(THD *thd); extern SHOW_COMP_OPTION plugin_status(const char *name, int len, size_t type); extern bool check_valid_path(const char *path, size_t length); === modified file 'unittest/gunit/item-t.cc' --- a/unittest/gunit/item-t.cc 2011-02-07 13:03:47 +0000 +++ b/unittest/gunit/item-t.cc 2011-02-18 11:39:05 +0000 @@ -1,6 +1,5 @@ /* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. @@ -36,7 +35,10 @@ protected: */ static void SetUpTestCase() { - init_thread_environment(); + static char *my_name= strdup(my_progname); + char *argv[] = { my_name, 0 }; + set_remaining_args(1, argv); + init_common_variables(); randominit(&sql_rand, 0, 0); xid_cache_init(); delegates_init(); @@ -94,6 +96,9 @@ public: EXPECT_EQ(1, m_store_called); } + // Avoid warning about hiding other overloaded versions of store(). + using Field_long::store; + /* This is the only member function we need to override. We expect it to be called with specific arguments. @@ -183,4 +188,55 @@ TEST_F(ItemTest, ItemFuncDesDecrypt) EXPECT_LE(item_decrypt->max_length, length); } + +/* + This is not an exhaustive test. It simply demonstrates that more of the + initializations in mysqld.cc are needed for testing Item_xxx classes. +*/ +TEST_F(ItemTest, ItemFuncSetUserVar) +{ + const longlong val1= 1; + Item_decimal *item_dec= new Item_decimal(val1, false); + Item_string *item_str= new Item_string("1", 1, &my_charset_latin1); + + LEX_STRING var_name= { C_STRING_WITH_LEN("a") }; + Item_func_set_user_var *user_var= + new Item_func_set_user_var(var_name, item_str); + EXPECT_FALSE(user_var->set_entry(m_thd, true)); + EXPECT_FALSE(user_var->fix_fields(m_thd, NULL)); + EXPECT_EQ(val1, user_var->val_int()); + + my_decimal decimal; + my_decimal *decval_1= user_var->val_decimal(&decimal); + user_var->save_item_result(item_str); + my_decimal *decval_2= user_var->val_decimal(&decimal); + user_var->save_item_result(item_dec); + + EXPECT_EQ(decval_1, decval_2); + EXPECT_EQ(decval_1, &decimal); +} + + +// Test of Item::operator new() when we simulate out-of-memory. +TEST_F(ItemTest, OutOfMemory) +{ + Item_int *null_item= NULL; + Item_int *item= new Item_int(42); + EXPECT_NE(null_item, item); + delete null_item; + +#if !defined(DBUG_OFF) + // Setting debug flags triggers enter/exit trace, so redirect to /dev/null. + DBUG_SET("o," IF_WIN("NUL", "/dev/null")); + + DBUG_SET("+d,simulate_out_of_memory"); + item= new Item_int(42); + EXPECT_EQ(null_item, item); + + DBUG_SET("+d,simulate_out_of_memory"); + item= new (m_thd->mem_root) Item_int(42); + EXPECT_EQ(null_item, item); +#endif +} + } --===============3188069006863247499== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/tor.didriksen@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: tor.didriksen@stripped\ # n5m9rxegrigunc8o # target_branch: file:///export/home/didrik/repo/trunk-thdinit-gtest/ # testament_sha1: 9cb05c6cece6fcd00ef1bdb79842a85de814602d # timestamp: 2011-02-21 08:52:24 +0100 # base_revision_id: nirbhay.choubey@stripped\ # hcjugk2kh0qyo5je # # Begin bundle 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 --===============3188069006863247499==--