FileUnitTest.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include "FileUnitTest.hpp"
  14. #include <File.hpp>
  15. #include <NdbOut.hpp>
  16. typedef bool (*TESTFUNC)(const char*);
  17. typedef const char TESTNAME;
  18. typedef struct 
  19. {
  20.   const char* name;
  21.   TESTFUNC test;
  22. }Tests;
  23. static Tests testCases[] = { {"Create/Write", &FileUnitTest::testWrite}, 
  24.                             {"Read", &FileUnitTest::testRead},
  25.                             {"Exists", &FileUnitTest::testExists},
  26.                             {"File Size", &FileUnitTest::testSize}, 
  27.                             {"Rename", &FileUnitTest::testRename},
  28.                             {"Remove", &FileUnitTest::testRemove} };
  29. static int testFailed = 0;
  30.                           
  31. int main(int argc, char* argv[])
  32. {
  33.   if (argc < 2)
  34.   {
  35.     ndbout << "Usage: filetest <filename>" << endl;
  36.     return 0;
  37.   }
  38.   const char* fileName = argv[1];
  39.   int testCount = (sizeof(testCases) / sizeof(Tests)); 
  40.   ndbout << "Starting " << testCount << " tests..." << endl;
  41.   for (int i = 0; i < testCount; i++)
  42.   {
  43.     ndbout << "-- " << " Test " << i + 1 
  44.          << " [" << testCases[i].name << "] --" << endl;
  45.     if (testCases[i].test(fileName))
  46.     {
  47.       ndbout << "-- Passed --" << endl;
  48.     }    
  49.     else
  50.     {
  51.       ndbout << "-- Failed -- " << endl;
  52.     }
  53.     
  54.   }
  55.   ndbout << endl << "-- " << testCount - testFailed << " passed, " 
  56.        << testFailed << " failed --" << endl;
  57.   return 0;
  58. }
  59. bool 
  60. FileUnitTest::testWrite(const char* aFileName)
  61. {
  62.   bool rc = true;
  63.   File f;
  64.   if (f.open(aFileName, "w"))
  65.   {  
  66.     f.writeChar("ABABABABABAB ABBABAB ABBABA ABAB JKH KJHA JHHAHAH...");
  67.     f.writeChar("12129791242 1298371923 912738912 378129837128371128132...n");    
  68.     f.close();    
  69.   }
  70.   else
  71.   {
  72.     error("testWrite failed: ");
  73.     rc = false;
  74.   }
  75.   return rc;
  76. }
  77. bool 
  78. FileUnitTest::testRead(const char* aFileName)
  79. {
  80.   bool rc = true;
  81.   // Read file
  82.   File f;
  83.   if (f.open(aFileName, "r"))
  84.   {
  85.     long size = f.size();
  86.     ndbout << "File size = " << size << endl;
  87.     ndbout << "Allocating buf of " << size << " bytes" << endl;
  88.     char* buf = new char[size];
  89.     buf[size - 1] = '';
  90.     int r = 0;
  91.     while ((r = f.readChar(buf, r, size)) > 0)
  92.     {       
  93.       ndbout << "Read(" << r << "):" << buf << endl;
  94.     }   
  95.     f.close(); 
  96.     delete buf;
  97.   }
  98.   else
  99.   {
  100.     error("readTest failed: ");
  101.     rc = false;
  102.   }  
  103.   return rc;
  104. }
  105. bool 
  106. FileUnitTest::testExists(const char* aFileName)
  107. {
  108.   bool rc = true;
  109.   if (File::exists(aFileName))
  110.   {
  111.     if (File::exists("ThisFileShouldnotbe.txt"))
  112.     {
  113.       rc = false;
  114.       error("testExists failed, the file should NOT be found.");
  115.     }
  116.   }
  117.   else
  118.   {
  119.     rc = false;
  120.     error("testExists failed, the file should exist.");    
  121.   }
  122.   
  123.   return rc;
  124. }
  125. bool 
  126. FileUnitTest::testSize(const char* aFileName)
  127. {
  128.   bool rc = true;
  129.   File f;
  130.   if (f.open(aFileName, "r"))
  131.   {
  132.     long size = f.size();
  133.     if (size <= 0)
  134.     {
  135.       rc = false;
  136.       error("testSize failed, size is <= 0");
  137.     }
  138.     ndbout << "File size = " << size << endl;
  139.   }
  140.   else
  141.   {
  142.     rc = false;
  143.     error("testSize failed, could no open file.");
  144.   }
  145.   f.close();
  146.   return rc;
  147. }
  148. bool 
  149. FileUnitTest::testRename(const char* aFileName)
  150. {
  151.   bool rc = true;
  152.   if (File::rename(aFileName, "filetest_new.txt"))
  153.   {
  154.     if (!File::exists("filetest_new.txt"))
  155.     {
  156.       rc = false;
  157.       error("testRename failed, new file does not exists.");
  158.     }
  159.     else
  160.     {
  161.       ndbout << "Renamed " << aFileName << " to filetest_new.txt" << endl;
  162.     }        
  163.   }
  164.   else
  165.   {
  166.     rc = false;
  167.     error("testRename failed, unable to rename file.");
  168.   }
  169.   
  170.   return rc;
  171. }
  172. bool 
  173. FileUnitTest::testRemove(const char* aFileName)
  174. {
  175.   bool rc = true;
  176.   File f;
  177.   if (f.open("filetest_new.txt", "r"))
  178.   {
  179.     if (!f.remove())
  180.     {
  181.       rc = false;
  182.       error("testRemove failed, could not remove file.");
  183.     }
  184.     else
  185.     {
  186.       if (File::exists("filetest_new"))
  187.       {
  188.         rc = false;
  189.         error("testRemove failed, file was not removed, it still exists.");
  190.       }      
  191.     }         
  192.   } // (f.open("filetest_new", "r"))
  193.   else
  194.   {
  195.     rc = false;
  196.     error("testRemove failed, could not read the file.");
  197.   }
  198.   
  199.  return rc;   
  200. }
  201. void  
  202. FileUnitTest::error(const char* msg)
  203. {
  204.   testFailed++;
  205.   ndbout << "Test failed: " << msg << endl;  
  206.   perror("Errno msg");
  207. }
  208. FileUnitTest::FileUnitTest()
  209. {
  210.   
  211. }
  212. FileUnitTest::~FileUnitTest()
  213. {
  214. }