Commit bb66c80a authored by sasha@mysql.sashanet.com's avatar sasha@mysql.sashanet.com
Browse files

client/mysqlmanagerc.c

    added support for quiet
    increased line buffer size
client/mysqltest.c
    fixed memory leak
    added query logging to result file
    added error message logging to result file
    added enable_query_log/disable_query_log
mysql-test/mysql-test-run.sh
    converted tests to use mysqlmanager

Updated test results
parent 043deed8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -414,3 +414,4 @@ vio/test-sslclient
vio/test-sslserver
vio/viotest-ssl
client/mysqlmanager-pwgen
*.reject
+5 −2
Original line number Diff line number Diff line
@@ -169,9 +169,11 @@ int main(int argc, char** argv)
	manager->last_errno);
  for (;!feof(fp);)
  {
    char buf[1024];
    char buf[4096];
    if (!fgets(buf,sizeof(buf),fp))
      break;
    if (!quiet)
      fprintf(fp_out,"<<%s",buf);
    if (mysql_manager_command(manager,buf,strlen(buf)))
      die("Error in command: %s(%d)",manager->last_error,manager->last_errno);
    while (!manager->eof)
@@ -179,7 +181,8 @@ int main(int argc, char** argv)
      if (mysql_manager_fetch_line(manager,buf,sizeof(buf)))
	die("Error fetching result line: %s(%d)", manager->last_error,
	    manager->last_errno);
      fprintf(fp_out,"%s\n",buf);
      if (!quiet)
        fprintf(fp_out,">>%s\n",buf);
    }
  }
  mysql_manager_close(manager);
+39 −7
Original line number Diff line number Diff line
@@ -139,11 +139,13 @@ typedef struct
  int int_val;
  int alloced_len;
  int int_dirty; /* do not update string if int is updated until first read */
  int alloced;
} VAR;

VAR var_reg[10];
/*Perl/shell-like variable registers */
HASH var_hash;
int disable_query_log=0;

struct connection cons[MAX_CONS];
struct connection* cur_con, *next_con, *cons_end;
@@ -165,6 +167,7 @@ Q_DIRTY_CLOSE, Q_REPLACE,
Q_PING,             Q_EVAL,
Q_RPL_PROBE,        Q_ENABLE_RPL_PARSE,
Q_DISABLE_RPL_PARSE, Q_EVAL_RESULT,
Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG,
Q_UNKNOWN,                             /* Unknown command.   */
Q_COMMENT,                             /* Comments, ignored. */
Q_COMMENT_WITH_COMMAND
@@ -196,6 +199,7 @@ const char *command_names[] = {
  "ping",             "eval",
  "rpl_probe",        "enable_rpl_parse",
  "disable_rpl_parse", "eval_result",
  "enable_query_log", "disable_query_log",
  0
};

@@ -619,6 +623,18 @@ int var_query_set(VAR* v, const char* p, const char** p_end)
  return 0;
}

void var_copy(VAR* dest, VAR* src)
{
  dest->int_val=src->int_val;
  dest->int_dirty=src->int_dirty;
  if (dest->alloced_len < src->alloced_len &&
      !(dest->str_val=my_realloc(dest->str_val,src->alloced_len,
				 MYF(MY_WME))))
    die("Out of memory");
  dest->str_val_len=src->str_val_len;
  memcpy(dest->str_val,src->str_val,src->str_val_len);
}

int eval_expr(VAR* v, const char* p, const char** p_end)
{
  VAR* vp;
@@ -626,7 +642,7 @@ int eval_expr(VAR* v, const char* p, const char** p_end)
    {
      if ((vp = var_get(p,p_end,0)))
	{
	  memcpy(v, vp, sizeof(*v));
	  var_copy(v, vp);
	  return 0;
	}
    }
@@ -699,6 +715,7 @@ int do_system(struct st_query* q)
      if (system(expr_buf) && q->abort_on_error)
	die("system command '%s' failed", expr_buf);
    }
  var_free(&v);
  return 0;
}

