LTP GCOV extension - code coverage report
Current view: directory - storage/maria/unittest - test_file.c
Test: mtr_and_unit.info
Date: 2009-03-05 Instrumented lines: 28
Code covered: 60.7 % Executed lines: 17

       1                 : /* Copyright (C) 2006-2008 MySQL AB
       2                 : 
       3                 :    This program is free software; you can redistribute it and/or modify
       4                 :    it under the terms of the GNU General Public License as published by
       5                 :    the Free Software Foundation; version 2 of the License.
       6                 : 
       7                 :    This program is distributed in the hope that it will be useful,
       8                 :    but WITHOUT ANY WARRANTY; without even the implied warranty of
       9                 :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      10                 :    GNU General Public License for more details.
      11                 : 
      12                 :    You should have received a copy of the GNU General Public License
      13                 :    along with this program; if not, write to the Free Software
      14                 :    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
      15                 : 
      16                 : #include <tap.h>
      17                 : #include <my_sys.h>
      18                 : #include <my_dir.h>
      19                 : #include "test_file.h"
      20                 : 
      21                 : 
      22                 : /*
      23                 :   Check that file contance correspond to descriptor
      24                 : 
      25                 :   SYNOPSIS
      26                 :     test_file()
      27                 :     file                 File to test
      28                 :     file_name            Path (and name) of file which is tested
      29                 :     size                 size of file
      30                 :     buff_size            size of buffer which is enought to check the file
      31                 :     desc                 file descriptor to check with
      32                 : 
      33                 :   RETURN
      34                 :     1 file if OK
      35                 :     0 error
      36                 : */
      37                 : 
      38                 : int test_file(PAGECACHE_FILE file, char *file_name,
      39                 :               off_t size, size_t buff_size, struct file_desc *desc)
      40              22 : {
      41              22 :   unsigned char *buffr= my_malloc(buff_size, MYF(0));
      42              22 :   off_t pos= 0;
      43                 :   size_t byte;
      44              22 :   int step= 0;
      45              22 :   int res= 1;                                   /* ok */
      46                 : 
      47                 : #ifdef __WIN__
      48                 :   /*
      49                 :     On Windows, the info returned by stat(), specifically file length
      50                 :     is not necessarily current, because this is the behavior of
      51                 :     underlying FindFirstFile() function.
      52                 :   */
      53                 :   WIN32_FILE_ATTRIBUTE_DATA file_attr;
      54                 :   LARGE_INTEGER li;
      55                 :   if(GetFileAttributesEx(file_name, GetFileExInfoStandard, &file_attr) == 0)
      56                 :   {
      57                 :     diag("Can't GetFileAttributesEx %s (errno: %d)\n", file_name,
      58                 :       GetLastError());
      59                 :     res= 0;
      60                 :     goto err;
      61                 :   }
      62                 :   li.HighPart= file_attr.nFileSizeHigh;
      63                 :   li.LowPart=  file_attr.nFileSizeLow;
      64                 :   if(li.QuadPart !=  size)
      65                 :   {
      66                 :     diag("file %s size is %llu (should be %llu)\n",
      67                 :       file_name, (ulonglong)size, (ulonglong)li.QuadPart);
      68                 :     res= 0;                                       /* failed */
      69                 :     /* continue to get more information */
      70                 :   }
      71                 : #else
      72                 :   MY_STAT stat_buff, *stat;
      73              22 :   if ((stat= my_stat(file_name, &stat_buff, MYF(0))) == NULL)
      74                 :   {
      75               0 :     diag("Can't stat() %s (errno: %d)\n", file_name, errno);
      76               0 :     res= 0;
      77               0 :     goto err;
      78                 :   }
      79              22 :   if (stat->st_size != size)
      80                 :   {
      81               0 :     diag("file %s size is %lu (should be %lu)\n",
      82                 :          file_name, (ulong) stat->st_size, (ulong) size);
      83               0 :     res= 0;                                       /* failed */
      84                 :     /* continue to get more information */
      85                 :   }
      86                 : #endif
      87                 : 
      88                 :   /* check content */
      89              22 :   my_seek(file.file, 0, SEEK_SET, MYF(MY_WME));
      90           41030 :   while (desc[step].length != 0)
      91                 :   {
      92           40986 :     if (my_read(file.file, buffr, desc[step].length, MYF(0)) !=
      93                 :         desc[step].length)
      94                 :     {
      95               0 :       diag("Can't read %u bytes from %s (file: %d  errno: %d)\n",
      96                 :            (uint)desc[step].length, file_name, file.file, errno);
      97               0 :       res= 0;
      98               0 :       goto err;
      99                 :     }
     100       188895258 :     for (byte= 0; byte < desc[step].length; byte++)
     101                 :     {
     102       188854272 :       if (buffr[byte] != desc[step].content)
     103                 :       {
     104               0 :         diag("content of %s mismatch 0x%x in position %lu instead of 0x%x\n",
     105                 :              file_name, (uint) buffr[byte], (ulong) (pos + byte),
     106                 :              desc[step].content);
     107               0 :         res= 0;
     108               0 :         goto err;
     109                 :       }
     110                 :     }
     111           40986 :     pos+= desc[step].length;
     112           40986 :     step++;
     113                 :   }
     114                 : 
     115              22 : err:
     116              22 :   my_free(buffr, 0);
     117              22 :   return res;
     118                 : }

Generated by: LTP GCOV extension version 1.4