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

Side by Side Diff: content/browser/background_fetch/background_fetch_job_data_unittest.cc

Issue 2749043003: Moved tests from DataManager to JobData. (Closed)
Patch Set: Remove unnecessary include. Created 3 years, 9 months 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/background_fetch/background_fetch_job_data.h"
6
7 #include "base/memory/ptr_util.h"
8 #include "content/browser/background_fetch/background_fetch_job_info.h"
9 #include "content/browser/background_fetch/background_fetch_request_info.h"
10 #include "content/public/browser/download_interrupt_reasons.h"
11 #include "content/public/browser/download_item.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace {
15
16 const char kResource[] = "https://example.com/resource.html";
17 const char kTag[] = "TestRequestTag";
18
19 } // namespace
Peter Beverloo 2017/03/16 12:43:50 nit: you can put this in the `content` namespace,
harkness 2017/03/19 18:20:44 Done.
20
21 namespace content {
22
23 class BackgroundFetchJobDataTest : public testing::Test {
24 protected:
25 BackgroundFetchJobDataTest() {}
Peter Beverloo 2017/03/16 12:43:50 = default; (or delete if we can)
harkness 2017/03/19 18:20:45 Done.
26
27 BackgroundFetchJobData* CreateMinimalJobData() {
28 DCHECK(!job_data_);
29 // Create a JobData with a single entry.
30 request_infos_.emplace_back(GURL(kResource), kTag);
31 job_data_ = base::MakeUnique<BackgroundFetchJobData>(request_infos_);
32 return job_data_.get();
33 }
34
35 BackgroundFetchJobData* CreateSmallJobData() {
Peter Beverloo 2017/03/16 12:43:50 optional: Seems like it'd be nicer to just return
harkness 2017/03/19 18:20:44 Done.
36 DCHECK(!job_data_);
37 // Create 10 BackgroundFetchRequestInfos.
38 for (int i = 0; i < 10; i++) {
39 request_infos_.emplace_back(GURL(kResource), kTag);
40 }
41 job_data_ = base::MakeUnique<BackgroundFetchJobData>(request_infos_);
42 return job_data_.get();
43 }
44
45 const BackgroundFetchRequestInfos& request_infos() const {
46 return request_infos_;
47 }
48
49 private:
50 std::unique_ptr<BackgroundFetchJobData> job_data_;
51 BackgroundFetchRequestInfos request_infos_;
52 };
53
54 TEST_F(BackgroundFetchJobDataTest, CompleteJob) {
55 BackgroundFetchJobData* job_data = CreateSmallJobData();
56 const BackgroundFetchRequestInfos& request_infos =
57 BackgroundFetchJobDataTest::request_infos();
Peter Beverloo 2017/03/16 12:43:50 Here and elsewhere - drop the `BackgroundFetchJobD
harkness 2017/03/19 18:20:45 Unfortunately it's here because of a clash in the
58 ASSERT_EQ(10U, request_infos.size());
59
60 // Get all of the fetch requests from the BackgroundFetchJobData.
61 for (int i = 0; i < 10; i++) {
62 EXPECT_FALSE(job_data->IsComplete());
63 ASSERT_TRUE(job_data->HasRequestsRemaining());
64 const BackgroundFetchRequestInfo& request_info =
65 job_data->GetNextBackgroundFetchRequestInfo();
66 EXPECT_EQ(request_info.tag(), kTag);
67 EXPECT_EQ(request_info.state(),
68 DownloadItem::DownloadState::MAX_DOWNLOAD_STATE);
69 EXPECT_EQ(request_info.interrupt_reason(),
70 DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE);
71 }
72
73 // At this point, all the fetches have been started, but none finished.
74 EXPECT_FALSE(job_data->HasRequestsRemaining());
75
76 // Complete all of the fetch requests.
77 for (int i = 0; i < 10; i++) {
78 EXPECT_FALSE(job_data->IsComplete());
79 EXPECT_FALSE(job_data->UpdateBackgroundFetchRequestState(
80 request_infos[i].guid(), DownloadItem::DownloadState::COMPLETE,
81 DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE));
82 }
83
84 // All requests are complete now.
85 EXPECT_TRUE(job_data->IsComplete());
86 }
87
88 TEST_F(BackgroundFetchJobDataTest, OutOfOrderCompletion) {
89 BackgroundFetchJobData* job_data = CreateSmallJobData();
90 const BackgroundFetchRequestInfos& request_infos =
91 BackgroundFetchJobDataTest::request_infos();
92 ASSERT_EQ(10U, request_infos.size());
93
94 // Start half of the fetch requests.
95 for (int i = 0; i < 5; i++) {
96 ASSERT_TRUE(job_data->HasRequestsRemaining());
97 job_data->GetNextBackgroundFetchRequestInfo();
98 }
99
100 // Complete all of the fetches out of order except for #1.
101 DownloadItem::DownloadState complete = DownloadItem::DownloadState::COMPLETE;
102 DownloadInterruptReason no_interrupt =
103 DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE;
104 EXPECT_TRUE(job_data->UpdateBackgroundFetchRequestState(
105 request_infos[3].guid(), complete, no_interrupt));
106 EXPECT_TRUE(job_data->UpdateBackgroundFetchRequestState(
107 request_infos[2].guid(), complete, no_interrupt));
108 EXPECT_TRUE(job_data->UpdateBackgroundFetchRequestState(
109 request_infos[4].guid(), complete, no_interrupt));
110 EXPECT_TRUE(job_data->UpdateBackgroundFetchRequestState(
111 request_infos[0].guid(), complete, no_interrupt));
112
113 EXPECT_TRUE(job_data->HasRequestsRemaining());
114 EXPECT_FALSE(job_data->IsComplete());
115
116 // Start and complete the remaining requests.
117 for (int i = 5; i < 10; i++) {
118 job_data->GetNextBackgroundFetchRequestInfo();
119 job_data->UpdateBackgroundFetchRequestState(request_infos[i].guid(),
120 complete, no_interrupt);
121 }
122
123 EXPECT_FALSE(job_data->IsComplete());
124 EXPECT_FALSE(job_data->HasRequestsRemaining());
125
126 // Complete the final request.
127 EXPECT_FALSE(job_data->UpdateBackgroundFetchRequestState(
128 request_infos[1].guid(), complete, no_interrupt));
129 EXPECT_TRUE(job_data->IsComplete());
130 }
131
132 TEST_F(BackgroundFetchJobDataTest, PauseAndResume) {
133 BackgroundFetchJobData* job_data = CreateMinimalJobData();
134 const BackgroundFetchRequestInfos& request_infos =
135 BackgroundFetchJobDataTest::request_infos();
136 ASSERT_EQ(1U, request_infos.size());
137
138 // Start the request.
139 ASSERT_TRUE(job_data->HasRequestsRemaining());
140 const BackgroundFetchRequestInfo& request_info =
141 job_data->GetNextBackgroundFetchRequestInfo();
142
143 EXPECT_FALSE(job_data->HasRequestsRemaining());
144 EXPECT_FALSE(job_data->IsComplete());
145
146 // Set the request state to be paused. This should not complete the job.
147 EXPECT_FALSE(job_data->UpdateBackgroundFetchRequestState(
148 request_info.guid(), DownloadItem::DownloadState::INTERRUPTED,
149 DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_USER_SHUTDOWN));
150 EXPECT_FALSE(job_data->IsComplete());
151
152 // Unpause the request.
153 EXPECT_FALSE(job_data->UpdateBackgroundFetchRequestState(
154 request_info.guid(), DownloadItem::DownloadState::IN_PROGRESS,
155 DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE));
156 EXPECT_FALSE(job_data->IsComplete());
157
158 // Complete the request.
159 EXPECT_FALSE(job_data->UpdateBackgroundFetchRequestState(
160 request_info.guid(), DownloadItem::DownloadState::COMPLETE,
161 DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_NONE));
162 EXPECT_TRUE(job_data->IsComplete());
163 }
164
165 TEST_F(BackgroundFetchJobDataTest, CancelledRequest) {
166 BackgroundFetchJobData* job_data = CreateMinimalJobData();
167 const BackgroundFetchRequestInfos& request_infos =
168 BackgroundFetchJobDataTest::request_infos();
169 ASSERT_EQ(1U, request_infos.size());
170
171 // Start the request.
172 ASSERT_TRUE(job_data->HasRequestsRemaining());
173 const BackgroundFetchRequestInfo& request_info =
174 job_data->GetNextBackgroundFetchRequestInfo();
175
176 EXPECT_FALSE(job_data->HasRequestsRemaining());
177 EXPECT_FALSE(job_data->IsComplete());
178
179 // Cancel the request.
180 EXPECT_FALSE(job_data->UpdateBackgroundFetchRequestState(
181 request_info.guid(), DownloadItem::DownloadState::CANCELLED,
182 DownloadInterruptReason::DOWNLOAD_INTERRUPT_REASON_FILE_NO_SPACE));
183 EXPECT_TRUE(job_data->IsComplete());
184 }
185
186 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/background_fetch/background_fetch_data_manager_unittest.cc ('k') | content/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698