@@ -714,6 +731,7 @@ int do_echo(struct st_query* q)
    write(1, v.str_val, v.str_val_len);
  }
  write(1, "\n", 1);
  var_free(&v);
  return 0;
}

@@ -1202,7 +1220,6 @@ int do_while(struct st_query* q)
  char* p=q->first_argument;
  const char* expr_start, *expr_end;
  VAR v;
  var_init(&v,0,0,0,0);
  if (cur_block == block_stack_end)
	die("Nesting too deeply");
  if (!*block_ok)
@@ -1219,6 +1236,7 @@ int do_while(struct st_query* q)
  expr_end = strrchr(expr_start, ')');
  if (!expr_end)
    die("missing ')' in while");
  var_init(&v,0,0,0,0);
  eval_expr(&v, ++expr_start, &expr_end);
  *cur_block++ = parser.current_line++;
  if (!v.int_val)
@@ -1228,6 +1246,7 @@ int do_while(struct st_query* q)
    }
  else
    *++block_ok = 1;
  var_free(&v);
  return 0;
}

@@ -1727,6 +1746,11 @@ int run_query(MYSQL* mysql, struct st_query* q, int flags)
  
  if ((flags & QUERY_SEND) && mysql_send_query(mysql, query, query_len))
    die("At line %u: unable to send query '%s'", start_lineno, query);
  if ((flags & QUERY_SEND) && !disable_query_log)
  {
    dynstr_append_mem(ds,query,query_len);
    dynstr_append_mem(ds,";\n",2);
  }
  if(!(flags & QUERY_REAP))
    return 0;
  
@@ -1743,8 +1767,12 @@ int run_query(MYSQL* mysql, struct st_query* q, int flags)
      for (i=0 ; q->expected_errno[i] ; i++)
      {
	if ((q->expected_errno[i] == mysql_errno(mysql)))
	{
	  dynstr_append(ds,mysql_error(mysql));
	  dynstr_append_mem(ds,"\n",1);
	  goto end;				/* Ok */
	}
      }
      if (i)
      {
	verbose_msg("query '%s' failed with wrong errno %d instead of %d...",
@@ -1887,6 +1915,7 @@ static VAR* var_init(VAR* v, const char* name, int name_len, const char* val,
    die("Out of memory");
  
  tmp_var->name = (name) ? (char*)tmp_var + sizeof(*tmp_var) : 0;
  tmp_var->alloced = (v == 0); 

  if(!(tmp_var->str_val = my_malloc(val_alloc_len, MYF(MY_WME))))
    die("Out of memory");
@@ -1905,6 +1934,7 @@ static VAR* var_init(VAR* v, const char* name, int name_len, const char* val,
static void var_free(void* v)
{
  my_free(((VAR*) v)->str_val, MYF(MY_WME));
  if (((VAR*)v)->alloced)
   my_free((char*) v, MYF(MY_WME));
}

@@ -2008,6 +2038,8 @@ int main(int argc, char** argv)
      case Q_RPL_PROBE: do_rpl_probe(q); break;
      case Q_ENABLE_RPL_PARSE: do_enable_rpl_parse(q); break;
      case Q_DISABLE_RPL_PARSE: do_disable_rpl_parse(q); break;
      case Q_ENABLE_QUERY_LOG: disable_query_log=0; break;
      case Q_DISABLE_QUERY_LOG: disable_query_log=1; break;
      case Q_SOURCE: do_source(q); break;
      case Q_SLEEP: do_sleep(q); break;
      case Q_INC: do_inc(q); break;
+71 −23
Original line number Diff line number Diff line
@@ -99,6 +99,7 @@ export MYSQL_TEST_DIR
STD_DATA=$MYSQL_TEST_DIR/std_data
hostname=`hostname`		# Installed in the mysql privilege table

MANAGER_QUIET_OPT="-q"    
TESTDIR="$MYSQL_TEST_DIR/t"
TESTSUFFIX=test
TOT_SKIP=0
@@ -119,6 +120,9 @@ MASTER_MYPORT=9306
SLAVE_RUNNING=0
SLAVE_MYPORT=9307
MYSQL_MANAGER_PORT=23546
MYSQL_MANAGER_PW_FILE=$MYSQL_TEST_DIR/var/tmp/manager.pwd
MYSQL_MANAGER_LOG=$MYSQL_TEST_DIR/var/log/manager.log
MYSQL_MANAGER_USER=root
NO_SLAVE=0

EXTRA_MASTER_OPT=""
@@ -131,11 +135,14 @@ DO_CLIENT_GDB=""
SLEEP_TIME=2
CHARACTER_SET=latin1
DBUSER=""
START_WAIT_TIMEOUT=3
STOP_WAIT_TIMEOUT=3

while test $# -gt 0; do
  case "$1" in
    --user=*) DBUSER=`$ECHO "$1" | $SED -e "s;--user=;;"` ;;
    --force)  FORCE=1 ;;
    --verbose-manager)  MANAGER_QUIET_OPT="" ;;
    --local)   USE_RUNNING_SERVER="" ;;
    --tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;;
    --master_port=*) MASTER_MYPORT=`$ECHO "$1" | $SED -e "s;--master_port=;;"` ;;
