10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file. 40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/gcm_driver/gcm_stats_recorder_impl.h" 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include <deque> 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include <string> 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include <vector> 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "google_apis/gcm/engine/mcs_client.h" 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace gcm { 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace { 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static uint64 kAndroidId = 4U; 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const char kCheckinStatus[] = "URL_FETCHING_FAILED"; 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kHost[] = "www.example.com"; 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const char kAppId[] = "app id 1"; 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kFrom[] = "from"; 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kSenderIds[] = "s1,s2"; 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const char kReceiverId[] = "receiver 1"; 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const char kMessageId[] = "message id 1"; 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const int kQueuedSec = 5; 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const gcm::MCSClient::MessageSendStatus kMessageSendStatus = 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch gcm::MCSClient::QUEUED; 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const int kByteSize = 99; 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const int kTTL = 7; 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const int kRetries = 3; 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const int64 kDelay = 15000; 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const ConnectionFactory::ConnectionResetReason kReason = 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ConnectionFactory::NETWORK_CHANGE; 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const int kNetworkError = 1; 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const RegistrationRequest::Status kRegistrationStatus = 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RegistrationRequest::SUCCESS; 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const UnregistrationRequest::Status kUnregistrationStatus = 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu UnregistrationRequest::SUCCESS; 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const char kCheckinInitiatedEvent[] = "Checkin initiated"; 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const char kCheckinInitiatedDetails[] = "Android Id: 4"; 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const char kCheckinDelayedDueToBackoffEvent[] = "Checkin backoff"; 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const char kCheckinDelayedDueToBackoffDetails[] = 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) "Delayed for 15000 msec"; 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const char kCheckinSuccessEvent[] = "Checkin succeeded"; 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const char kCheckinSuccessDetails[] = ""; 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const char kCheckinFailureEvent[] = "Checkin failed"; 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)static const char kCheckinFailureDetails[] = "URL_FETCHING_FAILED. Will retry."; 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionInitiatedEvent[] = "Connection initiated"; 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionInitiatedDetails[] = "www.example.com"; 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionDelayedDueToBackoffEvent[] = "Connection backoff"; 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionDelayedDueToBackoffDetails[] = 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "Delayed for 15000 msec"; 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionSuccessEvent[] = "Connection succeeded"; 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionSuccessDetails[] = ""; 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionFailureEvent[] = "Connection failed"; 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionFailureDetails[] = "With network error 1"; 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionResetSignaledEvent[] = "Connection reset"; 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kConnectionResetSignaledDetails[] = "NETWORK_CHANGE"; 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kRegistrationSentEvent[] = "Registration request sent"; 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kRegistrationSentDetails[] = ""; 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kRegistrationResponseEvent[] = 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "Registration response received"; 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kRegistrationResponseDetails[] = "SUCCESS"; 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kRegistrationRetryRequestedEvent[] = 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "Registration retry requested"; 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kRegistrationRetryRequestedDetails[] = "Retries left: 3"; 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kUnregistrationSentEvent[] = "Unregistration request sent"; 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kUnregistrationSentDetails[] = ""; 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kUnregistrationResponseEvent[] = 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "Unregistration response received"; 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kUnregistrationResponseDetails[] = "SUCCESS"; 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kUnregistrationRetryDelayedEvent[] = 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "Unregistration retry delayed"; 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kUnregistrationRetryDelayedDetails[] = 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "Delayed for 15000 msec"; 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kDataReceivedEvent[] = "Data msg received"; 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kDataReceivedDetails[] = ""; 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kDataReceivedNotRegisteredEvent[] = "Data msg received"; 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kDataReceivedNotRegisteredDetails[] = 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "No such registered app found"; 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kDataDeletedMessageEvent[] = "Data msg received"; 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liustatic const char kDataDeletedMessageDetails[] = 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu "Message has been deleted on server"; 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const char kDataSentToWireEvent[] = "Data msg sent to wire"; 920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const char kSentToWireDetails[] = "Msg queued for 5 seconds"; 930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const char kNotifySendStatusEvent[] = "SEND status: QUEUED"; 940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const char kNotifySendStatusDetails[] = "Msg size: 99 bytes, TTL: 7"; 950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const char kIncomingSendErrorEvent[] = "Received 'send error' msg"; 960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstatic const char kIncomingSendErrorDetails[] = ""; 970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace 990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class GCMStatsRecorderImplTest : public testing::Test { 1010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public: 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GCMStatsRecorderImplTest(); 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~GCMStatsRecorderImplTest(); 1040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void SetUp() OVERRIDE; 1050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 106010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void VerifyRecordedCheckinCount(int expected_count) { 107010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(expected_count, 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static_cast<int>(recorder_.checkin_activities().size())); 109010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 1105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyRecordedConnectionCount(int expected_count) { 1115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_count, 1125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static_cast<int>(recorder_.connection_activities().size())); 1135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyRecordedRegistrationCount(int expected_count) { 1155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_count, 1165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static_cast<int>(recorder_.registration_activities().size())); 1175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyRecordedReceivingCount(int expected_count) { 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(expected_count, 1205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu static_cast<int>(recorder_.receiving_activities().size())); 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void VerifyRecordedSendingCount(int expected_count) { 1230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(expected_count, 1240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch static_cast<int>(recorder_.sending_activities().size())); 1250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void VerifyAllActivityQueueEmpty(const std::string& remark) { 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(recorder_.checkin_activities().empty()) << remark; 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(recorder_.connection_activities().empty()) << remark; 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(recorder_.registration_activities().empty()) << remark; 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(recorder_.receiving_activities().empty()) << remark; 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(recorder_.sending_activities().empty()) << remark; 132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void VerifyCheckinInitiated(const std::string& remark) { 135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyCheckin(recorder_.checkin_activities(), 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kCheckinInitiatedEvent, 137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kCheckinInitiatedDetails, 138010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) remark); 139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void VerifyCheckinDelayedDueToBackoff(const std::string& remark) { 142010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyCheckin(recorder_.checkin_activities(), 143010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kCheckinDelayedDueToBackoffEvent, 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kCheckinDelayedDueToBackoffDetails, 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) remark); 146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 148010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void VerifyCheckinSuccess(const std::string& remark) { 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyCheckin(recorder_.checkin_activities(), 150010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kCheckinSuccessEvent, 151010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kCheckinSuccessDetails, 152010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) remark); 153010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 154010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 155010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void VerifyCheckinFailure(const std::string& remark) { 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyCheckin(recorder_.checkin_activities(), 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kCheckinFailureEvent, 158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kCheckinFailureDetails, 159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) remark); 160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 1625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyConnectionInitiated(const std::string& remark) { 1635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnection(recorder_.connection_activities(), 1645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionInitiatedEvent, 1655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionInitiatedDetails, 1665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 1675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyConnectionDelayedDueToBackoff(const std::string& remark) { 1705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnection(recorder_.connection_activities(), 1715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionDelayedDueToBackoffEvent, 1725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionDelayedDueToBackoffDetails, 1735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 1745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyConnectionSuccess(const std::string& remark) { 1775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnection(recorder_.connection_activities(), 1785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionSuccessEvent, 1795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionSuccessDetails, 1805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 1815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyConnectionFailure(const std::string& remark) { 1845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnection(recorder_.connection_activities(), 1855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionFailureEvent, 1865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionFailureDetails, 1875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 1885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyConnectionResetSignaled(const std::string& remark) { 1915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnection(recorder_.connection_activities(), 1925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionResetSignaledEvent, 1935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kConnectionResetSignaledDetails, 1945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 1950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 1960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 1975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyRegistrationSent(const std::string& remark) { 1985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRegistration(recorder_.registration_activities(), 1995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kSenderIds, 2005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kRegistrationSentEvent, 2015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kRegistrationSentDetails, 2025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyRegistrationResponse(const std::string& remark) { 2065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRegistration(recorder_.registration_activities(), 2075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kSenderIds, 2085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kRegistrationResponseEvent, 2095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kRegistrationResponseDetails, 2105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyRegistrationRetryRequested(const std::string& remark) { 2145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRegistration(recorder_.registration_activities(), 2155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kSenderIds, 2165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kRegistrationRetryRequestedEvent, 2175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kRegistrationRetryRequestedDetails, 2185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyUnregistrationSent(const std::string& remark) { 2225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRegistration(recorder_.registration_activities(), 2235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string(), 2245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kUnregistrationSentEvent, 2255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kUnregistrationSentDetails, 2265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyUnregistrationResponse(const std::string& remark) { 2305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRegistration(recorder_.registration_activities(), 2315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string(), 2325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kUnregistrationResponseEvent, 2335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kUnregistrationResponseDetails, 2345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyUnregistrationRetryDelayed(const std::string& remark) { 2385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRegistration(recorder_.registration_activities(), 2395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::string(), 2405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kUnregistrationRetryDelayedEvent, 2415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kUnregistrationRetryDelayedDetails, 2425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 245010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void VerifyDataMessageReceived(const std::string& remark) { 2465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyReceivingData(recorder_.receiving_activities(), 2475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kDataReceivedEvent, 2485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kDataReceivedDetails, 2495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyDataDeletedMessage(const std::string& remark) { 2535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyReceivingData(recorder_.receiving_activities(), 2545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kDataDeletedMessageEvent, 2555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kDataDeletedMessageDetails, 2565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 259010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void VerifyDataMessageReceivedNotRegistered(const std::string& remark) { 2605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyReceivingData(recorder_.receiving_activities(), 2615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kDataReceivedNotRegisteredEvent, 2625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kDataReceivedNotRegisteredDetails, 2635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyDataSentToWire(const std::string& remark) { 2675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifySendingData(recorder_.sending_activities(), 2685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kDataSentToWireEvent, 2695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kSentToWireDetails, 2705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyNotifySendStatus(const std::string& remark) { 2745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifySendingData(recorder_.sending_activities(), 2755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kNotifySendStatusEvent, 2765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kNotifySendStatusDetails, 2775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyIncomingSendError(const std::string& remark) { 2815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifySendingData(recorder_.sending_activities(), 2825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kIncomingSendErrorEvent, 2835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kIncomingSendErrorDetails, 2845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu remark); 2850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch protected: 288010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void VerifyCheckin( 289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::deque<CheckinActivity>& queue, 290010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& event, 291010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& details, 292010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& remark) { 293010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(event, queue.front().event) << remark; 294010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(details, queue.front().details) << remark; 295010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 296010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 2975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyConnection( 298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::deque<ConnectionActivity>& queue, 2995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& event, 3005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& details, 3015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& remark) { 3025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(event, queue.front().event) << remark; 3035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(details, queue.front().details) << remark; 3045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 3055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyRegistration( 307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::deque<RegistrationActivity>& queue, 3085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& sender_ids, 3095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& event, 3105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& details, 3115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& remark) { 3125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(kAppId, queue.front().app_id) << remark; 3135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(sender_ids, queue.front().sender_ids) << remark; 3145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(event, queue.front().event) << remark; 3155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(details, queue.front().details) << remark; 3165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 3175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifyReceivingData( 319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::deque<ReceivingActivity>& queue, 3205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& event, 3215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& details, 3225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& remark) { 3235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(kAppId, queue.front().app_id) << remark; 3245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(kFrom, queue.front().from) << remark; 3255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(kByteSize, queue.front().message_byte_size) << remark; 3265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(event, queue.front().event) << remark; 3275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu EXPECT_EQ(details, queue.front().details) << remark; 3285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 3295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void VerifySendingData( 331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::deque<SendingActivity>& queue, 3325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& event, const std::string& details, 3335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const std::string& remark) { 3340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(kAppId, queue.front().app_id) << remark; 3350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(kReceiverId, queue.front().receiver_id) << remark; 3360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(kMessageId, queue.front().message_id) << remark; 3370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(event, queue.front().event) << remark; 3380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(details, queue.front().details) << remark; 3390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 3400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu std::vector<std::string> sender_ids_; 34246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GCMStatsRecorderImpl recorder_; 3430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 3440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 34546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)GCMStatsRecorderImplTest::GCMStatsRecorderImplTest(){ 3460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 3470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 34846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)GCMStatsRecorderImplTest::~GCMStatsRecorderImplTest() {} 3490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 35046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void GCMStatsRecorderImplTest::SetUp(){ 3515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu sender_ids_.push_back("s1"); 3525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu sender_ids_.push_back("s2"); 3530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.SetRecording(true); 3540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 3550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 35646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(GCMStatsRecorderImplTest, StartStopRecordingTest) { 3570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(recorder_.is_recording()); 3580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec); 3590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyRecordedSendingCount(1); 3600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyDataSentToWire("1st call"); 3610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.SetRecording(false); 3630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_FALSE(recorder_.is_recording()); 364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.Clear(); 365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyAllActivityQueueEmpty("all cleared"); 366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Exercise every recording method below and verify that nothing is recorded. 368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordCheckinInitiated(kAndroidId); 369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordCheckinDelayedDueToBackoff(kDelay); 370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordCheckinSuccess(); 371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordCheckinFailure(kCheckinStatus, true); 372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyAllActivityQueueEmpty("no checkin"); 373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordConnectionInitiated(kHost); 375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordConnectionDelayedDueToBackoff(kDelay); 376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordConnectionSuccess(); 377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordConnectionFailure(kNetworkError); 378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordConnectionResetSignaled(kReason); 379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyAllActivityQueueEmpty("no registration"); 380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordRegistrationSent(kAppId, kSenderIds); 382cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordRegistrationResponse(kAppId, sender_ids_, 383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kRegistrationStatus); 384cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordRegistrationRetryRequested(kAppId, sender_ids_, kRetries); 385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordUnregistrationSent(kAppId); 386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordUnregistrationResponse(kAppId, kUnregistrationStatus); 387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordUnregistrationRetryDelayed(kAppId, kDelay); 388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyAllActivityQueueEmpty("no unregistration"); 389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 390cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordDataMessageReceived(kAppId, kFrom, kByteSize, true, 391cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GCMStatsRecorder::DATA_MESSAGE); 392cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordDataMessageReceived(kAppId, kFrom, kByteSize, true, 393cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GCMStatsRecorder::DELETED_MESSAGES); 394cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordDataMessageReceived(kAppId, kFrom, kByteSize, false, 395cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GCMStatsRecorder::DATA_MESSAGE); 396cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyAllActivityQueueEmpty("no receiving"); 397cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 3980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec); 399cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordNotifySendStatus(kAppId, kReceiverId, kMessageId, 400cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kMessageSendStatus, kByteSize, kTTL); 401cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordIncomingSendError(kAppId, kReceiverId, kMessageId); 402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec); 403cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) VerifyAllActivityQueueEmpty("no sending"); 4040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 4050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 40646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(GCMStatsRecorderImplTest, ClearLogTest) { 4070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec); 4080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyRecordedSendingCount(1); 4090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyDataSentToWire("1st call"); 4100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 4110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.RecordNotifySendStatus(kAppId, kReceiverId, kMessageId, 4120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch kMessageSendStatus, kByteSize, kTTL); 4130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyRecordedSendingCount(2); 4140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyNotifySendStatus("2nd call"); 4150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 4160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.Clear(); 4170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyRecordedSendingCount(0); 4180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 4190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 42046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(GCMStatsRecorderImplTest, CheckinTest) { 421010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) recorder_.RecordCheckinInitiated(kAndroidId); 422010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyRecordedCheckinCount(1); 423010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyCheckinInitiated("1st call"); 424010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 425010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) recorder_.RecordCheckinDelayedDueToBackoff(kDelay); 426010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyRecordedCheckinCount(2); 427010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyCheckinDelayedDueToBackoff("2nd call"); 428010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 429010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) recorder_.RecordCheckinSuccess(); 430010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyRecordedCheckinCount(3); 431010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyCheckinSuccess("3rd call"); 432010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 433010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) recorder_.RecordCheckinFailure(kCheckinStatus, true); 434010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyRecordedCheckinCount(4); 435010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyCheckinFailure("4th call"); 436010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 437010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 43846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(GCMStatsRecorderImplTest, ConnectionTest) { 4395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordConnectionInitiated(kHost); 4405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedConnectionCount(1); 4415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnectionInitiated("1st call"); 4425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordConnectionDelayedDueToBackoff(kDelay); 4445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedConnectionCount(2); 4455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnectionDelayedDueToBackoff("2nd call"); 4465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordConnectionSuccess(); 4485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedConnectionCount(3); 4495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnectionSuccess("3rd call"); 4505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordConnectionFailure(kNetworkError); 4525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedConnectionCount(4); 4535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnectionFailure("4th call"); 4545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordConnectionResetSignaled(kReason); 4565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedConnectionCount(5); 4575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyConnectionResetSignaled("5th call"); 4585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 4595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 46046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(GCMStatsRecorderImplTest, RegistrationTest) { 4615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordRegistrationSent(kAppId, kSenderIds); 4625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedRegistrationCount(1); 4635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRegistrationSent("1st call"); 4645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordRegistrationResponse(kAppId, sender_ids_, 4665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu kRegistrationStatus); 4675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedRegistrationCount(2); 4685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRegistrationResponse("2nd call"); 4695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordRegistrationRetryRequested(kAppId, sender_ids_, kRetries); 4715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedRegistrationCount(3); 4725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRegistrationRetryRequested("3rd call"); 4735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordUnregistrationSent(kAppId); 4755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedRegistrationCount(4); 4765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyUnregistrationSent("4th call"); 4775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordUnregistrationResponse(kAppId, kUnregistrationStatus); 4795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedRegistrationCount(5); 4805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyUnregistrationResponse("5th call"); 4815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 4825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu recorder_.RecordUnregistrationRetryDelayed(kAppId, kDelay); 4835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedRegistrationCount(6); 4845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyUnregistrationRetryDelayed("6th call"); 4855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 4865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 48746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(GCMStatsRecorderImplTest, RecordReceivingTest) { 488010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) recorder_.RecordDataMessageReceived(kAppId, kFrom, kByteSize, true, 4895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GCMStatsRecorder::DATA_MESSAGE); 4905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedReceivingCount(1); 491010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyDataMessageReceived("1st call"); 4925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 493010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) recorder_.RecordDataMessageReceived(kAppId, kFrom, kByteSize, true, 4945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GCMStatsRecorder::DELETED_MESSAGES); 4955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedReceivingCount(2); 4965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyDataDeletedMessage("2nd call"); 4975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 498010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) recorder_.RecordDataMessageReceived(kAppId, kFrom, kByteSize, false, 4995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GCMStatsRecorder::DATA_MESSAGE); 5005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu VerifyRecordedReceivingCount(3); 501010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) VerifyDataMessageReceivedNotRegistered("3rd call"); 5025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 5035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 50446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(GCMStatsRecorderImplTest, RecordSendingTest) { 5050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec); 5060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyRecordedSendingCount(1); 5070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyDataSentToWire("1st call"); 5080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.RecordNotifySendStatus(kAppId, kReceiverId, kMessageId, 5100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch kMessageSendStatus, kByteSize, kTTL); 5110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyRecordedSendingCount(2); 5120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyNotifySendStatus("2nd call"); 5130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.RecordIncomingSendError(kAppId, kReceiverId, kMessageId); 5150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyRecordedSendingCount(3); 5160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyIncomingSendError("3rd call"); 5170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch recorder_.RecordDataSentToWire(kAppId, kReceiverId, kMessageId, kQueuedSec); 5190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyRecordedSendingCount(4); 5200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch VerifyDataSentToWire("4th call"); 5210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 5220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 5230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace gcm 524