summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--http_fetcher_unittest.cc21
1 files changed, 17 insertions, 4 deletions
diff --git a/http_fetcher_unittest.cc b/http_fetcher_unittest.cc
index 33920984..b2848f3f 100644
--- a/http_fetcher_unittest.cc
+++ b/http_fetcher_unittest.cc
@@ -679,6 +679,9 @@ TYPED_TEST(HttpFetcherTest, FlakyTest) {
}
namespace {
+// This delegate kills the server attached to it after receiving any bytes.
+// This can be used for testing what happens when you try to fetch data and
+// the server dies.
class FailureHttpFetcherTestDelegate : public HttpFetcherDelegate {
public:
FailureHttpFetcherTestDelegate(PythonHttpServer* server)
@@ -704,7 +707,7 @@ class FailureHttpFetcherTestDelegate : public HttpFetcherDelegate {
}
virtual void TransferComplete(HttpFetcher* fetcher, bool successful) {
EXPECT_FALSE(successful);
- EXPECT_EQ(404, fetcher->http_response_code());
+ EXPECT_EQ(0, fetcher->http_response_code());
g_main_loop_quit(loop_);
}
virtual void TransferTerminated(HttpFetcher* fetcher) {
@@ -717,6 +720,8 @@ class FailureHttpFetcherTestDelegate : public HttpFetcherDelegate {
TYPED_TEST(HttpFetcherTest, FailureTest) {
+ // This test ensures that a fetcher responds correctly when a server isn't
+ // available at all.
if (this->test_.IsMock())
return;
GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE);
@@ -728,7 +733,7 @@ TYPED_TEST(HttpFetcherTest, FailureTest) {
StartTransferArgs start_xfer_args = {
fetcher.get(),
- this->test_.SmallUrl(0)
+ "http://host_doesnt_exist99999999",
};
g_timeout_add(0, StartTransfer, &start_xfer_args);
@@ -740,18 +745,26 @@ TYPED_TEST(HttpFetcherTest, FailureTest) {
}
TYPED_TEST(HttpFetcherTest, ServerDiesTest) {
+ // This test starts a new http server and kills it after receiving its first
+ // set of bytes. It test whether or not our fetcher eventually gives up on
+ // retries and aborts correctly.
if (this->test_.IsMock())
return;
GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE);
{
- FailureHttpFetcherTestDelegate delegate(new PythonHttpServer);
+ PythonHttpServer* server = new PythonHttpServer();
+ int port = server->GetPort();
+ ASSERT_TRUE(server->started_);
+
+ // Handles destruction and claims ownership.
+ FailureHttpFetcherTestDelegate delegate(server);
delegate.loop_ = loop;
scoped_ptr<HttpFetcher> fetcher(this->test_.NewSmallFetcher());
fetcher->set_delegate(&delegate);
StartTransferArgs start_xfer_args = {
fetcher.get(),
- LocalServerUrlForPath(0,
+ LocalServerUrlForPath(port,
base::StringPrintf("/flaky/%d/%d/%d/%d", kBigLength,
kFlakyTruncateLength,
kFlakySleepEvery,