| 1 | /* | 
|---|
| 2 | * Project: JobMarket | 
|---|
| 3 | * Description: asynchronous Server/Controller/Client-approach to parallel computing, based on boost::asio | 
|---|
| 4 | * Copyright (C)  2011 Frederik Heber. All rights reserved. | 
|---|
| 5 | * | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | /* | 
|---|
| 9 | * FragmentQueueUnitTest.cpp | 
|---|
| 10 | * | 
|---|
| 11 | *  Created on: Oct 23, 2011 | 
|---|
| 12 | *      Author: heber | 
|---|
| 13 | */ | 
|---|
| 14 |  | 
|---|
| 15 | // include config.h | 
|---|
| 16 | #ifdef HAVE_CONFIG_H | 
|---|
| 17 | #include <config.h> | 
|---|
| 18 | #endif | 
|---|
| 19 |  | 
|---|
| 20 | #include <cppunit/CompilerOutputter.h> | 
|---|
| 21 | #include <cppunit/extensions/TestFactoryRegistry.h> | 
|---|
| 22 | #include <cppunit/ui/text/TestRunner.h> | 
|---|
| 23 |  | 
|---|
| 24 | #include "FragmentQueueUnitTest.hpp" | 
|---|
| 25 |  | 
|---|
| 26 | #include <limits> | 
|---|
| 27 | #include <vector> | 
|---|
| 28 |  | 
|---|
| 29 | #include "CodePatterns/Assert.hpp" | 
|---|
| 30 | #include "JobMarket/FragmentQueue.hpp" | 
|---|
| 31 |  | 
|---|
| 32 | #include "CodePatterns/Observer/Channels.hpp" | 
|---|
| 33 |  | 
|---|
| 34 | #ifdef HAVE_TESTRUNNER | 
|---|
| 35 | #include "JobMarket/UnitTestMain.hpp" | 
|---|
| 36 | #endif /*HAVE_TESTRUNNER*/ | 
|---|
| 37 |  | 
|---|
| 38 | /********************************************** Test classes **************************************/ | 
|---|
| 39 |  | 
|---|
| 40 | #include "stubs/FragmentJobStub.hpp" | 
|---|
| 41 | #include "stubs/ObserverStub.hpp" | 
|---|
| 42 |  | 
|---|
| 43 | // Registers the fixture into the 'registry' | 
|---|
| 44 | CPPUNIT_TEST_SUITE_REGISTRATION( FragmentQueueTest ); | 
|---|
| 45 |  | 
|---|
| 46 |  | 
|---|
| 47 | void FragmentQueueTest::setUp() | 
|---|
| 48 | { | 
|---|
| 49 | // Throw assertions | 
|---|
| 50 | ASSERT_DO(Assert::Throw); | 
|---|
| 51 |  | 
|---|
| 52 | queue = new FragmentQueue(); | 
|---|
| 53 | addobserver = new NotificationObserver(queue->getChannel(FragmentQueue::JobAdded)); | 
|---|
| 54 |  | 
|---|
| 55 | // and sign on | 
|---|
| 56 | queue->signOn(addobserver, FragmentQueue::JobAdded); | 
|---|
| 57 | } | 
|---|
| 58 |  | 
|---|
| 59 |  | 
|---|
| 60 | void FragmentQueueTest::tearDown() | 
|---|
| 61 | { | 
|---|
| 62 | queue->signOff(addobserver, FragmentQueue::JobAdded); | 
|---|
| 63 |  | 
|---|
| 64 | delete queue; | 
|---|
| 65 | delete addobserver; | 
|---|
| 66 | } | 
|---|
| 67 |  | 
|---|
| 68 | /** UnitTest for working JobQueue | 
|---|
| 69 | */ | 
|---|
| 70 | void FragmentQueueTest::JobTest() | 
|---|
| 71 | { | 
|---|
| 72 | FragmentJob::ptr testJob(new FragmentJobStub(JobId::IllegalJob)); | 
|---|
| 73 | /// check for illegal id | 
|---|
| 74 | #ifndef NDEBUG | 
|---|
| 75 | std::cout << "The following assertion is intended and does not indicate a failure." << std::endl; | 
|---|
| 76 | CPPUNIT_ASSERT_THROW( queue->pushJob(testJob), Assert::AssertionFailure ); | 
|---|
| 77 | #endif | 
|---|
| 78 | // set to valid id | 
|---|
| 79 | testJob->setId(1); | 
|---|
| 80 |  | 
|---|
| 81 | CPPUNIT_ASSERT_EQUAL(false, queue->isJobPresent() ); | 
|---|
| 82 |  | 
|---|
| 83 | #ifndef NDEBUG | 
|---|
| 84 | CPPUNIT_ASSERT_NO_THROW( queue->pushJob(testJob) ); | 
|---|
| 85 | #else | 
|---|
| 86 | queue->pushJob(testJob); | 
|---|
| 87 | #endif | 
|---|
| 88 | CPPUNIT_ASSERT( addobserver->wasNotified ); | 
|---|
| 89 | addobserver->wasNotified = false; | 
|---|
| 90 |  | 
|---|
| 91 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->jobs.size()); | 
|---|
| 92 | CPPUNIT_ASSERT_EQUAL(true, queue->isJobPresent() ); | 
|---|
| 93 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->results.size()); | 
|---|
| 94 | { | 
|---|
| 95 | FragmentQueue::ResultMap::const_iterator iter = queue->results.find((JobId_t)1); | 
|---|
| 96 | CPPUNIT_ASSERT( iter != queue->results.end() ); | 
|---|
| 97 | CPPUNIT_ASSERT( queue->getNoResult() == iter->second ); | 
|---|
| 98 | } | 
|---|
| 99 |  | 
|---|
| 100 | // push same id again | 
|---|
| 101 | #ifndef NDEBUG | 
|---|
| 102 | std::cout << "The following assertion is intended and does not indicate a failure." << std::endl; | 
|---|
| 103 | CPPUNIT_ASSERT_THROW( queue->pushJob(testJob), Assert::AssertionFailure ); | 
|---|
| 104 | #endif | 
|---|
| 105 |  | 
|---|
| 106 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->jobs.size()); | 
|---|
| 107 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->results.size()); | 
|---|
| 108 |  | 
|---|
| 109 | FragmentJob::ptr poppedJob; | 
|---|
| 110 | #ifndef NDEBUG | 
|---|
| 111 | CPPUNIT_ASSERT_NO_THROW( poppedJob = queue->popJob() ); | 
|---|
| 112 | #else | 
|---|
| 113 | poppedJob = queue->popJob(); | 
|---|
| 114 | #endif | 
|---|
| 115 | CPPUNIT_ASSERT( !addobserver->wasNotified ); | 
|---|
| 116 | CPPUNIT_ASSERT( poppedJob == testJob ); | 
|---|
| 117 |  | 
|---|
| 118 | CPPUNIT_ASSERT_EQUAL((size_t)0, queue->jobs.size()); | 
|---|
| 119 | CPPUNIT_ASSERT_EQUAL(false, queue->isJobPresent() ); | 
|---|
| 120 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->results.size()); | 
|---|
| 121 | { | 
|---|
| 122 | FragmentQueue::ResultMap::const_iterator iter = queue->results.find((JobId_t)1); | 
|---|
| 123 | CPPUNIT_ASSERT( iter != queue->results.end() ); | 
|---|
| 124 | CPPUNIT_ASSERT( queue->getNoResultQueued() == iter->second ); | 
|---|
| 125 | } | 
|---|
| 126 |  | 
|---|
| 127 | #ifndef NDEBUG | 
|---|
| 128 | std::cout << "The following assertion is intended and does not indicate a failure." << std::endl; | 
|---|
| 129 | CPPUNIT_ASSERT_THROW( queue->popJob(), Assert::AssertionFailure ); | 
|---|
| 130 | #endif | 
|---|
| 131 | } | 
|---|
| 132 |  | 
|---|
| 133 | /** UnitTest for adding multiple jobs at a time. | 
|---|
| 134 | */ | 
|---|
| 135 | void FragmentQueueTest::JobsTest() | 
|---|
| 136 | { | 
|---|
| 137 | // prepare some jobs | 
|---|
| 138 | FragmentJob::ptr testJob(new FragmentJobStub(JobId::IllegalJob)); | 
|---|
| 139 | testJob->setId((JobId_t)1); | 
|---|
| 140 | FragmentJob::ptr anothertestJob(new FragmentJobStub(JobId::IllegalJob)); | 
|---|
| 141 | anothertestJob->setId((JobId_t)2); | 
|---|
| 142 |  | 
|---|
| 143 | // prepare a vector of them | 
|---|
| 144 | std::vector<FragmentJob::ptr> testjobs; | 
|---|
| 145 | testjobs.push_back(testJob); | 
|---|
| 146 | testjobs.push_back(anothertestJob); | 
|---|
| 147 |  | 
|---|
| 148 | // prepare another vector of them | 
|---|
| 149 | std::vector<FragmentJob::ptr> sametestjobs; | 
|---|
| 150 | sametestjobs.push_back(testJob); | 
|---|
| 151 | sametestjobs.push_back(anothertestJob); | 
|---|
| 152 |  | 
|---|
| 153 | // push the vector | 
|---|
| 154 | CPPUNIT_ASSERT_EQUAL( (size_t)0, queue->jobs.size() ); | 
|---|
| 155 | #ifndef NDEBUG | 
|---|
| 156 | CPPUNIT_ASSERT_NO_THROW( queue->pushJobs(testjobs) ); | 
|---|
| 157 | #else | 
|---|
| 158 | queue->pushJobs(testjobs); | 
|---|
| 159 | #endif | 
|---|
| 160 | CPPUNIT_ASSERT_EQUAL( (size_t)2, queue->jobs.size() ); | 
|---|
| 161 | CPPUNIT_ASSERT_EQUAL((size_t)2, queue->results.size()); | 
|---|
| 162 | { | 
|---|
| 163 | FragmentQueue::ResultMap::const_iterator iter = queue->results.find((JobId_t)1); | 
|---|
| 164 | CPPUNIT_ASSERT( iter != queue->results.end() ); | 
|---|
| 165 | CPPUNIT_ASSERT( queue->getNoResult() == iter->second ); | 
|---|
| 166 | } | 
|---|
| 167 | { | 
|---|
| 168 | FragmentQueue::ResultMap::const_iterator iter = queue->results.find((JobId_t)2); | 
|---|
| 169 | CPPUNIT_ASSERT( iter != queue->results.end() ); | 
|---|
| 170 | CPPUNIT_ASSERT( queue->getNoResult() == iter->second ); | 
|---|
| 171 | } | 
|---|
| 172 | // push again | 
|---|
| 173 | #ifndef NDEBUG | 
|---|
| 174 | std::cout << "The following assertion is intended and does not indicate a failure." << std::endl; | 
|---|
| 175 | CPPUNIT_ASSERT_THROW( queue->pushJobs(testjobs), Assert::AssertionFailure ); | 
|---|
| 176 | #endif | 
|---|
| 177 |  | 
|---|
| 178 | CPPUNIT_ASSERT_EQUAL( (size_t)2, queue->jobs.size() ); | 
|---|
| 179 | CPPUNIT_ASSERT_EQUAL((size_t)2, queue->results.size()); | 
|---|
| 180 | } | 
|---|
| 181 |  | 
|---|
| 182 | /** UnitTest for adding multiple jobs with different priorities. | 
|---|
| 183 | */ | 
|---|
| 184 | void FragmentQueueTest::PriorityTest() | 
|---|
| 185 | { | 
|---|
| 186 | // prepare some jobs | 
|---|
| 187 | const size_t MAXJOBS = 10; | 
|---|
| 188 | std::vector<FragmentJob::ptr> testjobs; | 
|---|
| 189 | for(size_t i=1; i<= MAXJOBS; ++i) { | 
|---|
| 190 | FragmentJob::ptr testJob(new FragmentJobStub((JobId_t)i)); | 
|---|
| 191 | FragmentJob::priority_t priority = rand() % 10; | 
|---|
| 192 | testJob->setPriority(priority); | 
|---|
| 193 | testjobs.push_back(testJob); | 
|---|
| 194 | } | 
|---|
| 195 |  | 
|---|
| 196 | // push the vector | 
|---|
| 197 | CPPUNIT_ASSERT_EQUAL( (size_t)0, queue->jobs.size() ); | 
|---|
| 198 | #ifndef NDEBUG | 
|---|
| 199 | CPPUNIT_ASSERT_NO_THROW( queue->pushJobs(testjobs) ); | 
|---|
| 200 | #else | 
|---|
| 201 | queue->pushJobs(testjobs); | 
|---|
| 202 | #endif | 
|---|
| 203 | CPPUNIT_ASSERT_EQUAL( MAXJOBS, queue->jobs.size() ); | 
|---|
| 204 | CPPUNIT_ASSERT_EQUAL( MAXJOBS, queue->results.size()); | 
|---|
| 205 |  | 
|---|
| 206 | // pop and check their ids | 
|---|
| 207 | FragmentJob::priority_t old_priority = | 
|---|
| 208 | std::numeric_limits<FragmentJob::priority_t>::max(); | 
|---|
| 209 | while(queue->isJobPresent()) { | 
|---|
| 210 | FragmentJob::ptr testjob = queue->popJob(); | 
|---|
| 211 | const FragmentJob::priority_t &new_priority = | 
|---|
| 212 | testjob->priority; | 
|---|
| 213 | CPPUNIT_ASSERT( old_priority >= new_priority); | 
|---|
| 214 | old_priority = new_priority; | 
|---|
| 215 | } | 
|---|
| 216 | } | 
|---|
| 217 |  | 
|---|
| 218 |  | 
|---|
| 219 | /** UnitTest for working ResultMap | 
|---|
| 220 | */ | 
|---|
| 221 | void FragmentQueueTest::ResultsTest() | 
|---|
| 222 | { | 
|---|
| 223 | // prepare a job | 
|---|
| 224 | FragmentJob::ptr testJob(new FragmentJobStub(JobId::IllegalJob)); | 
|---|
| 225 | testJob->setId(1); | 
|---|
| 226 | #ifndef NDEBUG | 
|---|
| 227 | CPPUNIT_ASSERT_NO_THROW( queue->pushJob(testJob) ); | 
|---|
| 228 | #else | 
|---|
| 229 | queue->pushJob(testJob); | 
|---|
| 230 | #endif | 
|---|
| 231 |  | 
|---|
| 232 | // check for present job to do | 
|---|
| 233 | CPPUNIT_ASSERT_EQUAL( (size_t)1, queue->getPresentJobs() ); | 
|---|
| 234 |  | 
|---|
| 235 | #ifndef NDEBUG | 
|---|
| 236 | CPPUNIT_ASSERT_NO_THROW( queue->popJob() ); | 
|---|
| 237 | #else | 
|---|
| 238 | queue->popJob(); | 
|---|
| 239 | #endif | 
|---|
| 240 |  | 
|---|
| 241 | // check for present job to do | 
|---|
| 242 | CPPUNIT_ASSERT_EQUAL( (size_t)0, queue->getPresentJobs() ); | 
|---|
| 243 |  | 
|---|
| 244 | // prepare a result | 
|---|
| 245 | FragmentResult::ptr testResult( new FragmentResult(1) ); | 
|---|
| 246 | FragmentResult::ptr wrongIdResult( new FragmentResult(2) ); | 
|---|
| 247 |  | 
|---|
| 248 | // check that none are present and we can't get result yet | 
|---|
| 249 | CPPUNIT_ASSERT_EQUAL( (size_t)0, queue->getDoneJobs() ); | 
|---|
| 250 | CPPUNIT_ASSERT( !queue->isResultPresent(1) ); | 
|---|
| 251 | CPPUNIT_ASSERT( !queue->isResultPresent(2) ); | 
|---|
| 252 | #ifndef NDEBUG | 
|---|
| 253 | std::cout << "The following assertion is intended and does not indicate a failure." << std::endl; | 
|---|
| 254 | CPPUNIT_ASSERT_THROW( queue->getResult(1), Assert::AssertionFailure ); | 
|---|
| 255 | #endif | 
|---|
| 256 |  | 
|---|
| 257 | /// check for admonishing wrong id | 
|---|
| 258 | #ifndef NDEBUG | 
|---|
| 259 | std::cout << "The following assertion is intended and does not indicate a failure." << std::endl; | 
|---|
| 260 | CPPUNIT_ASSERT_THROW( queue->pushResult(wrongIdResult), Assert::AssertionFailure ); | 
|---|
| 261 | #endif | 
|---|
| 262 |  | 
|---|
| 263 | // push correct result | 
|---|
| 264 | #ifndef NDEBUG | 
|---|
| 265 | CPPUNIT_ASSERT_NO_THROW( queue->pushResult(testResult) ); | 
|---|
| 266 | #else | 
|---|
| 267 | queue->pushResult(testResult); | 
|---|
| 268 | #endif | 
|---|
| 269 |  | 
|---|
| 270 | // check presence again | 
|---|
| 271 | CPPUNIT_ASSERT( queue->isResultPresent(1) ); | 
|---|
| 272 | CPPUNIT_ASSERT_EQUAL( (size_t)1, queue->getDoneJobs() ); | 
|---|
| 273 | CPPUNIT_ASSERT_EQUAL( (size_t)0, queue->getPresentJobs() ); | 
|---|
| 274 |  | 
|---|
| 275 | // obtain result again | 
|---|
| 276 | #ifndef NDEBUG | 
|---|
| 277 | CPPUNIT_ASSERT_NO_THROW( queue->getResult(1) ); | 
|---|
| 278 | #else | 
|---|
| 279 | queue->getResult(1); | 
|---|
| 280 | #endif | 
|---|
| 281 |  | 
|---|
| 282 | // check presence one more time | 
|---|
| 283 | CPPUNIT_ASSERT_EQUAL( (size_t)0, queue->getDoneJobs() ); | 
|---|
| 284 | CPPUNIT_ASSERT_EQUAL( (size_t)0, queue->getPresentJobs() ); | 
|---|
| 285 | CPPUNIT_ASSERT( !queue->isResultPresent(1) ); | 
|---|
| 286 | CPPUNIT_ASSERT( !queue->isResultPresent(2) ); | 
|---|
| 287 | #ifndef NDEBUG | 
|---|
| 288 | std::cout << "The following assertion is intended and does not indicate a failure." << std::endl; | 
|---|
| 289 | CPPUNIT_ASSERT_THROW( queue->getResult(1), Assert::AssertionFailure ); | 
|---|
| 290 | #endif | 
|---|
| 291 | } | 
|---|
| 292 |  | 
|---|
| 293 | /** UnitTest for working ResultMap | 
|---|
| 294 | */ | 
|---|
| 295 | void FragmentQueueTest::AllResultsTest() | 
|---|
| 296 | { | 
|---|
| 297 | // prepare a job | 
|---|
| 298 | FragmentJob::ptr testJob( new FragmentJobStub(JobId::IllegalJob) ); | 
|---|
| 299 | testJob->setId((JobId_t)1); | 
|---|
| 300 | FragmentJob::ptr anothertestJob( new FragmentJobStub(JobId::IllegalJob) ); | 
|---|
| 301 | anothertestJob->setId((JobId_t)2); | 
|---|
| 302 |  | 
|---|
| 303 | #ifndef NDEBUG | 
|---|
| 304 | CPPUNIT_ASSERT_NO_THROW( queue->pushJob(testJob) ); | 
|---|
| 305 | CPPUNIT_ASSERT_NO_THROW( queue->pushJob(anothertestJob) ); | 
|---|
| 306 | #else | 
|---|
| 307 | queue->pushJob(testJob); | 
|---|
| 308 | queue->pushJob(anothertestJob); | 
|---|
| 309 | #endif | 
|---|
| 310 |  | 
|---|
| 311 | // check that no results are returned. | 
|---|
| 312 | { | 
|---|
| 313 | const std::vector<FragmentResult::ptr> results = queue->getAllResults(); | 
|---|
| 314 | CPPUNIT_ASSERT_EQUAL( (size_t)0, results.size() ); | 
|---|
| 315 | } | 
|---|
| 316 |  | 
|---|
| 317 | // pop both as if some work was being done | 
|---|
| 318 | #ifndef NDEBUG | 
|---|
| 319 | CPPUNIT_ASSERT_NO_THROW( queue->popJob() ); | 
|---|
| 320 | CPPUNIT_ASSERT_NO_THROW( queue->popJob() ); | 
|---|
| 321 | #else | 
|---|
| 322 | queue->popJob(); | 
|---|
| 323 | queue->popJob(); | 
|---|
| 324 | #endif | 
|---|
| 325 |  | 
|---|
| 326 | // prepare a result | 
|---|
| 327 | FragmentResult::ptr testResult( new FragmentResult(1) ); | 
|---|
| 328 | FragmentResult::ptr anothertestResult( new FragmentResult(2) ); | 
|---|
| 329 |  | 
|---|
| 330 | // push correct result | 
|---|
| 331 | #ifndef NDEBUG | 
|---|
| 332 | CPPUNIT_ASSERT_NO_THROW( queue->pushResult(testResult) ); | 
|---|
| 333 | CPPUNIT_ASSERT_NO_THROW( queue->pushResult(anothertestResult) ); | 
|---|
| 334 | #else | 
|---|
| 335 | queue->pushResult(testResult); | 
|---|
| 336 | queue->pushResult(anothertestResult); | 
|---|
| 337 | #endif | 
|---|
| 338 |  | 
|---|
| 339 | // check that two results are returned. | 
|---|
| 340 | { | 
|---|
| 341 | const std::vector<FragmentResult::ptr> results = queue->getAllResults(); | 
|---|
| 342 | CPPUNIT_ASSERT_EQUAL( (size_t)2, results.size() ); | 
|---|
| 343 | } | 
|---|
| 344 | } | 
|---|
| 345 |  | 
|---|
| 346 | /** Unit test for resubmitJob(). | 
|---|
| 347 | * | 
|---|
| 348 | */ | 
|---|
| 349 | void FragmentQueueTest::removeWaitingResultsTest() | 
|---|
| 350 | { | 
|---|
| 351 | // prepare a job | 
|---|
| 352 | FragmentJob::ptr testJob(new FragmentJobStub(JobId::IllegalJob)); | 
|---|
| 353 | testJob->setId(1); | 
|---|
| 354 | #ifndef NDEBUG | 
|---|
| 355 | CPPUNIT_ASSERT_NO_THROW( queue->pushJob(testJob) ); | 
|---|
| 356 | #else | 
|---|
| 357 | queue->pushJob(testJob); | 
|---|
| 358 | #endif | 
|---|
| 359 |  | 
|---|
| 360 | CPPUNIT_ASSERT_EQUAL( (size_t)1, queue->results.size() ); | 
|---|
| 361 | // now remove all waiting results although there are none | 
|---|
| 362 | queue->removeWaitingResults(); | 
|---|
| 363 | CPPUNIT_ASSERT_EQUAL( (size_t)1, queue->results.size() ); | 
|---|
| 364 |  | 
|---|
| 365 | // pop job as if we do some work | 
|---|
| 366 | queue->popJob(); | 
|---|
| 367 |  | 
|---|
| 368 | // prepare a result for the job | 
|---|
| 369 | FragmentResult::ptr testResult( new FragmentResult(1) ); | 
|---|
| 370 | // push correct result | 
|---|
| 371 | #ifndef NDEBUG | 
|---|
| 372 | CPPUNIT_ASSERT_NO_THROW( queue->pushResult(testResult) ); | 
|---|
| 373 | #else | 
|---|
| 374 | queue->pushResult(testResult); | 
|---|
| 375 | #endif | 
|---|
| 376 |  | 
|---|
| 377 | // check that one job is done | 
|---|
| 378 | CPPUNIT_ASSERT_EQUAL( (size_t)1, queue->getDoneJobs() ); | 
|---|
| 379 |  | 
|---|
| 380 | // now remove all waiting results | 
|---|
| 381 | queue->removeWaitingResults(); | 
|---|
| 382 |  | 
|---|
| 383 | // check that no results are returned. | 
|---|
| 384 | { | 
|---|
| 385 | CPPUNIT_ASSERT_EQUAL( (size_t)0, queue->getDoneJobs() ); | 
|---|
| 386 | const std::vector<FragmentResult::ptr> results = queue->getAllResults(); | 
|---|
| 387 | CPPUNIT_ASSERT_EQUAL( (size_t)0, results.size() ); | 
|---|
| 388 | } | 
|---|
| 389 | } | 
|---|
| 390 |  | 
|---|
| 391 | /** Unit test for resubmitJob(). | 
|---|
| 392 | * | 
|---|
| 393 | */ | 
|---|
| 394 | void FragmentQueueTest::resubmitTest() | 
|---|
| 395 | { | 
|---|
| 396 | FragmentJob::ptr testJob(new FragmentJobStub(1)); | 
|---|
| 397 |  | 
|---|
| 398 | // push a Job into queue | 
|---|
| 399 | #ifndef NDEBUG | 
|---|
| 400 | CPPUNIT_ASSERT_NO_THROW( queue->pushJob(testJob) ); | 
|---|
| 401 | #else | 
|---|
| 402 | queue->pushJob(testJob); | 
|---|
| 403 | #endif | 
|---|
| 404 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->jobs.size()); | 
|---|
| 405 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->results.size()); | 
|---|
| 406 |  | 
|---|
| 407 | // pop the job | 
|---|
| 408 | // pop both as if some work was being done | 
|---|
| 409 | #ifndef NDEBUG | 
|---|
| 410 | CPPUNIT_ASSERT_NO_THROW( queue->popJob() ); | 
|---|
| 411 | #else | 
|---|
| 412 | queue->popJob(); | 
|---|
| 413 | #endif | 
|---|
| 414 | CPPUNIT_ASSERT_EQUAL((size_t)0, queue->jobs.size()); | 
|---|
| 415 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->results.size()); | 
|---|
| 416 |  | 
|---|
| 417 | // resubmit | 
|---|
| 418 | #ifndef NDEBUG | 
|---|
| 419 | CPPUNIT_ASSERT_NO_THROW( queue->resubmitJob((JobId_t)1) ); | 
|---|
| 420 | #else | 
|---|
| 421 | queue->resubmitJob((JobId_t)1); | 
|---|
| 422 | #endif | 
|---|
| 423 |  | 
|---|
| 424 | // check whethers it's present again | 
|---|
| 425 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->jobs.size()); | 
|---|
| 426 | CPPUNIT_ASSERT_EQUAL((size_t)1, queue->results.size()); | 
|---|
| 427 | } | 
|---|
| 428 |  | 
|---|