11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/message_loop/message_loop.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/gcm_driver/gcm_channel_status_request.h"
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/url_request/test_url_fetcher_factory.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/url_request/url_request_test_util.h"
91675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch#include "sync/protocol/experiment_status.pb.h"
101675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch#include "sync/protocol/experiments_specifics.pb.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace gcm {
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass GCMChannelStatusRequestTest : public testing::Test {
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GCMChannelStatusRequestTest();
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~GCMChannelStatusRequestTest();
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected:
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  enum GCMStatus {
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    NOT_SPECIFIED,
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    GCM_ENABLED,
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    GCM_DISABLED,
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  };
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void StartRequest();
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void SetResponseStatusAndString(net::HttpStatusCode status_code,
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                  const std::string& response_body);
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void SetResponseProtoData(GCMStatus status, int poll_interval_seconds);
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void CompleteFetch();
321675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  void OnRequestCompleted(bool update_received,
331675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch                          bool enabled,
341675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch                          int poll_interval_seconds);
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<GCMChannelStatusRequest> request_;
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::MessageLoop message_loop_;
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  net::TestURLFetcherFactory url_fetcher_factory_;
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_;
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool request_callback_invoked_;
411675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  bool update_received_;
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool enabled_;
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int poll_interval_seconds_;
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciGCMChannelStatusRequestTest::GCMChannelStatusRequestTest()
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : url_request_context_getter_(new net::TestURLRequestContextGetter(
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci           message_loop_.message_loop_proxy())),
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      request_callback_invoked_(false),
501675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch      update_received_(false),
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      enabled_(true),
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      poll_interval_seconds_(0) {
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciGCMChannelStatusRequestTest::~GCMChannelStatusRequestTest() {
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GCMChannelStatusRequestTest::StartRequest() {
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  request_.reset(new GCMChannelStatusRequest(
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      url_request_context_getter_.get(),
611675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch      "http://channel.status.request.com/",
621675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch      "user agent string",
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::Bind(&GCMChannelStatusRequestTest::OnRequestCompleted,
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                 base::Unretained(this))));
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  request_->Start();
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GCMChannelStatusRequestTest::SetResponseStatusAndString(
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    net::HttpStatusCode status_code,
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const std::string& response_body) {
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(fetcher);
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fetcher->set_response_code(status_code);
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fetcher->SetResponseString(response_body);
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GCMChannelStatusRequestTest::SetResponseProtoData(
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    GCMStatus status, int poll_interval_seconds) {
791675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  sync_pb::ExperimentStatusResponse response_proto;
801675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  if (status != NOT_SPECIFIED) {
811675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch    sync_pb::ExperimentsSpecifics* experiment_specifics =
821675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch        response_proto.add_experiment();
831675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch    experiment_specifics->mutable_gcm_channel()->set_enabled(status ==
841675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch                                                             GCM_ENABLED);
851675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  }
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Zero |poll_interval_seconds| means the optional field is not set.
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (poll_interval_seconds)
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    response_proto.set_poll_interval_seconds(poll_interval_seconds);
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::string response_string;
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  response_proto.SerializeToString(&response_string);
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseStatusAndString(net::HTTP_OK, response_string);
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GCMChannelStatusRequestTest::CompleteFetch() {
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  request_callback_invoked_ = false;
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(fetcher);
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  fetcher->delegate()->OnURLFetchComplete(fetcher);
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid GCMChannelStatusRequestTest::OnRequestCompleted(
1041675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch    bool update_received, bool enabled, int poll_interval_seconds) {
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  request_callback_invoked_ = true;
1061675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  update_received_ = update_received;
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  enabled_ = enabled;
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  poll_interval_seconds_ = poll_interval_seconds;
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1111675a649fd7a8b3cb80ffddae2dc181f122353c5Ben MurdochTEST_F(GCMChannelStatusRequestTest, RequestData) {
1121675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  StartRequest();
1131675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch
1141675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
1151675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  ASSERT_TRUE(fetcher);
1161675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch
1171675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_EQ(GURL(request_->channel_status_request_url_),
1181675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch            fetcher->GetOriginalURL());
1191675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch
1201675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  net::HttpRequestHeaders headers;
1211675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  fetcher->GetExtraRequestHeaders(&headers);
1221675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  std::string user_agent_header;
1231675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  headers.GetHeader("User-Agent", &user_agent_header);
1241675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_FALSE(user_agent_header.empty());
1251675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_EQ(request_->user_agent_, user_agent_header);
1261675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch
1271675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  std::string upload_data = fetcher->upload_data();
1281675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_FALSE(upload_data.empty());
1291675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  sync_pb::ExperimentStatusRequest proto_data;
1301675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  proto_data.ParseFromString(upload_data);
1311675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_EQ(1, proto_data.experiment_name_size());
1321675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_EQ("gcm_channel", proto_data.experiment_name(0));
1331675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch}
1341675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch
1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(GCMChannelStatusRequestTest, ResponseHttpStatusNotOK) {
1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  StartRequest();
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseStatusAndString(net::HTTP_UNAUTHORIZED, "");
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CompleteFetch();
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(request_callback_invoked_);
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(GCMChannelStatusRequestTest, ResponseEmpty) {
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  StartRequest();
1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseStatusAndString(net::HTTP_OK, "");
1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CompleteFetch();
1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1481675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_TRUE(request_callback_invoked_);
1491675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_FALSE(update_received_);
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(GCMChannelStatusRequestTest, ResponseNotInProtoFormat) {
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  StartRequest();
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseStatusAndString(net::HTTP_OK, "foo");
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CompleteFetch();
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(request_callback_invoked_);
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(GCMChannelStatusRequestTest, ResponseEmptyProtoData) {
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  StartRequest();
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseProtoData(NOT_SPECIFIED, 0);
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CompleteFetch();
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1651675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_TRUE(request_callback_invoked_);
1661675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_FALSE(update_received_);
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(GCMChannelStatusRequestTest, ResponseWithDisabledStatus) {
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  StartRequest();
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseProtoData(GCM_DISABLED, 0);
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CompleteFetch();
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(request_callback_invoked_);
1751675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_TRUE(update_received_);
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(enabled_);
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GCMChannelStatusRequest::default_poll_interval_seconds(),
1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      poll_interval_seconds_);
1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(GCMChannelStatusRequestTest, ResponseWithEnabledStatus) {
1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  StartRequest();
1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseProtoData(GCM_ENABLED, 0);
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CompleteFetch();
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(request_callback_invoked_);
1881675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_TRUE(update_received_);
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(enabled_);
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GCMChannelStatusRequest::default_poll_interval_seconds(),
1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      poll_interval_seconds_);
1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(GCMChannelStatusRequestTest, ResponseWithPollInterval) {
1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Setting a poll interval 15 minutes longer than the minimum interval we
1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // enforce.
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int poll_interval_seconds =
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GCMChannelStatusRequest::min_poll_interval_seconds() + 15 * 60;
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  StartRequest();
2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseProtoData(NOT_SPECIFIED, poll_interval_seconds);
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CompleteFetch();
2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(request_callback_invoked_);
2051675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_TRUE(update_received_);
2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(enabled_);
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(poll_interval_seconds, poll_interval_seconds_);
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(GCMChannelStatusRequestTest, ResponseWithShortPollInterval) {
2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Setting a poll interval 15 minutes shorter than the minimum interval we
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // enforce.
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int poll_interval_seconds =
2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GCMChannelStatusRequest::min_poll_interval_seconds() - 15 * 60;
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  StartRequest();
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseProtoData(NOT_SPECIFIED, poll_interval_seconds);
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CompleteFetch();
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(request_callback_invoked_);
2201675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_TRUE(update_received_);
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(enabled_);
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(GCMChannelStatusRequest::min_poll_interval_seconds(),
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            poll_interval_seconds_);
2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(GCMChannelStatusRequestTest, ResponseWithDisabledStatusAndPollInterval) {
2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int poll_interval_seconds =
2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      GCMChannelStatusRequest::min_poll_interval_seconds() + 15 * 60;
2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  StartRequest();
2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetResponseProtoData(GCM_DISABLED, poll_interval_seconds);
2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CompleteFetch();
2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(request_callback_invoked_);
2341675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch  EXPECT_TRUE(update_received_);
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(enabled_);
2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(poll_interval_seconds, poll_interval_seconds_);
2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace gcm
240