Add "chmod" command to mysqltest

parent b23cb233
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
Holyfoot Holyfoot
*/ */
#define MTEST_VERSION "3.0" #define MTEST_VERSION "3.1"
#include <my_global.h> #include <my_global.h>
#include <mysql_embed.h> #include <mysql_embed.h>
...@@ -271,6 +271,7 @@ enum enum_commands { ...@@ -271,6 +271,7 @@ enum enum_commands {
Q_DISABLE_PARSING, Q_ENABLE_PARSING, Q_DISABLE_PARSING, Q_ENABLE_PARSING,
Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST, Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST,
Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT, Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE, Q_EXIT,
Q_CHMOD_FILE,
Q_UNKNOWN, /* Unknown command. */ Q_UNKNOWN, /* Unknown command. */
Q_COMMENT, /* Comments, ignored. */ Q_COMMENT, /* Comments, ignored. */
...@@ -353,6 +354,7 @@ const char *command_names[]= ...@@ -353,6 +354,7 @@ const char *command_names[]=
"die", "die",
/* Don't execute any more commands, compare result */ /* Don't execute any more commands, compare result */
"exit", "exit",
"chmod",
0 0
}; };
...@@ -1808,6 +1810,46 @@ void do_copy_file(struct st_command *command) ...@@ -1808,6 +1810,46 @@ void do_copy_file(struct st_command *command)
} }
/*
SYNOPSIS
do_chmod_file
command command handle
DESCRIPTION
chmod <octal> <file>
Change file permission of <file>
*/
void do_chmod_file(struct st_command *command)
{
ulong mode= 0;
static DYNAMIC_STRING ds_mode;
static DYNAMIC_STRING ds_file;
const struct command_arg chmod_file_args[] = {
"mode", ARG_STRING, TRUE, &ds_mode, "Mode of file",
"file", ARG_STRING, TRUE, &ds_file, "Filename of file to modify"
};
DBUG_ENTER("do_chmod_file");
check_command_args(command, command->first_argument,
chmod_file_args,
sizeof(chmod_file_args)/sizeof(struct command_arg),
' ');
/* Parse what mode to set */
if (ds_mode.length != 4 ||
str2int(ds_mode.str, 8, 0, INT_MAX, &mode) == NullS)
die("You must write a 4 digit octal number for mode");
DBUG_PRINT("info", ("chmod %o %s", (uint)mode, ds_file.str));
handle_command_error(command, chmod(ds_file.str, mode));
dynstr_free(&ds_mode);
dynstr_free(&ds_file);
DBUG_VOID_RETURN;
}
/* /*
SYNOPSIS SYNOPSIS
do_file_exists do_file_exists
...@@ -5693,6 +5735,7 @@ int main(int argc, char **argv) ...@@ -5693,6 +5735,7 @@ int main(int argc, char **argv)
case Q_FILE_EXIST: do_file_exist(command); break; case Q_FILE_EXIST: do_file_exist(command); break;
case Q_WRITE_FILE: do_write_file(command); break; case Q_WRITE_FILE: do_write_file(command); break;
case Q_COPY_FILE: do_copy_file(command); break; case Q_COPY_FILE: do_copy_file(command); break;
case Q_CHMOD_FILE: do_chmod_file(command); break;
case Q_PERL: do_perl(command); break; case Q_PERL: do_perl(command); break;
case Q_DELIMITER: case Q_DELIMITER:
do_delimiter(command); do_delimiter(command);
......
...@@ -512,6 +512,12 @@ mysqltest: At line 1: End of line junk detected: "write_file filename "; ...@@ -512,6 +512,12 @@ mysqltest: At line 1: End of line junk detected: "write_file filename ";
mysqltest: At line 1: Missing required argument 'filename' to command 'file_exists' mysqltest: At line 1: Missing required argument 'filename' to command 'file_exists'
mysqltest: At line 1: Missing required argument 'from_file' to command 'copy_file' mysqltest: At line 1: Missing required argument 'from_file' to command 'copy_file'
mysqltest: At line 1: Missing required argument 'to_file' to command 'copy_file' mysqltest: At line 1: Missing required argument 'to_file' to command 'copy_file'
mysqltest: At line 1: Missing required argument 'mode' to command 'chmod'
mysqltest: At line 1: You must write a 4 digit octal number for mode
mysqltest: At line 1: You must write a 4 digit octal number for mode
mysqltest: At line 1: Missing required argument 'file' to command 'chmod'
mysqltest: At line 1: You must write a 4 digit octal number for mode
mysqltest: At line 1: You must write a 4 digit octal number for mode
hello hello
hello hello
hello hello
......
...@@ -1521,6 +1521,46 @@ remove_file $MYSQLTEST_VARDIR/tmp/file2.tmp; ...@@ -1521,6 +1521,46 @@ remove_file $MYSQLTEST_VARDIR/tmp/file2.tmp;
--error 1 --error 1
--exec echo "copy_file from_file;" | $MYSQL_TEST 2>&1 --exec echo "copy_file from_file;" | $MYSQL_TEST 2>&1
# ----------------------------------------------------------------------------
# test for chmod
# ----------------------------------------------------------------------------
--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
file1
EOF
chmod 0000 $MYSQLTEST_VARDIR/tmp/file1.tmp;
# The below write fails, but --error is not implemented
# for write_file
#--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
#test should fail
#EOF
chmod 0777 $MYSQLTEST_VARDIR/tmp/file1.tmp;
--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
test2
EOF
remove_file $MYSQLTEST_VARDIR/tmp/file1.tmp;
--error 1
--exec echo "chmod ;" | $MYSQL_TEST 2>&1
--error 1
--exec echo "chmod 0 from_file;" | $MYSQL_TEST 2>&1
--error 1
--exec echo "chmod 08 from_file;" | $MYSQL_TEST 2>&1
--error 1
--exec echo "chmod from_file;" | $MYSQL_TEST 2>&1
--error 1
--exec echo "chmod ABZD from_file;" | $MYSQL_TEST 2>&1
--error 1
--exec echo "chmod 06789 from_file;" | $MYSQL_TEST 2>&1
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
# test for perl # test for perl
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment