void testRange( void ) { Transfer::RemoteFileId exampleComUri (SHA256::convertFromHex(EXAMPLE_HASH), URI(URIContext(), SERVER_URI)); CacheLayer *http = createTransferLayer(); CacheLayer *disk = createDiskCache(http); CacheLayer *memory = createMemoryCache(disk); using std::tr1::placeholders::_1; memory->purgeFromCache(exampleComUri.fingerprint()); { Transfer::MutableDenseDataPtr expect(new Transfer::DenseData(Transfer::Range(2, 6, Transfer::LENGTH))); memcpy(expect->writableData(), "TML>\r\n", (size_t)expect->length()); memory->getData(exampleComUri, (Transfer::Range)*expect, std::tr1::bind(&CacheLayerTestSuite::compareCallback, this, expect, _1)); } { Transfer::MutableDenseDataPtr expect(new Transfer::DenseData(Transfer::Range(8, 6, Transfer::LENGTH))); memcpy(expect->writableData(), "<HEAD>", (size_t)expect->length()); memory->getData(exampleComUri, (Transfer::Range)*expect, std::tr1::bind(&CacheLayerTestSuite::compareCallback, this, expect, _1)); } waitFor(2); { Transfer::MutableDenseDataPtr expect(new Transfer::DenseData(Transfer::Range(2, 12, Transfer::LENGTH))); memcpy(expect->writableData(), "TML>\r\n<HEAD>", (size_t)expect->length()); memory->setNext(NULL); memory->getData(exampleComUri, (Transfer::Range)*expect, std::tr1::bind(&CacheLayerTestSuite::compareCallback, this, expect, _1)); } waitFor(3); }
void testMemoryCache_exampleCom( void ) { CacheLayer *disk = createDiskCache(); CacheLayer *memory = createMemoryCache(disk); // test disk cache. SILOG(transfer,debug,"Testing disk cache..."); doExampleComTest(memory); // test memory cache. memory->setNext(NULL); // ensure it is not using the disk cache. SILOG(transfer,debug,"Testing memory cache..."); doExampleComTest(memory); }
void testOverlappingRange( void ) { using std::tr1::placeholders::_1; Transfer::TransferCallback simpleCB = std::tr1::bind(&CacheLayerTestSuite::simpleCallback, this, _1); int numtests = 0; CacheLayer *http = createTransferLayer(); CacheLayer *disk = createDiskCache(http); CacheLayer *memory = createMemoryCache(disk); Transfer::RemoteFileId exampleComUri (SHA256::convertFromHex(EXAMPLE_HASH), URI(URIContext(), SERVER_URI)); memory->purgeFromCache(exampleComUri.fingerprint()); std::string diskFile = "diskCache/" + exampleComUri.fingerprint().convertToHexString() + ".part"; // First test: GetData something which will overlap with the next two. printf("1\n"); http->getData(exampleComUri, Transfer::Range(6, 10, Transfer::BOUNDS), simpleCB); waitFor(numtests+=1); // Now getData two pieces (both of these should kick out the first one) printf("2/3\n"); http->getData(exampleComUri, Transfer::Range(2, 8, Transfer::BOUNDS), simpleCB); http->getData(exampleComUri, Transfer::Range(8, 14, Transfer::BOUNDS), simpleCB); waitFor(numtests+=2); // Now check that an overlapping range from before doesn't cause problems printf("4\n"); http->getData(exampleComUri, Transfer::Range(6, 13, Transfer::BOUNDS), simpleCB); waitFor(numtests+=1); printf("5 -> THIS ONE IS FAILING\n"); // Everything here should be cached memory->setNext(NULL); memory->getData(exampleComUri, Transfer::Range(5, 8, Transfer::BOUNDS), simpleCB); waitFor(numtests+=1); printf("6 -> THIS ONE IS FAILING?\n"); // And the whole range we just got. memory->setNext(NULL); memory->getData(exampleComUri, Transfer::Range(2, 14, Transfer::BOUNDS), simpleCB); waitFor(numtests+=1); printf("7\n"); // getDatas from 2 to the end. -- should not be cached // and should overwrite all previous ranges because it is bigger. memory->setNext(disk); memory->getData(exampleComUri, Transfer::Range(2, true), simpleCB); waitFor(numtests+=1); using std::tr1::placeholders::_1; memory->setNext(NULL); memory->getData(exampleComUri, Transfer::Range(2, true), std::tr1::bind(&CacheLayerTestSuite::checkOneDenseDataCallback, this, _1)); waitFor(numtests+=1); // Whole file trumps anything else. memory->setNext(disk); memory->getData(exampleComUri, Transfer::Range(true), simpleCB); waitFor(numtests+=1); memory->setNext(NULL); memory->getData(exampleComUri, Transfer::Range(2, true), std::tr1::bind(&CacheLayerTestSuite::checkOneDenseDataCallback, this, _1)); waitFor(numtests+=1); // should be cached memory->setNext(NULL); memory->getData(exampleComUri, Transfer::Range(2, 14, Transfer::BOUNDS), simpleCB); waitFor(numtests+=1); // should be 1--end should be cached as well. memory->setNext(NULL); memory->getData(exampleComUri, Transfer::Range(1, 10, Transfer::BOUNDS, true), simpleCB); waitFor(numtests+=1); }