kunit: add is_init test attribute
Add is_init test attribute of type bool. Add to_string, get, and filter methods to lib/kunit/attributes.c. Mark each of the tests in the init section with the is_init=true attribute. Add is_init to the attributes documentation. Reviewed-by: David Gow <davidgow@google.com> Signed-off-by: Rae Moar <rmoar@google.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
parent
2cf4528157
commit
6c4ea2f48d
@ -428,3 +428,10 @@ This attribute indicates the name of the module associated with the test.
|
||||
|
||||
This attribute is automatically saved as a string and is printed for each suite.
|
||||
Tests can also be filtered using this attribute.
|
||||
|
||||
``is_init``
|
||||
|
||||
This attribute indicates whether the test uses init data or functions.
|
||||
|
||||
This attribute is automatically saved as a boolean and tests can also be
|
||||
filtered using this attribute.
|
||||
|
@ -253,6 +253,7 @@ struct kunit_suite {
|
||||
struct dentry *debugfs;
|
||||
struct string_stream *log;
|
||||
int suite_init_err;
|
||||
bool is_init;
|
||||
};
|
||||
|
||||
/* Stores an array of suites, end points one past the end */
|
||||
|
@ -58,6 +58,16 @@ static const char *attr_enum_to_string(void *attr, const char * const str_list[]
|
||||
return str_list[val];
|
||||
}
|
||||
|
||||
static const char *attr_bool_to_string(void *attr, bool *to_free)
|
||||
{
|
||||
bool val = (bool)attr;
|
||||
|
||||
*to_free = false;
|
||||
if (val)
|
||||
return "true";
|
||||
return "false";
|
||||
}
|
||||
|
||||
static const char *attr_speed_to_string(void *attr, bool *to_free)
|
||||
{
|
||||
return attr_enum_to_string(attr, speed_str_list, to_free);
|
||||
@ -166,6 +176,37 @@ static int attr_string_filter(void *attr, const char *input, int *err)
|
||||
return false;
|
||||
}
|
||||
|
||||
static int attr_bool_filter(void *attr, const char *input, int *err)
|
||||
{
|
||||
int i, input_int = -1;
|
||||
long val = (long)attr;
|
||||
const char *input_str = NULL;
|
||||
|
||||
for (i = 0; input[i]; i++) {
|
||||
if (!strchr(op_list, input[i])) {
|
||||
input_str = input + i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!input_str) {
|
||||
*err = -EINVAL;
|
||||
pr_err("kunit executor: filter value not found: %s\n", input);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!strcmp(input_str, "true"))
|
||||
input_int = (int)true;
|
||||
else if (!strcmp(input_str, "false"))
|
||||
input_int = (int)false;
|
||||
else {
|
||||
*err = -EINVAL;
|
||||
pr_err("kunit executor: invalid filter input: %s\n", input);
|
||||
return false;
|
||||
}
|
||||
|
||||
return int_filter(val, input, input_int, err);
|
||||
}
|
||||
|
||||
/* Get Attribute Methods */
|
||||
|
||||
@ -194,6 +235,17 @@ static void *attr_module_get(void *test_or_suite, bool is_test)
|
||||
return (void *) "";
|
||||
}
|
||||
|
||||
static void *attr_is_init_get(void *test_or_suite, bool is_test)
|
||||
{
|
||||
struct kunit_suite *suite = is_test ? NULL : test_or_suite;
|
||||
struct kunit_case *test = is_test ? test_or_suite : NULL;
|
||||
|
||||
if (test)
|
||||
return ((void *) NULL);
|
||||
else
|
||||
return ((void *) suite->is_init);
|
||||
}
|
||||
|
||||
/* List of all Test Attributes */
|
||||
|
||||
static struct kunit_attr kunit_attr_list[] = {
|
||||
@ -212,6 +264,14 @@ static struct kunit_attr kunit_attr_list[] = {
|
||||
.filter = attr_string_filter,
|
||||
.attr_default = (void *)"",
|
||||
.print = PRINT_SUITE,
|
||||
},
|
||||
{
|
||||
.name = "is_init",
|
||||
.get_attr = attr_is_init_get,
|
||||
.to_string = attr_bool_to_string,
|
||||
.filter = attr_bool_filter,
|
||||
.attr_default = (void *)false,
|
||||
.print = PRINT_SUITE,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -300,6 +300,7 @@ struct kunit_suite_set kunit_merge_suite_sets(struct kunit_suite_set init_suite_
|
||||
struct kunit_suite_set total_suite_set = {NULL, NULL};
|
||||
struct kunit_suite **total_suite_start = NULL;
|
||||
size_t init_num_suites, num_suites, suite_size;
|
||||
int i = 0;
|
||||
|
||||
init_num_suites = init_suite_set.end - init_suite_set.start;
|
||||
num_suites = suite_set.end - suite_set.start;
|
||||
@ -310,8 +311,11 @@ struct kunit_suite_set kunit_merge_suite_sets(struct kunit_suite_set init_suite_
|
||||
if (!total_suite_start)
|
||||
return total_suite_set;
|
||||
|
||||
/* Append init suites and then all other kunit suites */
|
||||
/* Append and mark init suites and then append all other kunit suites */
|
||||
memcpy(total_suite_start, init_suite_set.start, init_num_suites * suite_size);
|
||||
for (i = 0; i < init_num_suites; i++)
|
||||
total_suite_start[i]->is_init = true;
|
||||
|
||||
memcpy(total_suite_start + init_num_suites, suite_set.start, num_suites * suite_size);
|
||||
|
||||
/* Set kunit suite set start and end */
|
||||
|
Loading…
Reference in New Issue
Block a user