| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <unistd.h> | 5 #include <unistd.h> |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 | 129 |
| 130 template <> | 130 template <> |
| 131 class HttpFetcherTest<LibcurlHttpFetcher> : public ::testing::Test { | 131 class HttpFetcherTest<LibcurlHttpFetcher> : public ::testing::Test { |
| 132 public: | 132 public: |
| 133 virtual HttpFetcher* NewLargeFetcher() { | 133 virtual HttpFetcher* NewLargeFetcher() { |
| 134 LibcurlHttpFetcher *ret = new LibcurlHttpFetcher; | 134 LibcurlHttpFetcher *ret = new LibcurlHttpFetcher; |
| 135 // Speed up test execution. | 135 // Speed up test execution. |
| 136 ret->set_idle_seconds(1); | 136 ret->set_idle_seconds(1); |
| 137 ret->set_retry_seconds(1); | 137 ret->set_retry_seconds(1); |
| 138 ret->SetConnectionAsExpensive(false); | 138 ret->SetConnectionAsExpensive(false); |
| 139 ret->SetBuildType(false); |
| 139 return ret; | 140 return ret; |
| 140 } | 141 } |
| 141 HttpFetcher* NewSmallFetcher() { | 142 HttpFetcher* NewSmallFetcher() { |
| 142 return NewLargeFetcher(); | 143 return NewLargeFetcher(); |
| 143 } | 144 } |
| 144 string BigUrl() const { | 145 string BigUrl() const { |
| 145 return LocalServerUrlForPath("/big"); | 146 return LocalServerUrlForPath("/big"); |
| 146 } | 147 } |
| 147 string SmallUrl() const { | 148 string SmallUrl() const { |
| 148 return LocalServerUrlForPath("/foo"); | 149 return LocalServerUrlForPath("/foo"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 162 public: | 163 public: |
| 163 HttpFetcher* NewLargeFetcher() { | 164 HttpFetcher* NewLargeFetcher() { |
| 164 MultiHttpFetcher<LibcurlHttpFetcher> *ret = | 165 MultiHttpFetcher<LibcurlHttpFetcher> *ret = |
| 165 new MultiHttpFetcher<LibcurlHttpFetcher>; | 166 new MultiHttpFetcher<LibcurlHttpFetcher>; |
| 166 MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect | 167 MultiHttpFetcher<LibcurlHttpFetcher>::RangesVect |
| 167 ranges(1, make_pair(0, -1)); | 168 ranges(1, make_pair(0, -1)); |
| 168 ret->set_ranges(ranges); | 169 ret->set_ranges(ranges); |
| 169 // Speed up test execution. | 170 // Speed up test execution. |
| 170 ret->set_idle_seconds(1); | 171 ret->set_idle_seconds(1); |
| 171 ret->set_retry_seconds(1); | 172 ret->set_retry_seconds(1); |
| 173 ret->SetConnectionAsExpensive(false); |
| 174 ret->SetBuildType(false); |
| 172 return ret; | 175 return ret; |
| 173 } | 176 } |
| 174 bool IsMulti() const { return true; } | 177 bool IsMulti() const { return true; } |
| 175 }; | 178 }; |
| 176 | 179 |
| 177 typedef ::testing::Types<LibcurlHttpFetcher, | 180 typedef ::testing::Types<LibcurlHttpFetcher, |
| 178 MockHttpFetcher, | 181 MockHttpFetcher, |
| 179 MultiHttpFetcher<LibcurlHttpFetcher> > | 182 MultiHttpFetcher<LibcurlHttpFetcher> > |
| 180 HttpFetcherTestTypes; | 183 HttpFetcherTestTypes; |
| 181 TYPED_TEST_CASE(HttpFetcherTest, HttpFetcherTestTypes); | 184 TYPED_TEST_CASE(HttpFetcherTest, HttpFetcherTestTypes); |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 int expected_response_code) { | 609 int expected_response_code) { |
| 607 GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); | 610 GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); |
| 608 { | 611 { |
| 609 MultiHttpFetcherTestDelegate delegate(expected_response_code); | 612 MultiHttpFetcherTestDelegate delegate(expected_response_code); |
| 610 delegate.loop_ = loop; | 613 delegate.loop_ = loop; |
| 611 scoped_ptr<HttpFetcher> fetcher(fetcher_in); | 614 scoped_ptr<HttpFetcher> fetcher(fetcher_in); |
| 612 MultiHttpFetcher<LibcurlHttpFetcher>* multi_fetcher = | 615 MultiHttpFetcher<LibcurlHttpFetcher>* multi_fetcher = |
| 613 dynamic_cast<MultiHttpFetcher<LibcurlHttpFetcher>*>(fetcher.get()); | 616 dynamic_cast<MultiHttpFetcher<LibcurlHttpFetcher>*>(fetcher.get()); |
| 614 ASSERT_TRUE(multi_fetcher); | 617 ASSERT_TRUE(multi_fetcher); |
| 615 multi_fetcher->set_ranges(ranges); | 618 multi_fetcher->set_ranges(ranges); |
| 619 multi_fetcher->SetConnectionAsExpensive(false); |
| 620 multi_fetcher->SetBuildType(false); |
| 616 fetcher->set_delegate(&delegate); | 621 fetcher->set_delegate(&delegate); |
| 617 | 622 |
| 618 StartTransferArgs start_xfer_args = {fetcher.get(), url}; | 623 StartTransferArgs start_xfer_args = {fetcher.get(), url}; |
| 619 | 624 |
| 620 g_timeout_add(0, StartTransfer, &start_xfer_args); | 625 g_timeout_add(0, StartTransfer, &start_xfer_args); |
| 621 g_main_loop_run(loop); | 626 g_main_loop_run(loop); |
| 622 | 627 |
| 623 EXPECT_EQ(expected_size, delegate.data.size()); | 628 EXPECT_EQ(expected_size, delegate.data.size()); |
| 624 EXPECT_EQ(expected_prefix, | 629 EXPECT_EQ(expected_prefix, |
| 625 string(delegate.data.data(), expected_prefix.size())); | 630 string(delegate.data.data(), expected_prefix.size())); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 691 this->BigUrl(), | 696 this->BigUrl(), |
| 692 ranges, | 697 ranges, |
| 693 "ij", | 698 "ij", |
| 694 2, | 699 2, |
| 695 0); | 700 0); |
| 696 ranges.push_back(make_pair(0, 5)); | 701 ranges.push_back(make_pair(0, 5)); |
| 697 } | 702 } |
| 698 } | 703 } |
| 699 | 704 |
| 700 namespace { | 705 namespace { |
| 701 class ExpensiveConnectionTestDelegate : public HttpFetcherDelegate { | 706 class BlockedTransferTestDelegate : public HttpFetcherDelegate { |
| 702 public: | 707 public: |
| 703 virtual void ReceivedBytes(HttpFetcher* fetcher, | 708 virtual void ReceivedBytes(HttpFetcher* fetcher, |
| 704 const char* bytes, int length) { | 709 const char* bytes, int length) { |
| 705 ADD_FAILURE(); | 710 ADD_FAILURE(); |
| 706 } | 711 } |
| 707 virtual void TransferComplete(HttpFetcher* fetcher, bool successful) { | 712 virtual void TransferComplete(HttpFetcher* fetcher, bool successful) { |
| 708 EXPECT_FALSE(successful); | 713 EXPECT_FALSE(successful); |
| 709 g_main_loop_quit(loop_); | 714 g_main_loop_quit(loop_); |
| 710 } | 715 } |
| 711 GMainLoop* loop_; | 716 GMainLoop* loop_; |
| 712 }; | 717 }; |
| 713 | 718 |
| 714 } // namespace | 719 } // namespace |
| 715 | 720 |
| 716 TYPED_TEST(HttpFetcherTest, ExpensiveConnectionTest) { | 721 TYPED_TEST(HttpFetcherTest, BlockedTransferTest) { |
| 717 if (this->IsMock() || this->IsMulti()) | 722 if (this->IsMock() || this->IsMulti()) |
| 718 return; | 723 return; |
| 719 typename TestFixture::HttpServer server; | |
| 720 | |
| 721 ASSERT_TRUE(server.started_); | |
| 722 | 724 |
| 723 GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); | 725 for (int i = 0; i < 2; i++) { |
| 724 ExpensiveConnectionTestDelegate delegate; | 726 typename TestFixture::HttpServer server; |
| 725 delegate.loop_ = loop; | |
| 726 | 727 |
| 727 scoped_ptr<HttpFetcher> fetcher(this->NewLargeFetcher()); | 728 ASSERT_TRUE(server.started_); |
| 728 dynamic_cast<LibcurlHttpFetcher*>( | |
| 729 fetcher.get())->SetConnectionAsExpensive(true); | |
| 730 fetcher->set_delegate(&delegate); | |
| 731 | 729 |
| 732 StartTransferArgs start_xfer_args = | 730 GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); |
| 733 { fetcher.get(), LocalServerUrlForPath(this->SmallUrl()) }; | 731 BlockedTransferTestDelegate delegate; |
| 732 delegate.loop_ = loop; |
| 734 | 733 |
| 735 g_timeout_add(0, StartTransfer, &start_xfer_args); | 734 scoped_ptr<HttpFetcher> fetcher(this->NewLargeFetcher()); |
| 736 g_main_loop_run(loop); | 735 LibcurlHttpFetcher* curl_fetcher = |
| 737 g_main_loop_unref(loop); | 736 dynamic_cast<LibcurlHttpFetcher*>(fetcher.get()); |
| 737 bool is_expensive_connection = (i == 0); |
| 738 bool is_official_build = (i == 1); |
| 739 LOG(INFO) << "is_expensive_connection: " << is_expensive_connection; |
| 740 LOG(INFO) << "is_official_build: " << is_official_build; |
| 741 curl_fetcher->SetConnectionAsExpensive(is_expensive_connection); |
| 742 curl_fetcher->SetBuildType(is_official_build); |
| 743 fetcher->set_delegate(&delegate); |
| 744 |
| 745 StartTransferArgs start_xfer_args = |
| 746 { fetcher.get(), LocalServerUrlForPath(this->SmallUrl()) }; |
| 747 |
| 748 g_timeout_add(0, StartTransfer, &start_xfer_args); |
| 749 g_main_loop_run(loop); |
| 750 g_main_loop_unref(loop); |
| 751 } |
| 738 } | 752 } |
| 739 | 753 |
| 740 } // namespace chromeos_update_engine | 754 } // namespace chromeos_update_engine |
| OLD | NEW |