apr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From wr...@apache.org
Subject cvs commit: apr/test testfileinfo.c
Date Sun, 29 Dec 2002 05:51:43 GMT
wrowe       2002/12/28 21:51:43

  Modified:    test     testfileinfo.c
  Log:
    After recovering the 'manditory' bits, confirm that fields are identical
    one-by-one for diagnostics.  You can't simply memcmp() all of the fields,
    such as ->valid, because some platforms don't obtain the same information
    from both the stat() of a filename and the getfileinfo() of an open handle.
  
    Even the filename is "unknowable" against a file handle, since one of many
    filenames could have been used to access that file.
  
    Finally, there is one test that (correctly) fails, the APR_FINFO_PROT
    values on Win32 don't agree.  I suspect we are really getting the perms
    of the 'open file handle' rather than the 'filesystem object'.  Researching.
  
  Revision  Changes    Path
  1.7       +61 -27    apr/test/testfileinfo.c
  
  Index: testfileinfo.c
  ===================================================================
  RCS file: /home/cvs/apr/test/testfileinfo.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- testfileinfo.c	19 Dec 2002 21:18:10 -0000	1.6
  +++ testfileinfo.c	29 Dec 2002 05:51:43 -0000	1.7
  @@ -84,29 +84,59 @@
       {0,                NULL}
   }; 
   
  -static int finfo_equal(apr_finfo_t f1, apr_finfo_t f2)
  +static void finfo_equal(CuTest *tc, apr_finfo_t f1, apr_finfo_t f2)
   {
  -    return (f1.valid == f2.valid &&
  -            f1.protection == f2.protection &&
  -            f1.filetype == f2.filetype &&
  -            f1.user == f2.user &&
  -            f1.group == f2.group &&
  -            f1.inode == f2.inode &&
  -            f1.device == f2.device &&
  -            f1.nlink == f2.nlink &&
  -            f1.size == f2.size &&
  -/*  Can't check csize, we don't fill it out, which makes me wonder why it
  - *  is still there.
  - *          f1.csize == f2.csize &&
  - */
  -            f1.atime == f2.atime &&
  -            f1.mtime == f2.mtime &&
  -            f1.ctime == f2.ctime &&
  -            !strcmp(f1.fname, f2.fname));
  -/*  We also can't check name, because it is only ever set on Unix.  This 
  - *  means that we have non-portable fields in a transparant structure.
  -            !strcmp(f1.name, f2.name));
  - */
  +    /* Minimum supported flags across all platforms (APR_FINFO_MIN) */
  +    CuAssert(tc, "apr_stat and apr_getfileinfo must return APR_FINFO_TYPE",
  +             (f1.valid & f2.valid & APR_FINFO_TYPE));
  +    CuAssert(tc, "apr_stat and apr_getfileinfo differ in filetype",
  +             f1.filetype == f2.filetype);
  +    CuAssert(tc, "apr_stat and apr_getfileinfo must return APR_FINFO_SIZE",
  +             (f1.valid & f2.valid & APR_FINFO_SIZE));
  +    CuAssert(tc, "apr_stat and apr_getfileinfo differ in size",
  +             f1.size == f2.size);
  +    CuAssert(tc, "apr_stat and apr_getfileinfo must return APR_FINFO_ATIME",
  +             (f1.valid & f2.valid & APR_FINFO_ATIME));
  +    CuAssert(tc, "apr_stat and apr_getfileinfo differ in atime",
  +             f1.atime == f2.atime);
  +    CuAssert(tc, "apr_stat and apr_getfileinfo must return APR_FINFO_MTIME",
  +             (f1.valid & f2.valid & APR_FINFO_MTIME));
  +    CuAssert(tc, "apr_stat and apr_getfileinfo differ in mtime",
  +             f1.mtime == f2.mtime);
  +    CuAssert(tc, "apr_stat and apr_getfileinfo must return APR_FINFO_CTIME",
  +             (f1.valid & f2.valid & APR_FINFO_CTIME));
  +    CuAssert(tc, "apr_stat and apr_getfileinfo differ in ctime",
  +             f1.ctime == f2.ctime);
  +
  +    if (f1.valid & f2.valid & APR_FINFO_NAME)
  +        CuAssert(tc, "apr_stat and apr_getfileinfo differ in name",
  +                 !strcmp(f1.name, f2.name));
  +    if (f1.fname && f2.fname)
  +        CuAssert(tc, "apr_stat and apr_getfileinfo differ in fname",
  +                 !strcmp(f1.fname, f2.fname));
  +
  +    /* Additional supported flags not supported on all platforms */
  +    if (f1.valid & f2.valid & APR_FINFO_USER)
  +        CuAssert(tc, "apr_stat and apr_getfileinfo differ in user",
  +                 !apr_uid_compare(f1.user, f2.user));
  +    if (f1.valid & f2.valid & APR_FINFO_GROUP)
  +        CuAssert(tc, "apr_stat and apr_getfileinfo differ in group",
  +                 !apr_gid_compare(f1.group, f2.group));
  +    if (f1.valid & f2.valid & APR_FINFO_INODE)
  +        CuAssert(tc, "apr_stat and apr_getfileinfo differ in inode",
  +                 f1.inode == f2.inode);
  +    if (f1.valid & f2.valid & APR_FINFO_DEV)
  +        CuAssert(tc, "apr_stat and apr_getfileinfo differ in device",
  +                 f1.device == f2.device);
  +    if (f1.valid & f2.valid & APR_FINFO_NLINK)
  +        CuAssert(tc, "apr_stat and apr_getfileinfo differ in nlink",
  +                 f1.nlink == f2.nlink);
  +    if (f1.valid & f2.valid & APR_FINFO_CSIZE)
  +        CuAssert(tc, "apr_stat and apr_getfileinfo differ in csize",
  +                 f1.csize == f2.csize);
  +    if (f1.valid & f2.valid & APR_FINFO_PROT)
  +        CuAssert(tc, "apr_stat and apr_getfileinfo differ in protection",
  +                 f1.protection == f2.protection);
   }
   
   static void test_info_get(CuTest *tc)
  @@ -161,16 +191,20 @@
       apr_finfo_t stat_finfo;
       apr_status_t rv;
   
  -    rv = apr_stat(&stat_finfo, FILENAME, APR_FINFO_NORM, p);
  -    CuAssertIntEquals(tc, APR_SUCCESS, rv);
  -
       rv = apr_file_open(&thefile, FILENAME, APR_READ, APR_OS_DEFAULT, p);
       CuAssertIntEquals(tc, APR_SUCCESS, rv);
       rv = apr_file_info_get(&finfo, APR_FINFO_NORM, thefile);
  +
  +    /* Opening the file may have toggled the atime member (time last
  +     * accessed), so fetch our apr_stat() after getting the fileinfo 
  +     * of the open file...
  +     */
  +    rv = apr_stat(&stat_finfo, FILENAME, APR_FINFO_NORM, p);
  +    CuAssertIntEquals(tc, APR_SUCCESS, rv);
  +
       apr_file_close(thefile);
   
  -    CuAssert(tc, "results from apr_stat are not identical to results "
  -                 "from apr_finfo", finfo_equal(stat_finfo, finfo));
  +    finfo_equal(tc, stat_finfo, finfo);
   }
   
   CuSuite *testfileinfo(void)
  
  
  

Mime
View raw message