コード例 #1
0
	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);
	}
コード例 #2
0
	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);
	}
コード例 #3
0
	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);
	}