Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Zolotarev <deathbaba@gmail.com>2011-11-08 21:15:41 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:27:29 +0300
commit323f8a45794db7e8d11e79e4cb2d160eccf6c3f8 (patch)
tree1966a03ed508d56ffff4bf3127ecee805e054f8b /platform/platform_tests
parentcf4d77fa0bae136c90581650e4c72b0267baa0a2 (diff)
[downloader] Rewrote interfaces to store Writer internally
Diffstat (limited to 'platform/platform_tests')
-rw-r--r--platform/platform_tests/downloader_test.cpp168
1 files changed, 114 insertions, 54 deletions
diff --git a/platform/platform_tests/downloader_test.cpp b/platform/platform_tests/downloader_test.cpp
index b3b0ebea67..7011df167d 100644
--- a/platform/platform_tests/downloader_test.cpp
+++ b/platform/platform_tests/downloader_test.cpp
@@ -2,7 +2,8 @@
#include "../../base/logging.hpp"
-#include "../../coding/writer.hpp"
+#include "../../coding/file_reader.hpp"
+#include "../../coding/file_writer.hpp"
#include "../../coding/sha2.hpp"
#include "../http_request.hpp"
@@ -77,6 +78,7 @@ struct CancelDownload
{
void OnProgress(HttpRequest & request)
{
+ TEST_GREATER(request.Data().size(), 0, ());
delete &request;
QCoreApplication::quit();
}
@@ -86,89 +88,134 @@ struct CancelDownload
}
};
+struct DeleteOnFinish
+{
+ void OnProgress(HttpRequest & request)
+ {
+ TEST_GREATER(request.Data().size(), 0, ());
+ }
+ void OnFinish(HttpRequest & request)
+ {
+ delete &request;
+ QCoreApplication::quit();
+ }
+};
+
UNIT_TEST(DownloaderSimpleGet)
{
DownloadObserver observer;
- string buffer;
- MemWriter<string> writer(buffer);
HttpRequest::CallbackT onFinish = bind(&DownloadObserver::OnDownloadFinish, &observer, _1);
HttpRequest::CallbackT onProgress = bind(&DownloadObserver::OnDownloadProgress, &observer, _1);
{ // simple success case
- scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL1, writer, onFinish, onProgress));
+ scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL1, string(), onFinish, onProgress));
// wait until download is finished
QCoreApplication::exec();
observer.TestOk();
- TEST_EQUAL(buffer, "Test1", (buffer));
+ TEST_EQUAL(request->Data(), "Test1", ());
}
- buffer.clear();
- writer.Seek(0);
observer.Reset();
{ // permanent redirect success case
- scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL_PERMANENT, writer, onFinish, onProgress));
+ scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL_PERMANENT, string(), onFinish, onProgress));
QCoreApplication::exec();
observer.TestOk();
- TEST_EQUAL(buffer, "Test1", (buffer));
+ TEST_EQUAL(request->Data(), "Test1", ());
}
- buffer.clear();
- writer.Seek(0);
observer.Reset();
{ // fail case 404
- scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL_404, writer, onFinish, onProgress));
+ scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL_404, string(), onFinish, onProgress));
QCoreApplication::exec();
observer.TestFailed();
- TEST_EQUAL(buffer.size(), 0, (buffer));
+ TEST_EQUAL(request->Data().size(), 0, (request->Data()));
}
- buffer.clear();
- writer.Seek(0);
observer.Reset();
{ // fail case not existing host
- scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL_INVALID_HOST, writer, onFinish, onProgress));
+ scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL_INVALID_HOST, string(), onFinish, onProgress));
QCoreApplication::exec();
observer.TestFailed();
- TEST_EQUAL(buffer.size(), 0, (buffer));
+ TEST_EQUAL(request->Data().size(), 0, (request->Data()));
}
- buffer.clear();
- writer.Seek(0);
- {
+ { // cancel download in the middle of the progress
CancelDownload canceler;
/// should be deleted in canceler
- HttpRequest::Get(TEST_URL_BIG_FILE, writer,
+ HttpRequest::Get(TEST_URL_BIG_FILE, string(),
bind(&CancelDownload::OnFinish, &canceler, _1),
bind(&CancelDownload::OnProgress, &canceler, _1));
QCoreApplication::exec();
- TEST_GREATER(buffer.size(), 0, ());
}
- buffer.clear();
- writer.Seek(0);
observer.Reset();
{ // https success case
- scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL_HTTPS, writer, onFinish, onProgress));
+ scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL_HTTPS, string(), onFinish, onProgress));
+ // wait until download is finished
+ QCoreApplication::exec();
+ observer.TestOk();
+ TEST_GREATER(request->Data().size(), 0, ());
+ }
+
+ string const FILENAME = "some_downloader_test_file";
+ observer.Reset();
+ { // download file success case
+ scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL1, FILENAME, onFinish, onProgress));
// wait until download is finished
QCoreApplication::exec();
observer.TestOk();
- TEST_GREATER(buffer.size(), 0, (buffer));
+ {
+ FileReader f(FILENAME);
+ string s;
+ f.ReadAsString(s);
+ TEST_EQUAL(s, "Test1", ());
+ }
+ TEST_EQUAL(request->Data(), FILENAME, (request->Data()));
+ FileWriter::DeleteFileX(FILENAME);
+ }
+
+ observer.Reset();
+ { // download file error case
+ scoped_ptr<HttpRequest> request(HttpRequest::Get(TEST_URL_404, FILENAME, onFinish, onProgress));
+ // wait until download is finished
+ QCoreApplication::exec();
+ observer.TestFailed();
+ {
+ FileReader f(FILENAME);
+ TEST_EQUAL(f.Size(), 0, ());
+ }
+ TEST_EQUAL(request->Data(), FILENAME, (request->Data()));
+ FileWriter::DeleteFileX(FILENAME);
+ }
+
+ { // Delete request at the end of successful file download
+ DeleteOnFinish deleter;
+ /// should be deleted in deleter on finish
+ HttpRequest::Get(TEST_URL1, FILENAME,
+ bind(&DeleteOnFinish::OnFinish, &deleter, _1),
+ bind(&DeleteOnFinish::OnProgress, &deleter, _1));
+ QCoreApplication::exec();
+ {
+ FileReader f(FILENAME);
+ string s;
+ f.ReadAsString(s);
+ TEST_EQUAL(s, "Test1", ());
+ }
+ FileWriter::DeleteFileX(FILENAME);
}
}
UNIT_TEST(DownloaderSimplePost)
{
DownloadObserver observer;
- string buffer;
- MemWriter<string> writer(buffer);
HttpRequest::CallbackT onFinish = bind(&DownloadObserver::OnDownloadFinish, &observer, _1);
HttpRequest::CallbackT onProgress = bind(&DownloadObserver::OnDownloadProgress, &observer, _1);
{ // simple success case
string const postData = "{\"jsonKey\":\"jsonValue\"}";
- scoped_ptr<HttpRequest> request(HttpRequest::Post(TEST_URL_POST, writer, postData, onFinish, onProgress));
+ scoped_ptr<HttpRequest> request(HttpRequest::Post(TEST_URL_POST, string(), postData, onFinish, onProgress));
// wait until download is finished
QCoreApplication::exec();
observer.TestOk();
- TEST_EQUAL(buffer, postData, (buffer));
+ TEST_EQUAL(request->Data(), postData, ());
}
}
@@ -277,14 +324,11 @@ UNIT_TEST(ChunksDownloadStrategyFAIL)
strategy.ChunkFinished(false, beg2, end2);
TEST_EQUAL(strategy.NextChunk(s2, beg2, end2), ChunksDownloadStrategy::EDownloadFailed, ());
-
}
UNIT_TEST(DownloadChunks)
{
DownloadObserver observer;
- string buffer;
- MemWriter<string> writer(buffer);
HttpRequest::CallbackT onFinish = bind(&DownloadObserver::OnDownloadFinish, &observer, _1);
HttpRequest::CallbackT onProgress = bind(&DownloadObserver::OnDownloadProgress, &observer, _1);
@@ -294,17 +338,15 @@ UNIT_TEST(DownloadChunks)
int64_t FILESIZE = 5;
{ // should use only one thread
- scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, writer, FILESIZE, onFinish, onProgress));
+ scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, string(), FILESIZE, onFinish, onProgress));
// wait until download is finished
QCoreApplication::exec();
observer.TestOk();
- TEST_EQUAL(buffer.size(), FILESIZE, ());
- TEST_EQUAL(buffer, "Test1", (buffer));
+ TEST_EQUAL(request->Data().size(), FILESIZE, ());
+ TEST_EQUAL(request->Data(), "Test1", ());
}
observer.Reset();
- writer.Seek(0);
- buffer.clear();
urls.clear();
urls.push_back(TEST_URL_BIG_FILE);
@@ -313,18 +355,16 @@ UNIT_TEST(DownloadChunks)
FILESIZE = 5;
{ // 3 threads - fail, because of invalid size
- scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, writer, FILESIZE, onFinish, onProgress, 2048));
+ scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, string(), FILESIZE, onFinish, onProgress, 2048));
// wait until download is finished
QCoreApplication::exec();
observer.TestFailed();
- TEST_EQUAL(buffer.size(), 0, ());
+ TEST_EQUAL(request->Data().size(), 0, ());
}
string const SHA256 = "EE6AE6A2A3619B2F4A397326BEC32583DE2196D9D575D66786CB3B6F9D04A633";
observer.Reset();
- writer.Seek(0);
- buffer.clear();
urls.clear();
urls.push_back(TEST_URL_BIG_FILE);
@@ -333,17 +373,15 @@ UNIT_TEST(DownloadChunks)
FILESIZE = 47684;
{ // 3 threads - succeeded
- scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, writer, FILESIZE, onFinish, onProgress, 2048));
+ scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, string(), FILESIZE, onFinish, onProgress, 2048));
// wait until download is finished
QCoreApplication::exec();
observer.TestOk();
- TEST_EQUAL(buffer.size(), FILESIZE, ());
- TEST_EQUAL(sha2::digest256(buffer), SHA256, (buffer));
+ TEST_EQUAL(request->Data().size(), FILESIZE, ());
+ TEST_EQUAL(sha2::digest256(request->Data()), SHA256, ());
}
observer.Reset();
- writer.Seek(0);
- buffer.clear();
urls.clear();
urls.push_back(TEST_URL_BIG_FILE);
@@ -352,17 +390,15 @@ UNIT_TEST(DownloadChunks)
FILESIZE = 47684;
{ // 3 threads with only one valid url - succeeded
- scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, writer, FILESIZE, onFinish, onProgress, 2048));
+ scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, string(), FILESIZE, onFinish, onProgress, 2048));
// wait until download is finished
QCoreApplication::exec();
observer.TestOk();
- TEST_EQUAL(buffer.size(), FILESIZE, ());
- TEST_EQUAL(sha2::digest256(buffer), SHA256, (buffer));
+ TEST_EQUAL(request->Data().size(), FILESIZE, ());
+ TEST_EQUAL(sha2::digest256(request->Data()), SHA256, ());
}
observer.Reset();
- writer.Seek(0);
- buffer.clear();
urls.clear();
urls.push_back(TEST_URL_BIG_FILE);
@@ -370,10 +406,34 @@ UNIT_TEST(DownloadChunks)
FILESIZE = 12345;
{ // 2 threads and all points to file with invalid size - fail
- scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, writer, FILESIZE, onFinish, onProgress, 2048));
+ scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, string(), FILESIZE, onFinish, onProgress, 2048));
// wait until download is finished
QCoreApplication::exec();
observer.TestFailed();
- TEST_EQUAL(buffer.size(), 0, ());
+ TEST_EQUAL(request->Data().size(), 0, ());
+ }
+
+ observer.Reset();
+
+ urls.clear();
+ urls.push_back(TEST_URL_BIG_FILE);
+ urls.push_back(TEST_URL_BIG_FILE);
+ FILESIZE = 47684;
+ string const FILENAME = "some_downloader_test_file";
+
+ { // 3 threads - download to file - succeeded
+ scoped_ptr<HttpRequest> request(HttpRequest::GetChunks(urls, FILENAME, FILESIZE, onFinish, onProgress, 10000));
+ // wait until download is finished
+ QCoreApplication::exec();
+ observer.TestOk();
+ TEST_EQUAL(request->Data(), FILENAME, ());
+ {
+ FileReader f(FILENAME);
+ TEST_EQUAL(f.Size(), FILESIZE, ());
+ string s;
+ f.ReadAsString(s);
+ TEST_EQUAL(sha2::digest256(s), SHA256, ());
+ }
+ FileWriter::DeleteFileX(FILENAME);
}
}