From df9021cc9786ce0c846c0dbae33f29a7b2b3458b Mon Sep 17 00:00:00 2001 From: Daniele Kruse <dkruse@cern.ch> Date: Fri, 4 Sep 2015 10:12:44 +0200 Subject: [PATCH] Fixed and added the DiskReadTaskTest --- .../tapeserver/daemon/DiskReadTaskTest.cpp | 115 ++++++++++-------- 1 file changed, 64 insertions(+), 51 deletions(-) diff --git a/tapeserver/castor/tape/tapeserver/daemon/DiskReadTaskTest.cpp b/tapeserver/castor/tape/tapeserver/daemon/DiskReadTaskTest.cpp index 4052bea06e..2f04d13725 100644 --- a/tapeserver/castor/tape/tapeserver/daemon/DiskReadTaskTest.cpp +++ b/tapeserver/castor/tape/tapeserver/daemon/DiskReadTaskTest.cpp @@ -23,23 +23,50 @@ #include "castor/tape/tapeserver/daemon/DiskReadTask.hpp" #include "castor/tape/tapeserver/daemon/DataConsumer.hpp" #include "castor/tape/tapeserver/daemon/MigrationMemoryManager.hpp" +#include "castor/tape/tapeserver/daemon/MigrationReportPacker.hpp" #include "castor/tape/tapeserver/daemon/MemBlock.hpp" #include "castor/log/LogContext.hpp" #include "castor/log/StringLogger.hpp" +#include "scheduler/ArchiveMount.hpp" + #include <gtest/gtest.h> #include <fstream> #include <cmath> #include <ext/stdio_filebuf.h> namespace unitTests{ - using namespace castor::tape::tapeserver::daemon; - + + class TestingArchiveMount: public cta::ArchiveMount { + public: + TestingArchiveMount(std::unique_ptr<cta::SchedulerDatabase::ArchiveMount> dbrm): ArchiveMount(std::move(dbrm)) { + } + }; + class TestingArchiveJob: public cta::ArchiveJob { public: TestingArchiveJob() { } - }; - + }; + + using namespace castor::tape::tapeserver::daemon; + using namespace castor::tape::diskFile; + + struct MockMigrationReportPacker : public MigrationReportPacker { + void reportCompletedJob(std::unique_ptr<cta::ArchiveJob> successfulArchiveJob, u_int32_t checksum, u_int64_t size) { + reportCompletedJob_(successfulArchiveJob, checksum, size); + } + + void reportFailedJob(std::unique_ptr<cta::ArchiveJob> failedArchiveJob, const castor::exception::Exception &ex) { + reportFailedJob_(failedArchiveJob, ex); + } + MOCK_METHOD3(reportCompletedJob_,void(std::unique_ptr<cta::ArchiveJob> &successfulArchiveJob, u_int32_t checksum, u_int64_t size)); + MOCK_METHOD2(reportFailedJob_, void(std::unique_ptr<cta::ArchiveJob> &failedArchiveJob, const castor::exception::Exception &ex)); + MOCK_METHOD0(reportEndOfSession, void()); + MOCK_METHOD2(reportEndOfSessionWithErrors, void(const std::string,int)); + MockMigrationReportPacker(cta::ArchiveMount *rm,castor::log::LogContext lc): + MigrationReportPacker(rm,lc){} + }; + class FakeTapeWriteTask : public DataConsumer{ castor::server::BlockingQueue<MemBlock*> fifo; unsigned long m_checksum; @@ -67,53 +94,39 @@ namespace unitTests{ in.read(&v[0],size); checksum = adler32(checksum,reinterpret_cast<unsigned char*>(&v[0]),size); out.write(&v[0],size); -// out.seekg(0, std::ios::beg); return checksum; } + + TEST(castor_tape_tapeserver_daemon, DiskReadTaskTest){ + char path[]="/tmp/testDRT-XXXXXX"; + mkstemp(path); + std::ofstream out(path,std::ios::out | std::ios::binary); + castor::server::AtomicFlag flag; + castor::log::StringLogger log("castor_tape_tapeserver_daemon_DiskReadTaskTest"); + castor::log::LogContext lc(log); + + const int blockSize=1500; + const int fileSize(1024*2000); -// This test was commented out in the CMakeLists.txt file that would have -// compiled it. There was no comment explaining why it was commented out. -// The following commit message was associated with the commenting out of the -// CMakeLists.txt line: -// -// commit 165117042951769b7d0023933cc6e705b04fad54 -// Author: David COME <david.come@cern.ch> -// Date: Tue Apr 22 11:35:11 2014 +0200 -// -// Commented out DiskReadTaskTest -// -// This test is commented and left here in the hope that somebody in the future -// will have the time to make this test compile again. -// -//TEST(castor_tape_tapeserver_daemon, DiskReadTaskTest){ -// char path[]="/tmp/testDRT-XXXXXX"; -// mkstemp(path); -// std::ofstream out(path,std::ios::out | std::ios::binary); -// castor::server::AtomicFlag flag; -// castor::log::StringLogger log("castor_tape_tapeserver_daemon_DiskReadTaskTest"); -// castor::log::LogContext lc(log); -// -// const int blockSize=1500; -// const int fileSize(1024*2000); -// -// const unsigned long original_checksum = mycopy(out,fileSize); -// castor::tape::tapeserver::daemon::MigrationMemoryManager mm(1,blockSize,lc); -// -// TestingArchiveJob file; -// -// file.archiveFile.lastKnownPath = path; -// file.archiveFile.size = fileSize; -// -// const int blockNeeded=fileSize/mm.blockCapacity()+((fileSize%mm.blockCapacity()==0) ? 0 : 1); -// int value=std::ceil(1024*2000./blockSize); -// ASSERT_EQ(value,blockNeeded); -// -// FakeTapeWriteTask ftwt; -// ftwt.pushDataBlock(new MemBlock(1,blockSize)); -// castor::tape::tapeserver::daemon::DiskReadTask drt(ftwt,&file,blockNeeded,flag); -// drt.execute(lc); -// -// ASSERT_EQ(original_checksum,ftwt.getChecksum()); -// delete ftwt.getFreeBlock(); -//} -} + const unsigned long original_checksum = mycopy(out,fileSize); + castor::tape::tapeserver::daemon::MigrationMemoryManager mm(1,blockSize,lc); + + TestingArchiveJob file; + + file.archiveFile.path = path; + file.archiveFile.size = fileSize; + + const int blockNeeded=fileSize/mm.blockCapacity()+((fileSize%mm.blockCapacity()==0) ? 0 : 1); + int value=std::ceil(1024*2000./blockSize); + ASSERT_EQ(value,blockNeeded); + + FakeTapeWriteTask ftwt; + ftwt.pushDataBlock(new MemBlock(1,blockSize)); + castor::tape::tapeserver::daemon::DiskReadTask drt(ftwt,&file,blockNeeded,flag); + DiskFileFactory fileFactory("RFIO","",0); + drt.execute(lc,fileFactory,*((MigrationWatchDog*)NULL)); + + ASSERT_EQ(original_checksum,ftwt.getChecksum()); + delete ftwt.getFreeBlock(); + } +} \ No newline at end of file -- GitLab