@ -209,6 +209,7 @@ sub check_timeout { return $opt_testcase_timeout * 6; }; 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					my  $ opt_start ;  
			
		
	
		
			
				
					my  $ opt_start_dirty ;  
			
		
	
		
			
				
					my  $ start_only ;  
			
		
	
		
			
				
					my  $ opt_wait_all ;  
			
		
	
		
			
				
					my  $ opt_repeat =  1 ;  
			
		
	
		
			
				
					my  $ opt_retry =  3 ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -984,6 +985,9 @@ sub command_line_setup { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  if  (  $ opt_experimental  )  
			
		
	
		
			
				
					  {  
			
		
	
		
			
				
					    # $^O on Windows considered not generic enough  
			
		
	
		
			
				
					    my  $ plat =  ( IS_WINDOWS )  ?  'windows'  :  $^O ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    # read the list of experimental test cases from the file specified on  
			
		
	
		
			
				
					    # the command line  
			
		
	
		
			
				
					    open ( FILE ,  "<" ,  $ opt_experimental )  or  mtr_error ( "Can't read experimental file: $opt_experimental" ) ;  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -994,6 +998,15 @@ sub command_line_setup { 
			
		
	
		
			
				
					      # remove comments (# foo) at the beginning of the line, or after a   
			
		
	
		
			
				
					      # blank at the end of the line  
			
		
	
		
			
				
					      s/( +|^)#.*$// ;  
			
		
	
		
			
				
					      # If @ platform specifier given, use this entry only if it contains  
			
		
	
		
			
				
					      # @<platform> or @!<xxx> where xxx != platform  
			
		
	
		
			
				
					      if  ( /\@.*/ )  
			
		
	
		
			
				
					      {  
			
		
	
		
			
				
						next  if  ( /\@!$plat/ ) ;  
			
		
	
		
			
				
						next  unless  ( /\@$plat/  or  /\@!/ ) ;  
			
		
	
		
			
				
						# Then remove @ and everything after it  
			
		
	
		
			
				
						s/\@.*$// ;  
			
		
	
		
			
				
					      }  
			
		
	
		
			
				
					      # remove whitespace  
			
		
	
		
			
				
					      s/^ +// ;                
			
		
	
		
			
				
					      s/ +$// ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1241,13 +1254,28 @@ sub command_line_setup { 
			
		
	
		
			
				
					    {  
			
		
	
		
			
				
					      mtr_error ( "Can't use --extern when using debugger" ) ;  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					    # Set one week timeout (check-testcase timeout will be 1/10th)  
			
		
	
		
			
				
					    $ opt_testcase_timeout =  7  *  24  *  60 ;  
			
		
	
		
			
				
					    $ opt_suite_timeout =  7  *  24  *  60 ;  
			
		
	
		
			
				
					    # One day to shutdown  
			
		
	
		
			
				
					    $ opt_shutdown_timeout =  24  *  60 ;  
			
		
	
		
			
				
					    # One day for PID file creation (this is given in seconds not minutes)  
			
		
	
		
			
				
					    $ opt_start_timeout =  24  *  60  *  60 ;  
			
		
	
		
			
				
					  }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  # --------------------------------------------------------------------------  
			
		
	
		
			
				
					  # Modified behavior with --start options  
			
		
	
		
			
				
					  # --------------------------------------------------------------------------  
			
		
	
		
			
				
					  if  ( $ opt_start  or  $ opt_start_dirty )  {  
			
		
	
		
			
				
					    collect_option  ( 'quick-collect' ,  1 ) ;  
			
		
	
		
			
				
					    $ start_only =  1 ;  
			
		
	
		
			
				
					  }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  # --------------------------------------------------------------------------  
			
		
	
		
			
				
					  # Check use of wait-all  
			
		
	
		
			
				
					  # --------------------------------------------------------------------------  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  if  ( $ opt_wait_all  &&  !  ( $ opt_start_dirty  ||  $ opt_start ) )  
			
		
	
		
			
				
					  if  ( $ opt_wait_all  &&  !  $ start_only )  
			
		
	
		
			
				
					  {  
			
		
	
		
			
				
					    mtr_error ( "--wait-all can only be used with --start or --start-dirty" ) ;  
			
		
	
		
			
				
					  }  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1506,6 +1534,10 @@ sub collect_mysqld_features_from_running_server () 
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					  }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  # "Convert" innodb flag  
			
		
	
		
			
				
					  $ mysqld_variables { 'innodb' } =  "ON"  
			
		
	
		
			
				
					    if  ( $ mysqld_variables { 'have_innodb' }  eq  "YES" ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  # Parse version  
			
		
	
		
			
				
					  my  $ version_str =  $ mysqld_variables { 'version' } ;  
			
		
	
		
			
				
					  if  (  $ version_str  =~  /^([0-9]*)\.([0-9]*)\.([0-9]*)/  )  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -1772,7 +1804,8 @@ sub environment_setup { 
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					    my  $ lib_example_plugin =  
			
		
	
		
			
				
					      mtr_file_exists ( vs_config_dirs ( 'storage/example' , $ plugin_filename ) ,  
			
		
	
		
			
				
							      "$basedir/storage/example/.libs/" . $ plugin_filename ) ;  
			
		
	
		
			
				
							      "$basedir/storage/example/.libs/" . $ plugin_filename ,  
			
		
	
		
			
				
					                      "$basedir/lib/mysql/plugin/" . $ plugin_filename ) ;  
			
		
	
		
			
				
					    $ ENV { 'EXAMPLE_PLUGIN' } =  
			
		
	
		
			
				
					      ( $ lib_example_plugin  ?  basename ( $ lib_example_plugin )  :  "" ) ;  
			
		
	
		
			
				
					    $ ENV { 'EXAMPLE_PLUGIN_OPT' } =  "--plugin-dir=" .  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -2819,7 +2852,7 @@ sub run_testcase_check_skip_test($) 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  if  (  $ tinfo - > { 'skip' }  )  
			
		
	
		
			
				
					  {  
			
		
	
		
			
				
					    mtr_report_test_skipped ( $ tinfo ) ;  
			
		
	
		
			
				
					    mtr_report_test_skipped ( $ tinfo )  unless  $ start_only  ;  
			
		
	
		
			
				
					    return  1 ;  
			
		
	
		
			
				
					  }  
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -3306,9 +3339,16 @@ sub run_testcase ($) { 
			
		
	
		
			
				
					  # server exits  
			
		
	
		
			
				
					  # ----------------------------------------------------------------------  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  if  (  $ opt_start  or  $ opt_start_dirt y)  
			
		
	
		
			
				
					  if  (  $ start_onl y)  
			
		
	
		
			
				
					  {  
			
		
	
		
			
				
					    mtr_print ( "\nStarted" ,  started ( all_servers ( ) ) ) ;  
			
		
	
		
			
				
					    mtr_print ( "Using config for test" ,  $ tinfo - > { name } ) ;  
			
		
	
		
			
				
					    mtr_print ( "Port and socket path for server(s):" ) ;  
			
		
	
		
			
				
					    foreach  my  $ mysqld  (  mysqlds ( )  )  
			
		
	
		
			
				
					    {  
			
		
	
		
			
				
					      mtr_print  ( $ mysqld - > name ( )  .  "  "  .  $ mysqld - > value ( 'port' )  .  
			
		
	
		
			
				
						      "  "  .  $ mysqld - > value ( 'socket' ) ) ;  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					    mtr_print ( "Waiting for server(s) to exit..." ) ;  
			
		
	
		
			
				
					    if  (  $ opt_wait_all  )  {  
			
		
	
		
			
				
					      My::SafeProcess - > wait_all ( ) ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -3550,8 +3590,8 @@ sub run_testcase ($) { 
			
		
	
		
			
				
					# error log and write all lines that look  
			
		
	
		
			
				
					# suspicious into $error_log.warnings  
			
		
	
		
			
				
					#  
			
		
	
		
			
				
					sub  extract_warning_lines  ($)  {  
			
		
	
		
			
				
					  my  ( $ error_log )  =  @ _ ;  
			
		
	
		
			
				
					sub  extract_warning_lines  ($$ )  {  
			
		
	
		
			
				
					  my  ( $ error_log ,  $ tname )  =  @ _ ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  # Open the servers .err log file and read all lines  
			
		
	
		
			
				
					  # belonging to current tets into @lines  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -3559,15 +3599,28 @@ sub extract_warning_lines ($) { 
			
		
	
		
			
				
					    or  mtr_error ( "Could not open file '$error_log' for reading: $!" ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  my  @ lines ;  
			
		
	
		
			
				
					  my  $ found_test =  0 ; 		# Set once we've found the log of this test  
			
		
	
		
			
				
					  while  (  my  $ line  =  <$Ferr>  )  
			
		
	
		
			
				
					  {  
			
		
	
		
			
				
					    if  (  $ line  =~  /^CURRENT_TEST:/  )  
			
		
	
		
			
				
					    if  ( $ found_test )  
			
		
	
		
			
				
					    {  
			
		
	
		
			
				
					      # If test wasn't last after all, discard what we found, test again.  
			
		
	
		
			
				
					      if  (  $ line  =~  /^CURRENT_TEST:/ )  
			
		
	
		
			
				
					      {  
			
		
	
		
			
				
					      # Throw away lines from previous tests  
			
		
	
		
			
				
					      @ lines  =  ( ) ;  
			
		
	
		
			
				
						@ lines =  ( ) ;   
			
		
	
		
			
				
						$ found_test =  $ line  =~  /^CURRENT_TEST: $tname/  ;  
			
		
	
		
			
				
					      }  
			
		
	
		
			
				
					      else  
			
		
	
		
			
				
					      {  
			
		
	
		
			
				
						push ( @ lines ,  $ line ) ;  
			
		
	
		
			
				
					      }  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					    else  
			
		
	
		
			
				
					    {  
			
		
	
		
			
				
					      # Search for beginning of test, until found  
			
		
	
		
			
				
					      $ found_test =  1  if  ( $ line  =~  /^CURRENT_TEST: $tname/ ) ;  
			
		
	
		
			
				
					    }  
			
		
	
		
			
				
					  }  
			
		
	
		
			
				
					  $ Ferr  =  undef ;  # Close error log file  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  # mysql_client_test.test sends a COM_DEBUG packet to the server  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -3603,10 +3656,8 @@ sub extract_warning_lines ($) { 
			
		
	
		
			
				
					     # and correcting them shows a few additional harmless warnings.  
			
		
	
		
			
				
					     # Thus those patterns are temporarily removed from the list  
			
		
	
		
			
				
					     # of patterns. For more info see BUG#42408  
			
		
	
		
			
				
					     # qr/^Warning:|mysqld: Warning|\[Warning\]/,  
			
		
	
		
			
				
					     # qr/^Error:|\[ERROR\]/,  
			
		
	
		
			
				
					     qr/^Warning:|mysqld: Warning/ ,  
			
		
	
		
			
				
					     qr/^Error:/ ,  
			
		
	
		
			
				
					     qr/^Warning:|mysqld: Warning|\[Warning\]/ ,  
			
		
	
		
			
				
					     qr/^Error:|\[ERROR\]/ ,  
			
		
	
		
			
				
					     qr/^==.* at 0x/ ,  
			
		
	
		
			
				
					     qr/InnoDB: Warning|InnoDB: Error/ ,  
			
		
	
		
			
				
					     qr/^safe_mutex:|allocated at line/ ,  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -3646,7 +3697,7 @@ sub start_check_warnings ($$) { 
			
		
	
		
			
				
					  my  $ log_error =  $ mysqld - > value ( '#log-error' ) ;  
			
		
	
		
			
				
					  # To be communicated to the test  
			
		
	
		
			
				
					  $ ENV { MTR_LOG_ERROR } =  $ log_error ;  
			
		
	
		
			
				
					  extract_warning_lines ( $ log_error ) ;  
			
		
	
		
			
				
					  extract_warning_lines ( $ log_error ,  $ tinfo - > { name } ) ;  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  my  $ args ;  
			
		
	
		
			
				
					  mtr_init_args ( \ $ args ) ;  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -4086,8 +4137,8 @@ sub mysqld_arguments ($$$) { 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  if  (  $ mysql_version_id  >=  50106  )  
			
		
	
		
			
				
					  {  
			
		
	
		
			
				
					    # Turn on logging to both tables and  file  
			
		
	
		
			
				
					    mtr_add_arg ( $ args ,  "--log-output=table, file" ) ;  
			
		
	
		
			
				
					    # Turn on logging to file  
			
		
	
		
			
				
					    mtr_add_arg ( $ args ,  "--log-output=file" ) ;  
			
		
	
		
			
				
					  }  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					  # Check if "extra_opt" contains skip-log-bin  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -5131,7 +5182,7 @@ Options to control what test suites or cases to run 
			
		
	
		
			
				
					  skip - rpl               Skip  the  replication  test  cases .  
			
		
	
		
			
				
					  big - test               Also  run  tests  marked  as  "big"  
			
		
	
		
			
				
					  enable - disabled        Run  also  tests  marked  as  disabled  
			
		
	
		
			
				
					  print_ testcasesDon ' t  run  the  tests  but  print  details  about  all  the  
			
		
	
		
			
				
					  print - testcases        Don ' t  run  the  tests  but  print  details  about  all  the  
			
		
	
		
			
				
					                        selected  tests ,  in  the  order  they  would  be  run .  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					Options  that  specify  ports