Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Unified Diff: src/platform/update_engine/http_fetcher_unittest.cc

Issue 466036: AU: Beginnings of delta support (Closed)
Patch Set: Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/platform/update_engine/http_fetcher.h ('k') | src/platform/update_engine/libcurl_http_fetcher.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/platform/update_engine/http_fetcher_unittest.cc
diff --git a/src/platform/update_engine/http_fetcher_unittest.cc b/src/platform/update_engine/http_fetcher_unittest.cc
index f1e9c26f1c3f101e7ab6457609b7c5e6f4e7d334..8d9c3f83d3f9311eb4022d936219798d3736b1e9 100644
--- a/src/platform/update_engine/http_fetcher_unittest.cc
+++ b/src/platform/update_engine/http_fetcher_unittest.cc
@@ -3,13 +3,18 @@
// found in the LICENSE file.
#include <unistd.h>
+#include <string>
+#include <vector>
#include <base/scoped_ptr.h>
#include <glib.h>
-#include <base/logging.h>
#include <gtest/gtest.h>
+#include "chromeos/obsolete_logging.h"
#include "update_engine/libcurl_http_fetcher.h"
#include "update_engine/mock_http_fetcher.h"
+using std::string;
+using std::vector;
+
namespace chromeos_update_engine {
namespace {
@@ -27,6 +32,7 @@ class HttpFetcherTest : public ::testing::Test {
HttpFetcher* NewSmallFetcher() = 0;
string BigUrl() const = 0;
string SmallUrl() const = 0;
+ bool IsMock() const = 0;
};
class NullHttpServer {
@@ -53,13 +59,14 @@ class HttpFetcherTest<MockHttpFetcher> : public ::testing::Test {
string SmallUrl() const {
return "unused://unused";
}
+ bool IsMock() const { return true; }
typedef NullHttpServer HttpServer;
};
class PythonHttpServer {
public:
PythonHttpServer() {
- char *argv[2] = {strdup("./test_http_server.py"), NULL};
+ char *argv[2] = {strdup("./test_http_server"), NULL};
GError *err;
started_ = false;
if (!g_spawn_async(NULL,
@@ -74,7 +81,6 @@ class PythonHttpServer {
}
int rc = 1;
while (0 != rc) {
-
rc = system((string("wget --output-document=/dev/null ") +
LocalServerUrlForPath("/test")).c_str());
usleep(10 * 1000); // 10 ms
@@ -112,6 +118,7 @@ class HttpFetcherTest<LibcurlHttpFetcher> : public ::testing::Test {
string SmallUrl() const {
return LocalServerUrlForPath("/foo");
}
+ bool IsMock() const { return false; }
typedef PythonHttpServer HttpServer;
};
@@ -121,7 +128,7 @@ TYPED_TEST_CASE(HttpFetcherTest, HttpFetcherTestTypes);
namespace {
class HttpFetcherTestDelegate : public HttpFetcherDelegate {
-public:
+ public:
virtual void ReceivedBytes(HttpFetcher* fetcher,
const char* bytes, int length) {
char str[length + 1];
@@ -133,6 +140,17 @@ public:
}
GMainLoop* loop_;
};
+
+struct StartTransferArgs {
+ HttpFetcher *http_fetcher;
+ string url;
+};
+
+gboolean StartTransfer(gpointer data) {
+ StartTransferArgs *args = reinterpret_cast<StartTransferArgs*>(data);
+ args->http_fetcher->BeginTransfer(args->url);
+ return FALSE;
+}
} // namespace {}
TYPED_TEST(HttpFetcherTest, SimpleTest) {
@@ -146,7 +164,9 @@ TYPED_TEST(HttpFetcherTest, SimpleTest) {
typename TestFixture::HttpServer server;
ASSERT_TRUE(server.started_);
- fetcher->BeginTransfer(this->SmallUrl());
+ StartTransferArgs start_xfer_args = {fetcher.get(), this->SmallUrl()};
+
+ g_timeout_add(0, StartTransfer, &start_xfer_args);
g_main_loop_run(loop);
}
g_main_loop_unref(loop);
@@ -158,13 +178,11 @@ class PausingHttpFetcherTestDelegate : public HttpFetcherDelegate {
virtual void ReceivedBytes(HttpFetcher* fetcher,
const char* bytes, int length) {
char str[length + 1];
- LOG(INFO) << "got " << length << " bytes";
memset(str, 0, length + 1);
memcpy(str, bytes, length);
CHECK(!paused_);
paused_ = true;
fetcher->Pause();
- LOG(INFO) << "calling pause";
}
virtual void TransferComplete(HttpFetcher* fetcher, bool successful) {
g_main_loop_quit(loop_);
@@ -173,7 +191,6 @@ class PausingHttpFetcherTestDelegate : public HttpFetcherDelegate {
CHECK(paused_);
paused_ = false;
fetcher_->Unpause();
- LOG(INFO) << "calling unpause";
}
bool paused_;
HttpFetcher* fetcher_;
@@ -274,4 +291,50 @@ TYPED_TEST(HttpFetcherTest, AbortTest) {
g_main_loop_unref(loop);
}
+namespace {
+class FlakyHttpFetcherTestDelegate : public HttpFetcherDelegate {
+ public:
+ virtual void ReceivedBytes(HttpFetcher* fetcher,
+ const char* bytes, int length) {
+ data.append(bytes, length);
+ }
+ virtual void TransferComplete(HttpFetcher* fetcher, bool successful) {
+ g_main_loop_quit(loop_);
+ }
+ string data;
+ GMainLoop* loop_;
+};
+} // namespace {}
+
+TYPED_TEST(HttpFetcherTest, FlakyTest) {
+ if (this->IsMock())
+ return;
+ GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE);
+ {
+ FlakyHttpFetcherTestDelegate delegate;
+ delegate.loop_ = loop;
+ scoped_ptr<HttpFetcher> fetcher(this->NewSmallFetcher());
+ fetcher->set_delegate(&delegate);
+
+ typename TestFixture::HttpServer server;
+ ASSERT_TRUE(server.started_);
+
+ StartTransferArgs start_xfer_args = {
+ fetcher.get(),
+ LocalServerUrlForPath("/flaky")
+ };
+
+ g_timeout_add(0, StartTransfer, &start_xfer_args);
+ g_main_loop_run(loop);
+
+ // verify the data we get back
+ ASSERT_EQ(100000, delegate.data.size());
+ for (int i = 0; i < 100000; i += 10) {
+ // Assert so that we don't flood the screen w/ EXPECT errors on failure.
+ ASSERT_EQ(delegate.data.substr(i, 10), "abcdefghij");
+ }
+ }
+ g_main_loop_unref(loop);
+}
+
} // namespace chromeos_update_engine
« no previous file with comments | « src/platform/update_engine/http_fetcher.h ('k') | src/platform/update_engine/libcurl_http_fetcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698