gpu: nvgpu: unit: Argument to run single unit

Specify a unit to run from the command line, especially useful
as the number of units is increasing. The argument behaves as
a wildcard. All units that contain the argument in the name will
be executed.

JIRA NVGPU-1246

Change-Id: Ia650929751a0acd83fc034fbeb0fd7df8d39e48d
Signed-off-by: Nicolas Benech <nbenech@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1967082
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: Philip Elcan <pelcan@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Alex Waterman <alexw@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Nicolas Benech
2018-12-06 15:04:24 -05:00
committed by mobile promotions
parent 9d92695e97
commit 48648cfc58
4 changed files with 31 additions and 4 deletions

View File

@@ -48,6 +48,7 @@ struct unit_fw_args {
const char *unit_name;
const char *unit_load_path;
const char *unit_to_run;
};
int core_parse_args(struct unit_fw *fw, int argc, char **argv);

View File

@@ -155,5 +155,13 @@ int core_parse_args(struct unit_fw *fw, int argc, char **argv)
}
}
/*
* If there is an extra argument after the command-line options, then
* it is a unit test name that need to be specifically run.
*/
if (optind < argc) {
args->unit_to_run = argv[optind];
}
return 0;
}

View File

@@ -77,6 +77,14 @@ static struct unit_module *load_one_module(struct unit_fw *fw,
core_vbs(fw, 1, "Loading: %s\n", dent->d_name);
if (fw->args->unit_to_run != NULL) {
if (strstr(dent->d_name, fw->args->unit_to_run) == NULL) {
core_vbs(fw, 1, " Skipping unit (not *%s*)\n",
fw->args->unit_to_run);
return NULL;
}
}
lib_handle = dlopen(dent->d_name, RTLD_NOW);
if (lib_handle == NULL) {
core_err(fw, "Failed to load %s: %s\n",

View File

@@ -70,15 +70,25 @@ int main(int argc, char **argv)
if (ret != 0)
return ret;
if (fw->results == NULL) {
core_msg(fw, "No tests were run!\n");
return -1;
}
core_print_test_status(fw);
if (fw->results->nr_tests == 0) {
/* No tests were run */
return -1;
} else if ((fw->results->nr_tests - fw->results->nr_passing) != 0) {
if ((fw->results->nr_tests - fw->results->nr_passing) != 0) {
/* Some tests failed */
return -1;
}
if (fw->args->unit_to_run != NULL) {
/*
* Just in case (especially when running in automation), return
* a failure if only executed a subset of the units
*/
return -2;
}
return 0;
}