@@ -158,6 +165,9 @@ while test $# -gt 0; do
    --skip-rpl) NO_SLAVE=1 ;;
    --skip-test=*) SKIP_TEST=`$ECHO "$1" | $SED -e "s;--skip-test=;;"`;;
    --do-test=*) DO_TEST=`$ECHO "$1" | $SED -e "s;--do-test=;;"`;;
    --wait-timeout=*)
     START_WAIT_TIMEOUT=`$ECHO "$1" | $SED -e "s;--wait-timeout=;;"`
     STOP_WAIT_TIMEOUT=$START_WAIT_TIMEOUT;;
    --record)
      RECORD=1;
      EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
@@ -187,6 +197,8 @@ while test $# -gt 0; do
      DO_GPROF=1
      ;;  
    --gdb )
      START_WAIT_TIMEOUT=300
      STOP_WAIT_TIMEOUT=300
      if [ x$BINARY_DIST = x1 ] ; then
	$ECHO "Note: you will get more meaningful output on a source distribution compiled with debugging option when running tests with --gdb option"
      fi
@@ -337,6 +349,7 @@ GPROF_MASTER=$GPROF_DIR/master.gprof
GPROF_SLAVE=$GPROF_DIR/slave.gprof
TIMEFILE="$MYSQL_TMP_DIR/mysqltest-time"
SLAVE_MYSQLD=$MYSQLD #this can be changed later if we are doing gcov
XTERM=`which xterm`

#++
# Function Definitions
@@ -503,21 +516,48 @@ abort_if_failed()

