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

Side by Side Diff: components/gcm_driver/gcm_channel_status_request_unittest.cc

Issue 530253002: Add GCMChannelStatusRequest to talk with server for all users (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync Created 6 years, 3 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 2014 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 "base/message_loop/message_loop.h"
6 #include "components/gcm_driver/gcm_channel_status_request.h"
7 #include "components/gcm_driver/proto/gcm_channel_status.pb.h"
8 #include "net/url_request/test_url_fetcher_factory.h"
9 #include "net/url_request/url_request_test_util.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace gcm {
13
14 class GCMChannelStatusRequestTest : public testing::Test {
15 public:
16 GCMChannelStatusRequestTest();
17 virtual ~GCMChannelStatusRequestTest();
18
19 protected:
20 enum GCMStatus {
21 NOT_SPECIFIED,
22 GCM_ENABLED,
23 GCM_DISABLED,
24 };
25
26 void StartRequest();
27 void SetResponseStatusAndString(net::HttpStatusCode status_code,
28 const std::string& response_body);
29 void SetResponseProtoData(GCMStatus status, int poll_interval_seconds);
30 void CompleteFetch();
31 void OnRequestCompleted(bool enabled, const base::TimeDelta& poll_interval);
32
33 scoped_ptr<GCMChannelStatusRequest> request_;
34 base::MessageLoop message_loop_;
35 net::TestURLFetcherFactory url_fetcher_factory_;
36 scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_;
37 bool request_callback_invoked_;
38 bool enabled_;
39 base::TimeDelta poll_interval_;
40 };
41
42 GCMChannelStatusRequestTest::GCMChannelStatusRequestTest()
43 : url_request_context_getter_(new net::TestURLRequestContextGetter(
44 message_loop_.message_loop_proxy())),
45 request_callback_invoked_(false),
46 enabled_(false) {
Nicolas Zea 2014/09/04 23:57:50 Presumably we'll normally be enabled by default ri
jianli 2014/09/05 18:41:55 Done.
47 }
48
49 GCMChannelStatusRequestTest::~GCMChannelStatusRequestTest() {
50 }
51
52 void GCMChannelStatusRequestTest::StartRequest() {
53 request_.reset(new GCMChannelStatusRequest(
54 "",
55 url_request_context_getter_.get(),
56 base::Bind(&GCMChannelStatusRequestTest::OnRequestCompleted,
57 base::Unretained(this))));
58 request_->Start();
59 }
60
61 void GCMChannelStatusRequestTest::SetResponseStatusAndString(
62 net::HttpStatusCode status_code,
63 const std::string& response_body) {
64 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
65 ASSERT_TRUE(fetcher);
66 fetcher->set_response_code(status_code);
67 fetcher->SetResponseString(response_body);
68 }
69
70 void GCMChannelStatusRequestTest::SetResponseProtoData(
71 GCMStatus status, int poll_interval_seconds) {
72 gcm_proto::ExperimentStatusResponse response_proto;
73 if (status != NOT_SPECIFIED)
74 response_proto.mutable_gcm_channel()->set_enabled(status == GCM_ENABLED);
75
76 // Zero |poll_interval_seconds| means the optional field is not set.
77 if (poll_interval_seconds)
78 response_proto.set_poll_interval_seconds(poll_interval_seconds);
79
80 std::string response_string;
81 response_proto.SerializeToString(&response_string);
82 SetResponseStatusAndString(net::HTTP_OK, response_string);
83 }
84
85 void GCMChannelStatusRequestTest::CompleteFetch() {
86 request_callback_invoked_ = false;
87 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
88 ASSERT_TRUE(fetcher);
89 fetcher->delegate()->OnURLFetchComplete(fetcher);
90 }
91
92 void GCMChannelStatusRequestTest::OnRequestCompleted(
93 bool enabled, const base::TimeDelta& poll_interval) {
94 request_callback_invoked_ = true;
95 enabled_ = enabled;
96 poll_interval_ = poll_interval;
97 }
98
99 TEST_F(GCMChannelStatusRequestTest, ResponseHttpStatusNotOK) {
100 StartRequest();
101 SetResponseStatusAndString(net::HTTP_UNAUTHORIZED, "");
102 CompleteFetch();
103
104 EXPECT_FALSE(request_callback_invoked_);
105 }
106
107 TEST_F(GCMChannelStatusRequestTest, ResponseEmpty) {
108 StartRequest();
109 SetResponseStatusAndString(net::HTTP_OK, "");
110 CompleteFetch();
111
112 EXPECT_FALSE(request_callback_invoked_);
113 }
114
115 TEST_F(GCMChannelStatusRequestTest, ResponseNotInProtoFormat) {
116 StartRequest();
117 SetResponseStatusAndString(net::HTTP_OK, "foo");
118 CompleteFetch();
119
120 EXPECT_FALSE(request_callback_invoked_);
121 }
122
123 TEST_F(GCMChannelStatusRequestTest, ResponseEmptyProtoData) {
124 StartRequest();
125 SetResponseProtoData(NOT_SPECIFIED, 0);
126 CompleteFetch();
127
128 EXPECT_FALSE(request_callback_invoked_);
129 }
130
131 TEST_F(GCMChannelStatusRequestTest, ResponseWithDisabledStatus) {
132 StartRequest();
133 SetResponseProtoData(GCM_DISABLED, 0);
134 CompleteFetch();
135
136 EXPECT_TRUE(request_callback_invoked_);
137 EXPECT_FALSE(enabled_);
138 EXPECT_EQ(GCMChannelStatusRequest::default_poll_interval_for_testing(),
139 poll_interval_);
140 }
141
142 TEST_F(GCMChannelStatusRequestTest, ResponseWithEnabledStatus) {
143 StartRequest();
144 SetResponseProtoData(GCM_ENABLED, 0);
145 CompleteFetch();
146
147 EXPECT_TRUE(request_callback_invoked_);
148 EXPECT_TRUE(enabled_);
149 EXPECT_EQ(GCMChannelStatusRequest::default_poll_interval_for_testing(),
150 poll_interval_);
151 }
152
153 TEST_F(GCMChannelStatusRequestTest, ResponseWithPollInterval) {
154 // Setting a poll interval 15 minutes longer than the minimum interval we
155 // enforce.
156 base::TimeDelta poll_interval =
157 GCMChannelStatusRequest::min_poll_interval_for_testing() +
158 base::TimeDelta::FromMinutes(15);
Nicolas Zea 2014/09/04 23:57:50 Isn't the minimum 30 minutes?
jianli 2014/09/05 18:41:55 Yes, the minimum is 30 minutes. Here we're setting
159 StartRequest();
160 SetResponseProtoData(NOT_SPECIFIED, poll_interval.InSeconds());
161 CompleteFetch();
162
163 EXPECT_TRUE(request_callback_invoked_);
164 EXPECT_TRUE(enabled_);
165 EXPECT_EQ(poll_interval, poll_interval_);
166 }
167
168 TEST_F(GCMChannelStatusRequestTest, ResponseWithShortPollInterval) {
169 // Setting a poll interval 15 minutes shorter than the minimum interval we
170 // enforce.
171 base::TimeDelta poll_interval =
172 GCMChannelStatusRequest::min_poll_interval_for_testing() -
173 base::TimeDelta::FromMinutes(15);
174 StartRequest();
175 SetResponseProtoData(NOT_SPECIFIED, poll_interval.InSeconds());
176 CompleteFetch();
177
178 EXPECT_TRUE(request_callback_invoked_);
179 EXPECT_TRUE(enabled_);
180 EXPECT_EQ(GCMChannelStatusRequest::min_poll_interval_for_testing(),
181 poll_interval_);
182 }
183
184 TEST_F(GCMChannelStatusRequestTest, ResponseWithDisabledStatusAndPollInterval) {
185 base::TimeDelta poll_interval =
186 GCMChannelStatusRequest::min_poll_interval_for_testing() +
187 base::TimeDelta::FromMinutes(15);
188 StartRequest();
189 SetResponseProtoData(GCM_DISABLED, poll_interval.InSeconds());
190 CompleteFetch();
191
192 EXPECT_TRUE(request_callback_invoked_);
193 EXPECT_FALSE(enabled_);
194 EXPECT_EQ(poll_interval, poll_interval_);
195 }
196
197 } // namespace gcm
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698