[LTP] [PATCH 1/2] lib: Add support for test tags
Li Wang
liwang@redhat.com
Tue Oct 15 07:12:34 CEST 2019
On Mon, Oct 14, 2019 at 7:25 PM Cyril Hrubis <chrubis@suse.cz> wrote:
> The newly introduced test tags are generic name-value pairs that can
> hold test metadata, the intended use for now is to store kernel commit
> hashes for kernel reproducers as well as CVE ids. The mechanism is
> however choosen to be very generic so that it's easy to add basically
> any information later on.
>
> As it is the main purpose is to print hints for a test failures. If a
> test that has been written as a kernel reproducer fails it prints nice
> URL pointing to a kernel commit that may be missing.
>
Nice to see this feature patchset achieved, it looks quite clear&good to
me. Just have some tiny comments below.
>
> Example output:
>
> --------------------------------------------------------------------------
> tst_test.c:1145: INFO: Timeout per run is 0h 05m 00s
> add_key02.c:98: FAIL: unexpected error with key type 'asymmetric': EINVAL
> add_key02.c:98: FAIL: unexpected error with key type 'cifs.idmap': EINVAL
> add_key02.c:98: FAIL: unexpected error with key type 'cifs.spnego': EINVAL
> add_key02.c:98: FAIL: unexpected error with key type 'pkcs7_test': EINVAL
> add_key02.c:98: FAIL: unexpected error with key type 'rxrpc': EINVAL
> add_key02.c:98: FAIL: unexpected error with key type 'rxrpc_s': EINVAL
> add_key02.c:98: FAIL: unexpected error with key type 'user': EINVAL
> add_key02.c:98: FAIL: unexpected error with key type 'logon': EINVAL
>
> HINT: This is a regression test for linux kernel, see commit:
>
>
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5649645d725c
>
> HINT: This test also tests for CVE-2017-15274, see:
>
> https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-15274
>
> Summary:
> passed 0
> failed 8
> skipped 0
> warnings 0
> --------------------------------------------------------------------------
>
> Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
> ---
> include/tst_test.h | 10 ++++++
> lib/tst_test.c | 77 +++++++++++++++++++++++++++++++++++++++++-----
> 2 files changed, 80 insertions(+), 7 deletions(-)
>
> diff --git a/include/tst_test.h b/include/tst_test.h
> index 84acf2c59..4a51b6d16 100644
> --- a/include/tst_test.h
> +++ b/include/tst_test.h
> @@ -108,6 +108,11 @@ int tst_parse_int(const char *str, int *val, int min,
> int max);
> int tst_parse_long(const char *str, long *val, long min, long max);
> int tst_parse_float(const char *str, float *val, float min, float max);
>
> +struct tst_tag {
> + const char *name;
> + const char *value;
> +};
> +
> extern unsigned int tst_variant;
>
> struct tst_test {
> @@ -212,6 +217,11 @@ struct tst_test {
> * NULL-terminated array of capability settings
> */
> struct tst_cap *caps;
> +
> + /*
> + * {NULL, NULL} terminated array of tags.
> + */
> + const struct tst_tag *tags;
> };
>
> /*
> diff --git a/lib/tst_test.c b/lib/tst_test.c
> index 6239acf89..2129f38cb 100644
> --- a/lib/tst_test.c
> +++ b/lib/tst_test.c
> @@ -31,6 +31,9 @@
> #include "old_device.h"
> #include "old_tmpdir.h"
>
> +#define LINUX_GIT_URL "
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=
> "
> +#define CVE_DB_URL "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-"
> +
> struct tst_test *tst_test;
>
> static const char *tid;
> @@ -414,6 +417,9 @@ static void print_help(void)
> {
> unsigned int i;
>
> + fprintf(stderr, "Options\n");
> + fprintf(stderr, "-------\n\n");
> +
> for (i = 0; i < ARRAY_SIZE(options); i++)
> fprintf(stderr, "%s\n", options[i].help);
>
> @@ -424,6 +430,27 @@ static void print_help(void)
> fprintf(stderr, "%s\n", tst_test->options[i].help);
> }
>
> +static void print_test_info(void)
>
print_test_info sounds like general information for the test, maybe
print_tags() is a better/precise name?
> +{
> + unsigned int i;
> + const struct tst_tag *tags = tst_test->tags;
> +
> + printf("\nTags\n");
> + printf("----\n\n");
> +
> + if (tags) {
> + for (i = 0; tags[i].name; i++) {
> + if (!strcmp(tags[i].name, "CVE"))
> + printf(CVE_DB_URL "%s\n", tags[i].value);
> + else if (!strcmp(tags[i].name, "linux-git"))
> + printf(LINUX_GIT_URL "%s\n",
> tags[i].value);
> + else
> + printf("%s: %s\n", tags[i].name,
> tags[i].value);
> + printf("\n");
> + }
> + }
> +}
> +
> static void check_option_collision(void)
> {
> unsigned int i, j;
> @@ -499,6 +526,7 @@ static void parse_opts(int argc, char *argv[])
> break;
> case 'h':
> print_help();
> + print_test_info();
> exit(0);
> case 'i':
> iterations = atoi(optarg);
> @@ -584,26 +612,61 @@ int tst_parse_float(const char *str, float *val,
> float min, float max)
> return 0;
> }
>
> +static void print_colored(const char *str)
> +{
> + if (tst_color_enabled(STDOUT_FILENO))
> + printf("%s%s%s", ANSI_COLOR_YELLOW, str, ANSI_COLOR_RESET);
> + else
> + printf("%s", str);
> +}
> +
> +static void print_failure_hints(void)
> +{
> + unsigned int i;
> + const struct tst_tag *tags = tst_test->tags;
> +
> + if (!tags)
> + return;
> +
> + for (i = 0; tags[i].name; i++) {
> + if (!strcmp(tags[i].name, "linux-git")) {
> + printf("\n");
> + print_colored("HINT: ");
+ printf("This is a regression test for linux kernel,
> see commit:\n\n"
> + LINUX_GIT_URL "%s\n", tags[i].value);
>
This sentence 'HINT: This is a ...' will be printed many times if there are
many commits in tags, I prefer to see only once in front of these
linux-kernel links.
> + }
> +
> + if (!strcmp(tags[i].name, "CVE")) {
> + printf("\n");
> + print_colored("HINT: ");
> + printf("This test also tests for CVE-%s, see:\n\n"
> + CVE_DB_URL "%s\n", tags[i].value,
> tags[i].value);
>
Here as well.
--
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20191015/df8ab998/attachment.htm>
More information about the ltp
mailing list