start_manager()
{
 MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -o $MYSQL_MANAGER_PW_FILE` 
 MYSQL_MANAGER_PW=`$MYSQL_MANAGER_PWGEN -u $MYSQL_MANAGER_USER \
 -o $MYSQL_MANAGER_PW_FILE`
 $MYSQL_MANAGER --log=$MYSQL_MANAGER_LOG --port=$MYSQL_MANAGER_PORT \
  --password-file=$MYSQL_MANAGER_PW_FILE
  abort_if_failed "Could not start MySQL manager"
}

manager_cmd()
stop_manager()
{
  $MYSQL_MANAGER_CLIENT --user=$MYSQL_MANAGER_USER \
 $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT -u$MYSQL_MANAGER_USER \
  -p$MYSQL_MANAGER_PW -P $MYSQL_MANAGER_PORT <<EOF
shutdown
EOF
}

manager_launch()
{
  ident=$1
  shift
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
def_exec $ident $@
set_exec_stdout $ident $CUR_MYERR
set_exec_stderr $ident $CUR_MYERR
set_exec_con $ident root localhost $CUR_MYSOCK
start_exec $ident $START_WAIT_TIMEOUT
EOF
 abort_if_failed "Could not execute manager command"
}

manager_term()
{
  ident=$1
  shift
  $MYSQL_MANAGER_CLIENT $MANAGER_QUIET_OPT --user=$MYSQL_MANAGER_USER \
   --password=$MYSQL_MANAGER_PW  --port=$MYSQL_MANAGER_PORT <<EOF
$@
stop_exec $ident $TERM_WAIT_TIMEOUT
EOF
 abort_if_failed "Could not execute manager command"
}


start_master()
{
    [ x$MASTER_RUNNING = 1 ] && return
@@ -565,20 +605,23 @@ start_master()
	     $SMALL_SERVER \
	     $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
    fi
    
    CUR_MYERR=$MASTER_MYERR
    CUR_MYSOCK=$MASTER_MYSOCK
    
    if [ x$DO_DDD = x1 ]
    then
      $ECHO "set args $master_args" > $GDB_MASTER_INIT
      ddd --debugger "gdb -x $GDB_MASTER_INIT" $MYSQLD &
      prompt_user "Hit enter to continue after you've started the master"
      manager_launch master ddd -display $DISPLAY --debugger \
      "gdb -x $GDB_MASTER_INIT" $MYSQLD 
    elif [ x$DO_GDB = x1 ]
    then
      $ECHO "set args $master_args" > $GDB_MASTER_INIT
      xterm -title "Master" -e gdb -x $GDB_MASTER_INIT $MYSQLD &
      prompt_user "Hit enter to continue after you've started the master"
      manager_launch master $XTERM -display :0 -title "Master" -e gdb -x \
       $GDB_MASTER_INIT $MYSQLD 
    else	    
      $MYSQLD $master_args  >> $MASTER_MYERR 2>&1 &
      manager_launch master $MYSQLD $master_args  
    fi  
  wait_for_server_start $MASTER_MYPORT
  MASTER_RUNNING=1
}

@@ -607,7 +650,7 @@ start_slave()
    $RM -f $SLAVE_MYDDIR/log.*	
    slave_args="--no-defaults $master_info \
    	    --exit-info=256 \
	    --log-bin=$MYSQL_TEST_DIR/var/log/slave-bin
	    --log-bin=$MYSQL_TEST_DIR/var/log/slave-bin \
	    --log-slave-updates \
            --basedir=$MY_BASEDIR \
            --datadir=$SLAVE_MYDDIR \
@@ -626,20 +669,22 @@ start_slave()
	    --report-port=$SLAVE_MYPORT \
	     $SMALL_SERVER \
             $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT"
    CUR_MYERR=$SLAVE_MYERR
    CUR_MYSOCK=$SLAVE_MYSOCK
  
    if [ x$DO_DDD = x1 ]
    then
      $ECHO "set args $master_args" > $GDB_SLAVE_INIT
      ddd --debugger "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD &
      prompt_user "Hit enter to continue after you've started the slave"
      manager_launch slave ddd -display $DISPLAY --debugger \
       "gdb -x $GDB_SLAVE_INIT" $SLAVE_MYSQLD 
    elif [ x$DO_GDB = x1 ]
    then
      $ECHO "set args $slave_args" > $GDB_SLAVE_INIT
      xterm -title "Slave" -e gdb -x $GDB_SLAVE_INIT $SLAVE_MYSQLD &
      prompt_user "Hit enter to continue after you've started the slave"
      manager_launch slave $XTERM -display $DISPLAY -title "Slave" -e gdb -x \
       $GDB_SLAVE_INIT $SLAVE_MYSQLD 
    else
      $SLAVE_MYSQLD $slave_args  >> $SLAVE_MYERR 2>&1 &
      manager_launch slave $SLAVE_MYSQLD $slave_args
    fi
    wait_for_server_start $SLAVE_MYPORT
    SLAVE_RUNNING=1
}

@@ -655,7 +700,7 @@ stop_slave ()
{
  if [ x$SLAVE_RUNNING = x1 ]
  then
    $MYSQLADMIN --no-defaults --socket=$SLAVE_MYSOCK -u root -O shutdown_timeout=10 shutdown
    manager_term slave
    if [ $? != 0 ] && [ -f $SLAVE_MYPID ]
    then # try harder!
     $ECHO "slave not cooperating with mysqladmin, will try manual kill"
@@ -677,7 +722,7 @@ stop_master ()
{
  if [ x$MASTER_RUNNING = x1 ]
  then
    $MYSQLADMIN --no-defaults --socket=$MASTER_MYSOCK -u root -O shutdown_timeout=10 shutdown
    manager_term master
    if [ $? != 0 ] && [ -f $MASTER_MYPID ]
    then # try harder!
     $ECHO "master not cooperating with mysqladmin, will try manual kill"
@@ -862,6 +907,7 @@ run_testcase ()
         if [ -z "$DO_GDB" ] && [ -z "$USE_RUNNING_SERVER" ] && [ -z "$DO_DDD" ]
	 then
	   mysql_stop
	   stop_manager
   	 fi
	 exit 1
	fi
@@ -894,7 +940,8 @@ then
  $MYSQLADMIN --no-defaults --socket=$SLAVE_MYSOCK -u root -O connect_timeout=5 shutdown > /dev/null 2>&1
  $ECHO "Installing Test Databases"
  mysql_install_db

  $ECHO "Starting MySQL Manager"
  start_manager
#do not automagically start deamons if we are in gdb or running only one test
#case
  if [ -z "$DO_GDB" ] && [ -z "$DO_DDD" ]
@@ -926,10 +973,10 @@ then
 fi  
 cd $savedir
 mysql_stop
 stop_manager
 exit
fi


$ECHO
$ECHO " TEST                         USER   SYSTEM  ELAPSED        RESULT"
$ECHO $DASH72
@@ -963,6 +1010,7 @@ then
    mysql_stop
fi

stop_manager
report_stats
$ECHO

+59 −0
Original line number Diff line number Diff line
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
cont_nr int(11) NOT NULL auto_increment,
ver_nr int(11) NOT NULL default '0',
aufnr int(11) NOT NULL default '0',
username varchar(50) NOT NULL default '',
hdl_nr int(11) NOT NULL default '0',
eintrag date NOT NULL default '0000-00-00',
st_klasse varchar(40) NOT NULL default '',
st_wert varchar(40) NOT NULL default '',
st_zusatz varchar(40) NOT NULL default '',
st_bemerkung varchar(255) NOT NULL default '',
kunden_art varchar(40) NOT NULL default '',
mcbs_knr int(11) default NULL,
mcbs_aufnr int(11) NOT NULL default '0',
schufa_status char(1) default '?',
bemerkung text,
wirknetz text,
wf_igz int(11) NOT NULL default '0',
tarifcode varchar(80) default NULL,
recycle char(1) default NULL,
sim varchar(30) default NULL,
mcbs_tpl varchar(30) default NULL,
emp_nr int(11) NOT NULL default '0',
laufzeit int(11) default NULL,
hdl_name varchar(30) default NULL,
prov_hdl_nr int(11) NOT NULL default '0',
auto_wirknetz varchar(50) default NULL,
auto_billing varchar(50) default NULL,
touch timestamp(14) NOT NULL,
kategorie varchar(50) default NULL,
kundentyp varchar(20) NOT NULL default '',
sammel_rech_msisdn varchar(30) NOT NULL default '',
p_nr varchar(9) NOT NULL default '',
suffix char(3) NOT NULL default '',
PRIMARY KEY (cont_nr),
KEY idx_aufnr(aufnr),
KEY idx_hdl_nr(hdl_nr),
KEY idx_st_klasse(st_klasse),
KEY ver_nr(ver_nr),
KEY eintrag_idx(eintrag),
KEY emp_nr_idx(emp_nr),
KEY wf_igz(wf_igz),
KEY touch(touch),
KEY hdl_tag(eintrag,hdl_nr),
KEY prov_hdl_nr(prov_hdl_nr),
KEY mcbs_aufnr(mcbs_aufnr),
KEY kundentyp(kundentyp),
KEY p_nr(p_nr,suffix)
) TYPE=MyISAM;
INSERT INTO t1 VALUES (3359356,405,3359356,'Mustermann Musterfrau',52500,'2000-05-20','workflow','Auftrag erledigt','Originalvertrag eingegangen und geprft','','privat',1485525,2122316,'+','','N',1909160,'MobilComSuper92000D2',NULL,NULL,'MS9ND2',3,24,'MobilCom Shop Koeln',52500,NULL,'auto',20010202105916,'Mobilfunk','PP','','','');
INSERT INTO t1 VALUES (3359357,468,3359357,'Mustermann Musterfrau',7001,'2000-05-20','workflow','Auftrag erledigt','Originalvertrag eingegangen und geprft','','privat',1503580,2139699,'+','','P',1909171,'MobilComSuper9D1T10SFreisprech(Akquise)',NULL,NULL,'MS9NS1',327,24,'MobilCom Intern',7003,NULL,'auto',20010202105916,'Mobilfunk','PP','','','');
INSERT INTO t1 VALUES (3359358,407,3359358,'Mustermann Musterfrau',7001,'2000-05-20','workflow','Auftrag erledigt','Originalvertrag eingegangen und geprft','','privat',1501358,2137473,'N','','N',1909159,'MobilComSuper92000D2',NULL,NULL,'MS9ND2',325,24,'MobilCom Intern',7003,NULL,'auto',20010202105916,'Mobilfunk','PP','','','');
INSERT INTO t1 VALUES (3359359,468,3359359,'Mustermann Musterfrau',7001,'2000-05-20','workflow','Auftrag erledigt','Originalvertrag eingegangen und geprft','','privat',1507831,2143894,'+','','P',1909162,'MobilComSuper9D1T10SFreisprech(Akquise)',NULL,NULL,'MS9NS1',327,24,'MobilCom Intern',7003,NULL,'auto',20010202105916,'Mobilfunk','PP','','','');
INSERT INTO t1 VALUES (3359360,0,0,'Mustermann Musterfrau',29674907,'2000-05-20','workflow','Auftrag erledigt','Originalvertrag eingegangen und geprft','','privat',1900169997,2414578,'+',NULL,'N',1909148,'',NULL,NULL,'RV99066_2',20,NULL,'POS',29674907,NULL,NULL,20010202105916,'Mobilfunk','','','97317481','007');
INSERT INTO t1 VALUES (3359361,406,3359361,'Mustermann Musterfrau',7001,'2000-05-20','workflow','Auftrag storniert','','(7001-84):Storno, Kd. mchte nicht mehr','privat',NULL,0,'+','','P',1909150,'MobilComSuper92000D1(Akquise)',NULL,NULL,'MS9ND1',325,24,'MobilCom Intern',7003,NULL,'auto',20010202105916,'Mobilfunk','PP','','','');
INSERT INTO t1 VALUES (3359362,406,3359362,'Mustermann Musterfrau',7001,'2000-05-20','workflow','Auftrag erledigt','Originalvertrag eingegangen und geprft','','privat',1509984,2145874,'+','','P',1909154,'MobilComSuper92000D1(Akquise)',NULL,NULL,'MS9ND1',327,24,'MobilCom Intern',7003,NULL,'auto',20010202105916,'Mobilfunk','PP','','','');
SELECT ELT(FIELD(kundentyp,'PP','PPA','PG','PGA','FK','FKA','FP','FPA','K','KA','V','VA',''), 'Privat (Private Nutzung)','Privat (Private Nutzung) Sitz im Ausland','Privat (geschaeftliche Nutzung)','Privat (geschaeftliche Nutzung) Sitz im Ausland','Firma (Kapitalgesellschaft)','Firma (Kapitalgesellschaft) Sitz im Ausland','Firma (Personengesellschaft)','Firma (Personengesellschaft) Sitz im Ausland','oeff. rechtl. Koerperschaft','oeff. rechtl. Koerperschaft Sitz im Ausland','Eingetragener Verein','Eingetragener Verein Sitz im Ausland','Typ unbekannt') AS Kundentyp ,kategorie FROM t1 WHERE hdl_nr < 2000000 AND kategorie IN ('Prepaid','Mobilfunk') AND st_klasse = 'Workflow' GROUP BY kundentyp ORDER BY kategorie;
Kundentyp	kategorie
Privat (Private Nutzung)	Mobilfunk
drop table t1;
Loading