Public Member Functions | Data Fields

Dedupe::Test::TestEnvironment Class Reference

#include <testenvironment.h>

Public Member Functions

 TestEnvironment (Dedupe::FilePath RootDirectory)
size_t CreateRandomInt (size_t Min, size_t Max)
Dedupe::FilePath CreateRandomPathPart (size_t MinLength, size_t MaxLength)
Dedupe::FilePath CreateRandomPathstring ()
Dedupe::FilePath CreateRandomFilename ()
Dedupe::FilePath CreateDirectory (Dedupe::FilePath IncomingPath)
Dedupe::FilePath CreateFile (Dedupe::FilePath IncomingPath, Dedupe::FilePath IncomingFilename, unsigned int FileSize)
void DeleteCreated ()

Data Fields

const Dedupe::FilePath RootDir

Detailed Description

TestEnvironment can create files and directories randomly. It is used for unittests

Definition at line 53 of file testenvironment.h.


Constructor & Destructor Documentation

Dedupe::Test::TestEnvironment::TestEnvironment ( Dedupe::FilePath  RootDirectory  ) 

Give a path object with the name of the root order Make sure the Paths contains only one deep, cause DeleteCreated() only deletes the last part of a given directorypath

Definition at line 13 of file testenvironment.cpp.

                                                :
RootDir( boost::filesystem::absolute( RootDirectory,
                                    boost::filesystem::current_path() ) )

{
  //init srand only one time
  std::srand( time( NULL ) );
}


Member Function Documentation

Dedupe::FilePath Dedupe::Test::TestEnvironment::CreateDirectory ( Dedupe::FilePath  IncomingPath  ) 

Creates a directory or a directory tree from the given path.

Returns:
the absolute path, which is created or an empty string if it fails

Definition at line 68 of file testenvironment.cpp.

References RootDir.

Referenced by CreateFile().

{
  //RootDir is const so assign to a new Path Object
   Dedupe::FilePath Path( RootDir );
   //add the relative path to the root path, now Path is a absolute path
   Path /= IncomingPath;

  //normalise path for used plattform
  Path.string();

  //create a directory or directories from the given path
  //if it fails a error message is written to cerr
  try
  {
    if( boost::filesystem::exists( Path ) ) return Path;

    boost::filesystem::create_directories( Path );
  }
  catch( boost::filesystem::filesystem_error &e )
  {
    std::cerr << e.what() << std::endl;
    return "";
  }
  if( boost::filesystem::exists( Path ) ) return Path;
  else return "";
}

Dedupe::FilePath Dedupe::Test::TestEnvironment::CreateFile ( Dedupe::FilePath  IncomingPath,
Dedupe::FilePath  IncomingFilename,
unsigned int  FileSize 
)

Creates a file at the given path.If the path don't exits, it will be created. If a char is 1 byte on your prefered system then the FileSize should be exact.

Returns:
the absolute path with file and extension or an empty string if it fails

Definition at line 96 of file testenvironment.cpp.

References CreateDirectory(), CreateRandomInt(), RootDir, and Dedupe::Test::SignSource.

{
   //RootDir is const so assign to a new Path Object
   Dedupe::FilePath Path = RootDir;

   try
   {
    //test if there is diskspace for the file
    boost::filesystem::space_info s =
    boost::filesystem::space( Path.parent_path() );
    if( s.available < FileSize )
    {
      std::cerr << "Not enought Diskspace" << std::endl;
      return "";
    }

    if( CreateDirectory( IncomingPath ) == "" )
    {
      std::cerr << "Could not create directory " << std::endl;
      return "";
    }

    Path /= IncomingPath;
    Path /= IncomingFilename;
    boost::filesystem::ofstream File;

    //open the outputstream to write the file on harddisc
    File.open( Path, std::ios_base::out );
    if( File == NULL )
    {
      std::cerr << "Could not open file: " << Path << std::endl;
      File.close();
      return "";
    }

    //add chars to the file until whished size is there
    for( size_t i = 0; i != FileSize; ++i )
    {
      File << Dedupe::Test::SignSource[
                CreateRandomInt( 0, Dedupe::Test::SignSource.size() -1 ) ];
    };

    //Close File, if the work is done
    File.close();
  }
  catch( boost::filesystem::filesystem_error &e )
  {
    std::cerr << e.what() << std::endl;
    return "";
  }
  return Path;
}

