MXS-929: Add errors to the modulecmd system
The modules can now return human-readable error messages to the caller of the function. The internals of the modulecmd system also use this to return errors to the users. The error messages can be retrieved with a common error function which should make it easy to use in various clients.
This commit is contained in:
@ -47,17 +47,21 @@ int test_arguments()
|
||||
const char *id = "test_arguments";
|
||||
modulecmd_arg_type_t args1[] = {MODULECMD_ARG_STRING, MODULECMD_ARG_BOOLEAN};
|
||||
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
|
||||
/**
|
||||
* Test command creation
|
||||
*/
|
||||
|
||||
TEST(modulecmd_find_command(ns, id) == NULL, "The registered command should not yet be found");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
|
||||
TEST(modulecmd_register_command(ns, id, test_fn, 2, args1),
|
||||
"Registering a command should succeed");
|
||||
|
||||
TEST(!modulecmd_register_command(ns, id, test_fn, 2, args1),
|
||||
"Registering the command a second time should fail");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
|
||||
const MODULECMD *cmd = modulecmd_find_command(ns, id);
|
||||
TEST(cmd, "The registered command should be found");
|
||||
@ -67,13 +71,20 @@ int test_arguments()
|
||||
*/
|
||||
|
||||
TEST(modulecmd_arg_parse(cmd, 0, NULL) == NULL, "Passing no arguments should fail");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
TEST(modulecmd_arg_parse(cmd, 1, params1) == NULL, "Passing one argument should fail");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
TEST(modulecmd_arg_parse(cmd, 3, params1) == NULL, "Passing three arguments should fail");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
|
||||
TEST(modulecmd_arg_parse(cmd, 2, bad_params1) == NULL, "Passing bad arguments should fail");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
TEST(modulecmd_arg_parse(cmd, 2, bad_params2) == NULL, "Passing bad arguments should fail");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
TEST(modulecmd_arg_parse(cmd, 2, bad_params3) == NULL, "Passing bad arguments should fail");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
TEST(modulecmd_arg_parse(cmd, 2, bad_params4) == NULL, "Passing bad arguments should fail");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
|
||||
/**
|
||||
* Test valid arguments
|
||||
@ -81,6 +92,7 @@ int test_arguments()
|
||||
|
||||
MODULECMD_ARG* alist = modulecmd_arg_parse(cmd, 2, params1);
|
||||
TEST(alist, "Arguments should be parsed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
|
||||
TEST(modulecmd_call_command(cmd, alist), "Module call should be successful");
|
||||
TEST(ok, "Function should receive right parameters");
|
||||
@ -95,7 +107,7 @@ int test_arguments()
|
||||
modulecmd_arg_free(alist);
|
||||
|
||||
TEST((alist = modulecmd_arg_parse(cmd, 2, params2)), "Arguments should be parsed");
|
||||
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, alist), "Module call should be successful");
|
||||
TEST(ok, "Function should receive right parameters");
|
||||
|
||||
@ -105,11 +117,14 @@ int test_arguments()
|
||||
* Test valid but wrong arguments
|
||||
*/
|
||||
TEST((alist = modulecmd_arg_parse(cmd, 2, wrong_params1)), "Arguments should be parsed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, alist), "Module call should be successful");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(!ok, "Function should receive wrong parameters");
|
||||
modulecmd_arg_free(alist);
|
||||
|
||||
TEST((alist = modulecmd_arg_parse(cmd, 2, wrong_params2)), "Arguments should be parsed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, alist), "Module call should be successful");
|
||||
TEST(!ok, "Function should receive wrong parameters");
|
||||
modulecmd_arg_free(alist);
|
||||
@ -145,32 +160,79 @@ int test_optional_arguments()
|
||||
|
||||
MODULECMD_ARG *arg = modulecmd_arg_parse(cmd, 2, params1);
|
||||
TEST(arg, "Parsing arguments should succeed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, arg), "Module call should be successful");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
modulecmd_arg_free(arg);
|
||||
|
||||
arg = modulecmd_arg_parse(cmd, 2, params2);
|
||||
TEST(arg, "Parsing arguments should succeed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, arg), "Module call should be successful");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
modulecmd_arg_free(arg);
|
||||
|
||||
arg = modulecmd_arg_parse(cmd, 2, params3);
|
||||
TEST(arg, "Parsing arguments should succeed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, arg), "Module call should be successful");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
modulecmd_arg_free(arg);
|
||||
|
||||
arg = modulecmd_arg_parse(cmd, 2, params4);
|
||||
TEST(arg, "Parsing arguments should succeed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, arg), "Module call should be successful");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
modulecmd_arg_free(arg);
|
||||
|
||||
arg = modulecmd_arg_parse(cmd, 1, params1);
|
||||
TEST(arg, "Parsing arguments should succeed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, arg), "Module call should be successful");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
modulecmd_arg_free(arg);
|
||||
|
||||
arg = modulecmd_arg_parse(cmd, 1, params2);
|
||||
TEST(arg, "Parsing arguments should succeed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, arg), "Module call should be successful");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
modulecmd_arg_free(arg);
|
||||
|
||||
arg = modulecmd_arg_parse(cmd, 0, params1);
|
||||
TEST(arg, "Parsing arguments should succeed");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
TEST(modulecmd_call_command(cmd, arg), "Module call should be successful");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
modulecmd_arg_free(arg);
|
||||
|
||||
TEST(modulecmd_call_command(cmd, NULL), "Module call should be successful");
|
||||
TEST(strlen(modulecmd_get_error()) == 0, "Error message should be empty");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool test_fn3(const MODULECMD_ARG *arg)
|
||||
{
|
||||
modulecmd_set_error("Something went wrong!");
|
||||
return false;
|
||||
}
|
||||
|
||||
int test_module_errors()
|
||||
{
|
||||
const char *ns = "test_module_errors";
|
||||
const char *id = "test_module_errors";
|
||||
|
||||
TEST(modulecmd_register_command(ns, id, test_fn3, 0, NULL),
|
||||
"Registering a command should succeed");
|
||||
|
||||
const MODULECMD *cmd = modulecmd_find_command(ns, id);
|
||||
TEST(cmd, "The registered command should be found");
|
||||
|
||||
TEST(!modulecmd_call_command(cmd, NULL), "Module call should fail");
|
||||
TEST(strlen(modulecmd_get_error()), "Error message should not be empty");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -180,6 +242,7 @@ int main(int argc, char **argv)
|
||||
|
||||
rc += test_arguments();
|
||||
rc += test_optional_arguments();
|
||||
rc += test_module_errors();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
Reference in New Issue
Block a user