int main(void) { char str[] = "..f hello,world the. hell.sldfk,d klsf ,"; char delim[] = ", ."; char *save[20]; int ret, i = 0; ret = str_tok(str, delim, save); printf("count = %d\n", ret); while (save[i] != NULL) { printf("%s\n", save[i++]); } /* for (i = 0; i < ret; i++)*/ /*free(save[i]);*/ return 0; }
/****************************************************************************** start_slave() Start the slave server. ******************************************************************************/ void start_slave() { arg_list_t al; int err, i; char slave_out[PATH_MAX]; char slave_err[PATH_MAX]; char temp[PATH_MAX]; // skip? if (skip_slave) return; // remove stale binary logs removef("%s/*-bin.*", slave_dir); // remove stale binary logs removef("%s/*.index", slave_dir); // remove master.info file removef("%s/master.info", slave_dir); // remove relay files removef("%s/var/log/*relay*", mysql_test_dir); // remove relay-log.info file removef("%s/relay-log.info", slave_dir); // init script if (slave_init_script[0] != NULL) { // run_init_script(slave_init_script); // TODO: use the scripts if (strindex(slave_init_script, "rpl000016-slave.sh") != NULL) { // create empty master.info file snprintf(temp, PATH_MAX, "%s/master.info", slave_dir); close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO)); } else if (strindex(slave_init_script, "rpl000017-slave.sh") != NULL) { FILE *fp; // create a master.info file snprintf(temp, PATH_MAX, "%s/master.info", slave_dir); fp = fopen(temp, "wb+"); fputs("master-bin.000001\n", fp); fputs("4\n", fp); fputs("127.0.0.1\n", fp); fputs("replicate\n", fp); fputs("aaaaaaaaaaaaaaab\n", fp); fputs("9306\n", fp); fputs("1\n", fp); fputs("0\n", fp); fclose(fp); } else if (strindex(slave_init_script, "rpl_rotate_logs-slave.sh") != NULL) { // create empty master.info file snprintf(temp, PATH_MAX, "%s/master.info", slave_dir); close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO)); } } // redirection files snprintf(slave_out, PATH_MAX, "%s/var/run/slave%u.out", mysql_test_dir, restarts); snprintf(slave_err, PATH_MAX, "%s/var/run/slave%u.err", mysql_test_dir, restarts); // args init_args(&al); add_arg(&al, "%s", mysqld_file); add_arg(&al, "--no-defaults"); add_arg(&al, "--log-bin=slave-bin"); add_arg(&al, "--relay_log=slave-relay-bin"); add_arg(&al, "--basedir=%s", base_dir); add_arg(&al, "--port=%u", slave_port); add_arg(&al, "--datadir=%s", slave_dir); add_arg(&al, "--pid-file=%s", slave_pid); add_arg(&al, "--character-sets-dir=%s", char_dir); add_arg(&al, "--core"); add_arg(&al, "--tmpdir=%s", mysql_tmp_dir); add_arg(&al, "--language=%s", lang_dir); add_arg(&al, "--exit-info=256"); add_arg(&al, "--log-slave-updates"); add_arg(&al, "--init-rpl-role=slave"); add_arg(&al, "--skip-innodb"); add_arg(&al, "--skip-slave-start"); add_arg(&al, "--slave-load-tmpdir=../../var/tmp"); add_arg(&al, "--report-user=%s", user); add_arg(&al, "--report-host=127.0.0.1"); add_arg(&al, "--report-port=%u", slave_port); add_arg(&al, "--master-retry-count=10"); add_arg(&al, "-O"); add_arg(&al, "slave_net_timeout=10"); add_arg(&al, "--log-bin-trust-routine-creators"); add_arg(&al, "--log-slow-queries"); add_arg(&al, "--log-queries-not-using-indexes"); #ifdef DEBUG //only for debug builds add_arg(&al, "--debug"); #endif if (use_openssl) { add_arg(&al, "--ssl-ca=%s", ca_cert); add_arg(&al, "--ssl-cert=%s", server_cert); add_arg(&al, "--ssl-key=%s", server_key); } // slave master info if (slave_master_info[0] != NULL) { char *p; p = (char *)str_tok(slave_master_info, " \t"); while(p) { add_arg(&al, "%s", p); p = (char *)str_tok(NULL, " \t"); } } else { add_arg(&al, "--master-user=%s", user); add_arg(&al, "--master-password=%s", password); add_arg(&al, "--master-host=127.0.0.1"); add_arg(&al, "--master-port=%u", master_port); add_arg(&al, "--master-connect-retry=1"); add_arg(&al, "--server-id=2"); add_arg(&al, "--rpl-recovery-rank=2"); } // small server add_arg(&al, "-O"); add_arg(&al, "key_buffer_size=1M"); add_arg(&al, "-O"); add_arg(&al, "sort_buffer=256K"); add_arg(&al, "-O"); add_arg(&al, "max_heap_table_size=1M"); // opt args if (slave_opt[0] != NULL) { char *p; p = (char *)str_tok(slave_opt, " \t"); while(p) { add_arg(&al, "%s", p); p = (char *)str_tok(NULL, " \t"); } } // remove the pid file if it exists remove(slave_pid); // spawn if ((err = spawn(mysqld_file, &al, FALSE, NULL, slave_out, slave_err)) == 0) { sleep_until_file_exists(slave_pid); if ((err = wait_for_server_start(bin_dir, user, password, slave_port, mysql_tmp_dir)) == 0) { slave_running = TRUE; } else { log_error("The slave server went down early."); } } else { log_error("Unable to start slave server."); } // free args free_args(&al); }
/****************************************************************************** start_master() Start the master server. ******************************************************************************/ void start_master() { arg_list_t al; int err, i; char master_out[PATH_MAX]; char master_err[PATH_MAX]; char temp[PATH_MAX], temp2[PATH_MAX]; // remove old berkeley db log files that can confuse the server removef("%s/log.*", master_dir); // remove stale binary logs removef("%s/var/log/*-bin.*", mysql_test_dir); // remove stale binary logs removef("%s/var/log/*.index", mysql_test_dir); // remove master.info file removef("%s/master.info", master_dir); // remove relay files removef("%s/var/log/*relay*", mysql_test_dir); // remove relay-log.info file removef("%s/relay-log.info", master_dir); // init script if (master_init_script[0] != NULL) { // run_init_script(master_init_script); // TODO: use the scripts if (strindex(master_init_script, "repair_part2-master.sh") != NULL) { FILE *fp; // create an empty index file snprintf(temp, PATH_MAX, "%s/test/t1.MYI", master_dir); fp = fopen(temp, "wb+"); fputs("1", fp); fclose(fp); } } // redirection files snprintf(master_out, PATH_MAX, "%s/var/run/master%u.out", mysql_test_dir, restarts); snprintf(master_err, PATH_MAX, "%s/var/run/master%u.err", mysql_test_dir, restarts); snprintf(temp2,PATH_MAX,"%s/var",mysql_test_dir); mkdir(temp2,0); snprintf(temp2,PATH_MAX,"%s/var/log",mysql_test_dir); mkdir(temp2,0); // args init_args(&al); add_arg(&al, "%s", mysqld_file); add_arg(&al, "--no-defaults"); add_arg(&al, "--log-bin=%s/var/log/master-bin",mysql_test_dir); add_arg(&al, "--server-id=1"); add_arg(&al, "--basedir=%s", base_dir); add_arg(&al, "--port=%u", master_port); add_arg(&al, "--local-infile"); add_arg(&al, "--core"); add_arg(&al, "--datadir=%s", master_dir); add_arg(&al, "--pid-file=%s", master_pid); add_arg(&al, "--character-sets-dir=%s", char_dir); add_arg(&al, "--tmpdir=%s", mysql_tmp_dir); add_arg(&al, "--language=%s", lang_dir); add_arg(&al, "--log-bin-trust-routine-creators"); add_arg(&al, "--log-slow-queries"); add_arg(&al, "--log-queries-not-using-indexes"); #ifdef DEBUG //only for debug builds add_arg(&al, "--debug"); #endif if (use_openssl) { add_arg(&al, "--ssl-ca=%s", ca_cert); add_arg(&al, "--ssl-cert=%s", server_cert); add_arg(&al, "--ssl-key=%s", server_key); } // $MASTER_40_ARGS add_arg(&al, "--rpl-recovery-rank=1"); add_arg(&al, "--init-rpl-role=master"); // $SMALL_SERVER add_arg(&al, "-O"); add_arg(&al, "key_buffer_size=1M"); add_arg(&al, "-O"); add_arg(&al, "sort_buffer=256K"); add_arg(&al, "-O"); add_arg(&al, "max_heap_table_size=1M"); // $EXTRA_MASTER_OPT if (master_opt[0] != NULL) { char *p; p = (char *)str_tok(master_opt, " \t"); if (!strstr(master_opt, "timezone")) { while (p) { add_arg(&al, "%s", p); p = (char *)str_tok(NULL, " \t"); } } } // remove the pid file if it exists remove(master_pid); // spawn if ((err= spawn(mysqld_file, &al, FALSE, NULL, master_out, master_err)) == 0) { sleep_until_file_exists(master_pid); if ((err = wait_for_server_start(bin_dir, user, password, master_port, mysql_tmp_dir)) == 0) { master_running = TRUE; } else { log_error("The master server went down early."); } } else { log_error("Unable to start master server."); } // free_args free_args(&al); }
/****************************************************************************** main() ******************************************************************************/ int main(int argc, char **argv) { int is_ignore_list = 0; // setup setup(argv[0]); /* The --ignore option is comma saperated list of test cases to skip and should be very first command line option to the test suite. The usage is now: mysql_test_run --ignore=test1,test2 test3 test4 where test1 and test2 are test cases to ignore and test3 and test4 are test cases to run. */ if (argc >= 2 && !strnicmp(argv[1], "--ignore=", sizeof("--ignore=")-1)) { char *temp, *token; temp= strdup(strchr(argv[1],'=') + 1); for (token=str_tok(temp, ","); token != NULL; token=str_tok(NULL, ",")) { if (strlen(ignore_test) + strlen(token) + 2 <= PATH_MAX-1) sprintf(ignore_test+strlen(ignore_test), " %s ", token); else { free(temp); die("ignore list too long."); } } free(temp); is_ignore_list = 1; } // header log_msg("MySQL Server %s, for %s (%s)\n\n", VERSION, SYSTEM_TYPE, MACHINE_TYPE); log_msg("Initializing Tests...\n"); // install test databases mysql_install_db(); log_msg("Starting Tests...\n"); log_msg("\n"); log_msg(HEADER); log_msg(DASH); if ( argc > 1 + is_ignore_list ) { int i; // single test single_test = TRUE; for (i = 1 + is_ignore_list; i < argc; i++) { // run given test run_test(argv[i]); } } else { // run all tests DIR *dir = opendir(test_dir); DIR *entry; char test[NAME_MAX]; char *p; // single test single_test = FALSE; if (dir == NULL) { die("Unable to open tests directory."); } while((entry = readdir(dir)) != NULL) { if (!S_ISDIR(entry->d_type)) { strcpy(test, strlwr(entry->d_name)); // find the test suffix if ((p = strindex(test, TEST_SUFFIX)) != NULL) { // null terminate at the suffix *p = '\0'; // run test run_test(test); } } } closedir(dir); } // stop server mysql_stop(); log_msg(DASH); log_msg("\n"); log_msg("Ending Tests...\n"); // report stats report_stats(); // close log if (log_fd) fclose(log_fd); // keep results up pressanykey(); return 0; }