From 22c1dff62209c2631c5ba27bf0a368379d231120 Mon Sep 17 00:00:00 2001 From: Sebastian Messmer Date: Thu, 27 Nov 2014 15:23:51 +0100 Subject: [PATCH] Refactor FuseReadReturnedDataTest to make VirtualTestFile reusable for the upcoming write tests --- src/test/testutils/VirtualTestFile.cpp | 44 ++++++++++++++++++++++++++ src/test/testutils/VirtualTestFile.h | 33 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 src/test/testutils/VirtualTestFile.cpp create mode 100644 src/test/testutils/VirtualTestFile.h diff --git a/src/test/testutils/VirtualTestFile.cpp b/src/test/testutils/VirtualTestFile.cpp new file mode 100644 index 00000000..e9f936ea --- /dev/null +++ b/src/test/testutils/VirtualTestFile.cpp @@ -0,0 +1,44 @@ +#include "VirtualTestFile.h" + +#include +#include + +using std::min; + +VirtualTestFile::VirtualTestFile(size_t size): _fileData(new char[size]), _size(size) { + fillFileWithRandomData(); +} + +VirtualTestFile::~VirtualTestFile() { + delete[] _fileData; +} + +void VirtualTestFile::fillFileWithRandomData() { + long long int val = 1; + for(size_t i=0; i<_size/sizeof(long long int); ++i) { + //MMIX linear congruential generator + val *= 6364136223846793005L; + val += 1442695040888963407; + reinterpret_cast(_fileData)[i] = val; + } +} + +int VirtualTestFile::read(void *buf, size_t count, off_t offset) { + size_t realCount = min(count, _size - offset); + memcpy(buf, _fileData+offset, realCount); + return realCount; +} + +bool VirtualTestFile::fileContentEqual(char *content, size_t count, off_t offset) { + return 0 == memcmp(content, _fileData + offset, count); +} + +VirtualTestFileWriteable::VirtualTestFileWriteable(size_t size) + :VirtualTestFile(size) { + originalFileData = new char[size]; + memcpy(originalFileData, _fileData, size); +} + +VirtualTestFileWriteable::~VirtualTestFileWriteable() { + delete[] originalFileData; +} diff --git a/src/test/testutils/VirtualTestFile.h b/src/test/testutils/VirtualTestFile.h new file mode 100644 index 00000000..01b8cc7f --- /dev/null +++ b/src/test/testutils/VirtualTestFile.h @@ -0,0 +1,33 @@ +#pragma once +#ifndef TEST_TESTUTILS_VIRTUALTESTFILE_H_ +#define TEST_TESTUTILS_VIRTUALTESTFILE_H_ + +#include + +class VirtualTestFile { +public: + VirtualTestFile(size_t size); + virtual ~VirtualTestFile(); + + int read(void *buf, size_t count, off_t offset); + + // Return true, iff the given data is equal to the data of the file at the given offset. + bool fileContentEqual(char *content, size_t count, off_t offset); + +protected: + char *_fileData; + size_t _size; + +private: + void fillFileWithRandomData(); +}; + +class VirtualTestFileWriteable: public VirtualTestFile { +public: + VirtualTestFileWriteable(size_t size); + virtual ~VirtualTestFileWriteable(); +private: + char *originalFileData; +}; + +#endif