Dedupe::FilePath Dedupe::Test::TestEnvironment::CreateRandomFilename (  ) 

Creates a random Filename with extension. The size of the filename is defined with MinSize and MaxSize. The length of the extension is between 1 and 5 letters

Definition at line 151 of file testenvironment.cpp.

References CreateRandomPathPart(), Dedupe::Test::MaxSize, and Dedupe::Test::MinSize.

{
  std::string ReturningPath( "" );
  ReturningPath = CreateRandomPathPart( MinSize, MaxSize ).string() ;
  ReturningPath += ".";
  ReturningPath += CreateRandomPathPart( 1, 5 ).string() ;

  return ReturningPath;
}

size_t Dedupe::Test::TestEnvironment::CreateRandomInt ( size_t  Min,
size_t  Max 
)

Creates random int between the two given values. If Min is greater than Max the function returns 1;

Definition at line 23 of file testenvironment.cpp.

Referenced by CreateFile(), CreateRandomPathPart(), and CreateRandomPathstring().

{
  if( Max < Min ) return 1;
  return  Min + rand() % ( Max - Min + 1 );
}

Dedupe::FilePath Dedupe::Test::TestEnvironment::CreateRandomPathPart ( size_t  MinLength,
size_t  MaxLength 
)

Creates a random string with a size between the given values. If MinLength ist greater than MaxLength, the function returns "ERROR"

Definition at line 29 of file testenvironment.cpp.

References CreateRandomInt(), and Dedupe::Test::SignSource.

Referenced by CreateRandomFilename(), and CreateRandomPathstring().

{
  std::string Builder = "";

  if( MaxLength < MinLength ) return "ERROR";

  //make a random size between the constants
  size_t length =  CreateRandomInt( MinLength, MaxLength );
  do
  {
    /*select a sign from SignSource per random
    SignSource.size() -1 is important, otherwise the
    termination sign of the string is used, too*/
    Builder += Dedupe::Test::SignSource[
                CreateRandomInt( 0, Dedupe::Test::SignSource.size() -1 ) ];
  }while( Builder.size() < length );
  Dedupe::FilePath returning( Builder );
  return returning;
}

Dedupe::FilePath Dedupe::Test::TestEnvironment::CreateRandomPathstring (  ) 

Creates a random Path, while using the defined constants upside this headerfile

Definition at line 51 of file testenvironment.cpp.

References CreateRandomInt(), CreateRandomPathPart(), Dedupe::Test::MaxParts, Dedupe::Test::MaxSize, Dedupe::Test::MinParts, and Dedupe::Test::MinSize.

{
  Dedupe::FilePath Path = "";

  size_t Pathparts = CreateRandomInt( MinParts, MaxParts );
  size_t i = 0;

  do
  {
    Path /=  CreateRandomPathPart( MinSize, MaxSize );
    i++;
  }while( i < Pathparts );

  return Path;
}

void Dedupe::Test::TestEnvironment::DeleteCreated (  ) 

Deletes all created files, while deleting the Root order from constructor

Definition at line 161 of file testenvironment.cpp.

References RootDir.

{
  boost::system::error_code ec;
  boost::filesystem::remove_all( RootDir, ec );
  if( ec != 0 )
  {
    std::cerr << ec.message() << std::endl;
  }
 }


Field Documentation

Holds the absolute path to the order from the constructor

Definition at line 119 of file testenvironment.h.

Referenced by CreateDirectory(), CreateFile(), and DeleteCreated().


The documentation for this class was generated from the following files: