AU: MultiHttpFetcher cleanup/rewrite
This is the first of many CLs to cleanup/refactor/unfork the
HttpFetcher classes.
This CL changes MultiHttpFetcher to MultiRangeHTTPFetcher, makes it
work with a single base fetcher, and un-templatizes it.
Also, fix a (new?) bug in SConstruct w/ setting CCFLAGS.
TEST=unittests, tested an interrupted/resumed update on device.
BUG=10395
Review URL: http://codereview.chromium.org/5835004
Change-Id: I8422358a6d425233987dd799c5ee7c87135d85fd
diff --git a/http_fetcher_unittest.cc b/http_fetcher_unittest.cc
index a42bb3b..ccda0b6 100644
--- a/http_fetcher_unittest.cc
+++ b/http_fetcher_unittest.cc
@@ -16,10 +16,11 @@
#include "update_engine/libcurl_http_fetcher.h"
#include "update_engine/mock_http_fetcher.h"
-#include "update_engine/multi_http_fetcher.h"
+#include "update_engine/multi_range_http_fetcher.h"
#include "update_engine/proxy_resolver.h"
using std::make_pair;
+using std::pair;
using std::string;
using std::vector;
@@ -170,16 +171,16 @@
};
template <>
-class HttpFetcherTest<MultiHttpFetcher<LibcurlHttpFetcher> >
+class HttpFetcherTest<MultiRangeHTTPFetcher>
: public HttpFetcherTest<LibcurlHttpFetcher> {
public:
HttpFetcher* NewLargeFetcher() {
- MultiHttpFetcher<LibcurlHttpFetcher> *ret =
- new MultiHttpFetcher<LibcurlHttpFetcher>(
- reinterpret_cast<ProxyResolver*>(&proxy_resolver_));
- MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect
- ranges(1, make_pair(0, -1));
- ret->set_ranges(ranges);
+ ProxyResolver* resolver =
+ reinterpret_cast<ProxyResolver*>(&proxy_resolver_);
+ MultiRangeHTTPFetcher *ret =
+ new MultiRangeHTTPFetcher(new LibcurlHttpFetcher(resolver));
+ ret->ClearRanges();
+ ret->AddRange(0, -1);
// Speed up test execution.
ret->set_idle_seconds(1);
ret->set_retry_seconds(1);
@@ -193,7 +194,7 @@
typedef ::testing::Types<LibcurlHttpFetcher,
MockHttpFetcher,
- MultiHttpFetcher<LibcurlHttpFetcher> >
+ MultiRangeHTTPFetcher>
HttpFetcherTestTypes;
TYPED_TEST_CASE(HttpFetcherTest, HttpFetcherTestTypes);
@@ -344,7 +345,7 @@
callback_once_ = false;
// |fetcher| can be destroyed during this callback.
fetcher_.reset(NULL);
- }
+ }
void TerminateTransfer() {
CHECK(once_);
once_ = false;
@@ -651,7 +652,7 @@
void MultiTest(HttpFetcher* fetcher_in,
const string& url,
- const MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect& ranges,
+ const vector<pair<off_t, off_t> >& ranges,
const string& expected_prefix,
off_t expected_size,
int expected_response_code) {
@@ -660,10 +661,15 @@
MultiHttpFetcherTestDelegate delegate(expected_response_code);
delegate.loop_ = loop;
delegate.fetcher_.reset(fetcher_in);
- MultiHttpFetcher<LibcurlHttpFetcher>* multi_fetcher =
- dynamic_cast<MultiHttpFetcher<LibcurlHttpFetcher>*>(fetcher_in);
+ MultiRangeHTTPFetcher* multi_fetcher =
+ dynamic_cast<MultiRangeHTTPFetcher*>(fetcher_in);
ASSERT_TRUE(multi_fetcher);
- multi_fetcher->set_ranges(ranges);
+ multi_fetcher->ClearRanges();
+ for (vector<pair<off_t, off_t> >::const_iterator it = ranges.begin(),
+ e = ranges.end(); it != e; ++it) {
+ LOG(INFO) << "Adding range";
+ multi_fetcher->AddRange(it->first, it->second);
+ }
multi_fetcher->SetConnectionAsExpensive(false);
multi_fetcher->SetBuildType(false);
multi_fetcher->set_delegate(&delegate);
@@ -687,7 +693,7 @@
typename TestFixture::HttpServer server;
ASSERT_TRUE(server.started_);
- MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect ranges;
+ vector<pair<off_t, off_t> > ranges;
ranges.push_back(make_pair(0, 25));
ranges.push_back(make_pair(99, -1));
MultiTest(this->NewLargeFetcher(),
@@ -704,7 +710,7 @@
typename TestFixture::HttpServer server;
ASSERT_TRUE(server.started_);
- MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect ranges;
+ vector<pair<off_t, off_t> > ranges;
ranges.push_back(make_pair(0, 24));
MultiTest(this->NewLargeFetcher(),
this->BigUrl(),
@@ -720,7 +726,7 @@
typename TestFixture::HttpServer server;
ASSERT_TRUE(server.started_);
- MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect ranges;
+ vector<pair<off_t, off_t> > ranges;
ranges.push_back(make_pair(kBigSize - 2, -1));
ranges.push_back(make_pair(kBigSize - 3, -1));
MultiTest(this->NewLargeFetcher(),
@@ -737,9 +743,10 @@
typename TestFixture::HttpServer server;
ASSERT_TRUE(server.started_);
- MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect ranges;
+ vector<pair<off_t, off_t> > ranges;
ranges.push_back(make_pair(kBigSize - 2, 4));
for (int i = 0; i < 2; ++i) {
+ LOG(INFO) << "i = " << i;
MultiTest(this->NewLargeFetcher(),
this->BigUrl(),
ranges,