Commit 46d8163b authored by unknown's avatar unknown
Browse files

WL#2789 "Instance Manager: test using mysql-test-run testing framework"

1) Add support to testing Instance Manager in daemon mode;
2) Don't run Instance Manager tests when running with --ps-protocol option;


mysql-test/lib/mtr_cases.pl:
  WL#2789 "Instance Manager: test using mysql-test-run testing framework"
  Skip/disable Instance Manager tests in the following cases:
    - we are testing embedded server;
    - we are running with --ps-protocol;
    - Instance Manager executable does not exist;
  Report about the reason in the standard way.
mysql-test/lib/mtr_process.pl:
  WL#2789 "Instance Manager: test using mysql-test-run testing framework"
  Make several attempts (i.e. send several signals to process) while trying to kill it.
mysql-test/mysql-test-run.pl:
  WL#2789 "Instance Manager: test using mysql-test-run testing framework"
  Add support for testing Instance Manager in daemon mode.
parent eeae3fc3
Loading
Loading
Loading
Loading
+29 −17
Original line number Diff line number Diff line
@@ -61,22 +61,6 @@ sub collect_test_cases ($) {
        $elem= $tname;
        $tname =~ s/\.imtest$//;
        $component_id= 'im';

        if ( $::glob_use_embedded_server )
        {
          mtr_report(
            "Instance Manager's tests are not available in embedded mode." .
            "Test case '$tname' is skipped.");
          next;
        }

        unless ( $::exe_im )
        {
          mtr_report(
            "Instance Manager executable is unavailable. " .
            "Test case '$tname' is skipped.");
          next;
        }
      }

      # If target component is known, check that the specified test case
@@ -403,6 +387,34 @@ sub collect_one_test_case($$$$$$$) {
    $tinfo->{'comment'}= mtr_fromfile($disabled_file);
  }

  if ( $component_id eq 'im' )
  {
    if ( $::glob_use_embedded_server )
    {
      $tinfo->{'skip'}= 1;
      
      mtr_report(
        "Instance Manager tests are not available in embedded mode. " .
        "Test case '$tname' is skipped.");
    }
    elsif ( $::opt_ps_protocol )
    {
      $tinfo->{'skip'}= 1;
      
      mtr_report(
        "Instance Manager tests are not run with --ps-protocol. " .
        "Test case '$tname' is skipped.");
    }
    elsif ( !$::exe_im )
    {
      $tinfo->{'skip'}= 1;

      mtr_report(
        "Instance Manager executable is unavailable." .
        "Test case '$tname' is skipped.");
    }
  }

  # We can't restart a running server that may be in use

  if ( $::glob_use_running_server and
+8 −6
Original line number Diff line number Diff line
@@ -850,12 +850,14 @@ sub mtr_kill_processes ($) {

  foreach my $sig (15, 9)
  {
    my $retries= 20;                    # FIXME 20 seconds, this is silly!
    kill($sig, @{$pids});
    while ( $retries-- and  kill(0, @{$pids}) )
    my $retries= 10;
    while (1)
    {
      mtr_debug("Sleep 1 second waiting for processes to die");
      sleep(1)                      # Wait one second
      kill($sig, @{$pids});
      last unless kill (0, @{$pids}) and $retries--;

      mtr_debug("Sleep 2 second waiting for processes to die");
      sleep(2);
    }
  }
}
+10 −0
Original line number Diff line number Diff line
@@ -1017,10 +1017,14 @@ sub environment_setup () {
# $ENV{'MYSQL_TCP_PORT'}=     '@MYSQL_TCP_PORT@'; # FIXME
  $ENV{'MYSQL_TCP_PORT'}=     3306;

  $ENV{'IM_PATH_PID'}=        $instance_manager->{path_pid};

  $ENV{'IM_MYSQLD1_SOCK'}=    $instance_manager->{instances}->[0]->{path_sock};
  $ENV{'IM_MYSQLD1_PORT'}=    $instance_manager->{instances}->[0]->{port};
  $ENV{'IM_MYSQLD1_PATH_PID'}=$instance_manager->{instances}->[0]->{path_pid};
  $ENV{'IM_MYSQLD2_SOCK'}=    $instance_manager->{instances}->[1]->{path_sock};
  $ENV{'IM_MYSQLD2_PORT'}=    $instance_manager->{instances}->[1]->{port};
  $ENV{'IM_MYSQLD2_PATH_PID'}=$instance_manager->{instances}->[1]->{path_pid};

  if ( $glob_cygwin_perl )
  {
@@ -2317,6 +2321,12 @@ sub im_stop($) {
    return;
  }

  # Re-read pid from the file, since during tests Instance Manager could have
  # been restarted, so its pid could have been changed.

  $instance_manager->{'pid'} =
    mtr_get_pid_from_file($instance_manager->{'path_pid'});

  # Inspired from mtr_stop_mysqld_servers().

  start_reap_all();