Hi!
> If testcase calls tst_brkm(...) to terminate test, usually we need
> to serch the message outputted by tst_brkm() to locate it in test
> program, it is inefficient, especially we have multiple same messages,
> so here we choose to make tst_brkm output extra information about
> source files and line number. Also make similar change to tst_resm().
> 
> E.g.:
> We execute getxattr01 before this patch:
> [root@localhost getxattr]# ./getxattr01
> getxattr01    1  TCONF  :  No xattr support in fs or mount without user_xattr 
> option
> getxattr01    2  TCONF  :  Remaining cases not appropriate for configuration
> 
> After this patch:
> [root@localhost getxattr]# ./getxattr01
> getxattr01    1  TCONF  :  getxattr01.c:158: No xattr support in fs or mount 
> without user_xattr option
> getxattr01    2  TCONF  :  Remaining cases not appropriate for configuration
> 
> Signed-off-by: Xiaoguang Wang <wangxg.f...@cn.fujitsu.com>
> ---
>  lib/tst_res.c | 121 
> ++++++++++++++++++++++++++++------------------------------
>  1 file changed, 58 insertions(+), 63 deletions(-)
> 
> diff --git a/lib/tst_res.c b/lib/tst_res.c
> index 0383c98..d27fdd0 100644
> --- a/lib/tst_res.c
> +++ b/lib/tst_res.c
> @@ -36,12 +36,12 @@
>   *    OS Testing - Silicon Graphics, Inc.
>   *
>   *    FUNCTION NAME     :
> - *      tst_res() -       Print result message (include file contents)
> - *      tst_resm() -      Print result message
> - *      tst_resm_hexd() - Print result message (add buffer contents in hex)
> - *      tst_brk() -       Print result message (include file contents)
> + *      tst_res_() -       Print result message (include file contents)
> + *      tst_resm_() -      Print result message
> + *      tst_resm_hexd_() - Print result message (add buffer contents in hex)
> + *      tst_brk_() -       Print result message (include file contents)
>   *                        and break remaining test cases
> - *      tst_brkm() -      Print result message and break remaining test
> + *      tst_brkm_() -      Print result message and break remaining test
>   *                        cases
>   *      tst_flush() -     Print any messages pending in the output stream
>   *      tst_exit() -      Exit test with a meaningful exit value.
> @@ -49,35 +49,6 @@
>   *
>   *    FUNCTION TITLE    : Standard automated test result reporting mechanism
>   *
> - *    SYNOPSIS:
> - *      #include "test.h"
> - *
> - *      void tst_res(ttype, fname, tmesg [,arg]...)
> - *      int  ttype;
> - *      char *fname;
> - *      char *tmesg;
> - *
> - *      void tst_resm(ttype, tmesg [,arg]...)
> - *      int  ttype;
> - *      char *tmesg;
> - *
> - *      void tst_brk(ttype, fname, cleanup, tmesg, [,argv]...)
> - *      int  ttype;
> - *      char *fname;
> - *      void (*cleanup)();
> - *      char *tmesg;
> - *
> - *      void tst_brkm(ttype, cleanup, tmesg [,arg]...)
> - *      int  ttype;
> - *      void (*cleanup)();
> - *      char *tmesg;
> - *
> - *      void tst_flush()
> - *
> - *      void tst_exit()
> - *
> - *      int  tst_environ()
> - *
>   *    AUTHOR            : Kent Rogers (from Dave Fenner's original)
>   *
>   *    CO-PILOT          : Rich Logan
> @@ -224,25 +195,29 @@ const char *strttype(int ttype)
>  #include "signame.h"
>  
>  /*
> - * tst_res() - Main result reporting function.  Handle test information
> + * tst_res_() - Main result reporting function.  Handle test information
>   *             appropriately depending on output display mode.  Call
>   *             tst_condense() or tst_print() to actually print results.
> - *             All result functions (tst_resm(), tst_brk(), etc.)
> + *             All result functions (tst_resm_(), tst_brk_(), etc.)
>   *             eventually get here to print the results.
>   */
> -void tst_res(int ttype, const char *fname, const char *arg_fmt, ...)
> +void tst_res_(const char *file, const int lineno, int ttype,
> +     const char *fname, const char *arg_fmt, ...)
>  {
>       pthread_mutex_lock(&tmutex);
>  
>       char tmesg[USERMESG];
> +     int len = 0;
>       int ttype_result = TTYPE_RESULT(ttype);
>  
>  #if DEBUG
> -     printf("IN tst_res; tst_count = %d\n", tst_count);
> +     printf("IN tst_res_; tst_count = %d\n", tst_count);
>       fflush(stdout);
>  #endif
>  
> -     EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG);
> +     if (file && (ttype_result != TPASS && ttype_result != TINFO))
> +             len = sprintf(tmesg, "%s:%d: ", file, lineno);
> +     EXPAND_VAR_ARGS(tmesg + len, arg_fmt, USERMESG);
>  
>       /*
>        * Save the test result type by ORing ttype into the current exit
> @@ -599,23 +574,27 @@ int tst_environ(void)
>  static int tst_brk_entered = 0;
>  
>  /*
> - * tst_brk() - Fail or break current test case, and break the remaining
> + * tst_brk_() - Fail or break current test case, and break the remaining
>   *             tests cases.
>   */
> -void tst_brk(int ttype, const char *fname, void (*func) (void), const char 
> *arg_fmt, ...)
> +void tst_brk_(const char *file, const int lineno, int ttype, const char 
> *fname,
> +     void (*func)(void), const char *arg_fmt, ...)
>  {
>       pthread_mutex_lock(&tmutex);
>  
>       char tmesg[USERMESG];
> +     int len = 0;
>       int ttype_result = TTYPE_RESULT(ttype);
>  
>  #if DEBUG
> -     printf("IN tst_brk\n");
> +     printf("IN tst_brk_\n");
>       fflush(stdout);
>       fflush(stdout);
>  #endif
>  
> -     EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG);
> +     if (file)
> +             len = sprintf(tmesg, "%s:%d: ", file, lineno);
> +     EXPAND_VAR_ARGS(tmesg + len, arg_fmt, USERMESG);
                                               ^
                                               technically this should
                                               be (USERMESG - len)

Moreover why do we add the file and line to the buffer here when we can
pass it to the tst_res_ below and keep only one copy of the code?

>       /*
>        * Only FAIL, BROK, CONF, and RETR are supported by tst_brk().
> @@ -629,14 +608,16 @@ void tst_brk(int ttype, const char *fname, void (*func) 
> (void), const char *arg_
>               ttype = (ttype & ~ttype_result) | TBROK;
>       }
>  
> -     tst_res(ttype, fname, "%s", tmesg);
> +     tst_res_(NULL, 0, ttype, fname, "%s", tmesg);
>       if (tst_brk_entered == 0) {
> -             if (ttype_result == TCONF)
> -                     tst_res(ttype, NULL,
> +             if (ttype_result == TCONF) {
> +                     tst_res_(NULL, 0, ttype, NULL,
>                               "Remaining cases not appropriate for "
>                               "configuration");
> -             else if (ttype_result == TBROK)
> -                     tst_res(TBROK, NULL, "Remaining cases broken");
> +             } else if (ttype_result == TBROK) {
> +                     tst_res_(NULL, 0, TBROK, NULL,
> +                              "Remaining cases broken");
> +             }
>       }
>  
>       /*
> @@ -655,10 +636,13 @@ void tst_brk(int ttype, const char *fname, void (*func) 
> (void), const char *arg_
>  }
>  
>  /*
> - * tst_resm() - Interface to tst_res(), with no filename.
> + * tst_resm_() - Interface to tst_res(), with no filename.
>   */
> -void tst_resm(int ttype, const char *arg_fmt, ...)
> +void tst_resm_(const char *file, const int lineno, int ttype,
> +     const char *arg_fmt, ...)
>  {
> +     int len = 0;
> +     int ttype_result = TTYPE_RESULT(ttype);
>       char tmesg[USERMESG];
>  
>  #if DEBUG
> @@ -667,27 +651,35 @@ void tst_resm(int ttype, const char *arg_fmt, ...)
>       fflush(stdout);
>  #endif
>  
> -     EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG);
> +     if (ttype_result != TPASS && ttype_result != TINFO)
> +             len = sprintf(tmesg, "%s:%d: ", file, lineno);
> +     EXPAND_VAR_ARGS(tmesg + len, arg_fmt, USERMESG);
> +

Same here, why can't we just pass the file and line to the tst_res_
instead?

And the same for the rest of the code.

-- 
Cyril Hrubis
chru...@suse.cz

------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to