----- Original Message -----
> From: "Cyril Hrubis" <chru...@suse.cz>
> To: "Jan Stancek" <jstan...@redhat.com>
> Cc: ltp-list@lists.sourceforge.net
> Sent: Tuesday, 14 October, 2014 5:47:11 PM
> Subject: Re: [LTP] [PATCH 1/2 v3] add LTP_DATAROOT and tst_dataroot()
> 
> Hi!
> > LTP_DATAROOT (test.sh) and tst_dataroot (libltp) define directory
> > which holds test data files.
> > 
> > If LTPROOT is defined, it is $LTPROOT/testcases/data/$TCID
> > otherwise it's $CWD/datafiles (where CWD is current working
> > directory, before any call to tst_tmdir())
> 
> ...
> 
> >  2.1.3 Subexecutables
> >  ^^^^^^^^^^^^^^^^^^^^
> > diff --git a/include/tst_resource.h b/include/tst_resource.h
> > index a02a313..94c24b7 100644
> > --- a/include/tst_resource.h
> > +++ b/include/tst_resource.h
> > @@ -41,6 +41,9 @@
> >  
> >  #include "test.h"
> >  
> > +void tst_dataroot_init(void);
> 
> Do we really need to export this function? The only usage for it IMHO
> will be the test for the tst_dataroot() function itself.

Yes, that's the only usage.

> I would rather
> see three tests one for each scenario and keep the test library API as
> minimal as possible.

OK, I'll look into some other way.

> 
> > +const char *tst_dataroot(void);
> > +
> 
> ...
> 
> > diff --git a/lib/tst_resource.c b/lib/tst_resource.c
> > index 54d4795..7c8deee 100644
> > --- a/lib/tst_resource.c
> > +++ b/lib/tst_resource.c
> > @@ -21,9 +21,61 @@
> >   * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> >   */
> >  
> > +#include <pthread.h>
> >  #include "tst_resource.h"
> >  #include "ltp_priv.h"
> >  
> > +#ifndef PATH_MAX
> > +#ifdef MAXPATHLEN
> > +#define PATH_MAX   MAXPATHLEN
> > +#else
> > +#define PATH_MAX   1024
> > +#endif
> > +#endif
> > +
> > +static pthread_mutex_t tmutex = PTHREAD_MUTEX_INITIALIZER;
> > +static char dataroot[PATH_MAX];
> > +extern char *TCID;
> > +
> > +void tst_dataroot_init(void)
> > +{
> > +   const char *ltproot = getenv("LTPROOT");
> > +   char curdir[PATH_MAX];
> > +   const char *startdir;
> > +   int ret;
> > +
> > +   /* 1. if LTPROOT is set, use $LTPROOT/testcases/data/$TCID
> > +    * 2. else if startwd is set by tst_tmdir(), use $STARWD/datafiles
> > +    * 3. else use $CWD/datafiles */
> > +   if (ltproot) {
> > +           ret = snprintf(dataroot, PATH_MAX, "%s/testcases/data/%s",
> > +                   ltproot, TCID);
> > +   } else {
> > +           startdir = tst_get_startwd();
> > +           if (startdir[0] == 0) {
> > +                   if (getcwd(curdir, PATH_MAX) == NULL)
> > +                           tst_brkm(TBROK | TERRNO, NULL,
> > +                                   "tst_dataroot getcwd");
> > +                   startdir = curdir;
> > +           }
> > +           ret = snprintf(dataroot, PATH_MAX, "%s/datafiles", startdir);
> > +   }
> > +
> > +   if (ret < 0 || ret >= PATH_MAX)
> > +           tst_brkm(TBROK, NULL, "tst_dataroot snprintf: %d", ret);
> > +}
> > +
> > +const char *tst_dataroot(void)
> > +{
> > +   if (dataroot[0] == 0) {
> > +           pthread_mutex_lock(&tmutex);
> > +           if (dataroot[0] == 0)
> > +                   tst_dataroot_init();
> > +           pthread_mutex_unlock(&tmutex);
> > +   }
> 
> That is a bit too preemptive but generally fine, but I would use
> pthread_once() here instead.

OK.

> 
> > +   return dataroot;
> > +}
> > +
> >  static int file_copy(const char *file, const int lineno,
> >                       void (*cleanup_fn)(void), const char *path,
> >                  const char *filename, const char *dest)
> > @@ -56,15 +108,15 @@ void tst_resource_copy(const char *file, const int
> > lineno,
> >             dest = ".";
> >  
> >     const char *ltproot = getenv("LTPROOT");
> > +   const char *dataroot = tst_dataroot();
> > +
> > +   /* look for data files in $LTP_DATAROOT, $LTPROOT/testcases/bin
> > +    * and $CWD */
> > +   if (file_copy(file, lineno, cleanup_fn, dataroot, filename, dest))
> > +           return;
> >  
> >     if (ltproot != NULL) {
> > -           /* the data are either in testcases/data or testcases/bin */
> >             char buf[strlen(ltproot) + 64];
> > -
> > -           snprintf(buf, sizeof(buf), "%s/testcases/data", ltproot);
> > -
> > -           if (file_copy(file, lineno, cleanup_fn, buf, filename, dest))
> > -                   return;
> >             
> >             snprintf(buf, sizeof(buf), "%s/testcases/bin", ltproot);
> 
> Hmm, maybe we can omit looking into testcases/bin/, since the
> directory to store datafiles is well defined now (and there does not
> seems to be any testcases that rely on that behavior).

At least creat07 needs it. It creates temporary dir and then copies
creat07_child to it - creat07_child is not treated as datafile.
I'd keep the fallback to testcases/bin - it doesn't hurt anything.

Regards,
Jan

> 
> > @@ -72,9 +124,8 @@ void tst_resource_copy(const char *file, const int
> > lineno,
> >                     return;
> >     }
> >  
> > +   /* try directory test started in as last resort */
> >     const char *startwd = tst_get_startwd();
> > -
> > -   /* try directory test started int first */
> >     if (file_copy(file, lineno, cleanup_fn, startwd, filename, dest))
> >             return;
> >  
> > diff --git a/testcases/lib/test.sh b/testcases/lib/test.sh
> > index 10282f4..eecbfba 100644
> > --- a/testcases/lib/test.sh
> > +++ b/testcases/lib/test.sh
> > @@ -144,4 +144,7 @@ export TST_TOTAL="$TST_TOTAL"
> >  # Setup LTPROOT, default to current directory if not set
> >  if [ -z "$LTPROOT" ]; then
> >     export LTPROOT="$PWD"
> > +   export LTP_DATAROOT="$LTPROOT/datafiles"
> > +else
> > +   export LTP_DATAROOT="$LTPROOT/testcases/data/$TCID"
> >  fi
> 
> 
> Otherwise it looks very good.
> 
> --
> Cyril Hrubis
> chru...@suse.cz
> 

------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://p.sf.net/sfu/Zoho
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to