15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A test application for the FinancialPing class.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These tests should not be executed on the build server:
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - They modify machine state (registry).
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These tests require write access to HKCU and HKLM.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The "GGLA" brand is used to test the normal code flow of the code, and the
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "TEST" brand is used to test the supplementary brand code code flow.  In one
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// case below, the brand "GOOG" is used because the code wants to use a brand
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that is neither of the two mentioned above.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/lib/financial_ping.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h"
22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/lib/lib_values.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/lib/machine_id.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/lib/rlz_lib.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/lib/rlz_value_store.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/test/rlz_test_helpers.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/win/lib/machine_deal.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Must match the implementation in file_time.cc.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int64 GetSystemTimeAsInt64() {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FILETIME now_as_file_time;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetSystemTimeAsFileTime(&now_as_file_time);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LARGE_INTEGER integer;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  integer.HighPart = now_as_file_time.dwHighDateTime;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  integer.LowPart = now_as_file_time.dwLowDateTime;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return integer.QuadPart;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  double now_seconds = base::Time::Now().ToDoubleT();
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<int64>(now_seconds * 1000 * 1000 * 10);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ping times in 100-nanosecond intervals.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int64 k1MinuteInterval = 60LL * 10000000LL;  // 1 minute
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace anonymous
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FinancialPingTest : public RlzLibTestBase {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FinancialPingTest, FormRequest) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string brand_string = rlz_lib::SupplementaryBranding::GetBrand();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* brand = brand_string.empty() ? "GGLA" : brand_string.c_str();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value"));
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DCC_PARAM "&dcc=dcc_value"
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DCC_PARAM ""
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "TbRlzValue"));
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL));
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rlz_lib::AccessPoint points[] =
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     rlz_lib::NO_ACCESS_POINT};
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string machine_id;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool got_machine_id = rlz_lib::GetMachineId(&machine_id);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string request;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::FormRequest(rlz_lib::TOOLBAR_NOTIFIER,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      points, "swg", brand, NULL, "en", false, &request));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string expected_response;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringAppendF(&expected_response,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "/tools/pso/ping?as=swg&brand=%s&hl=en&"
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "events=I7S,W1I&rep=2&rlz=T4:TbRlzValue" DCC_PARAM
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles), brand);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (got_machine_id)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::StringAppendF(&expected_response, "&id=%s", machine_id.c_str());
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_response, request);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, ""));
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::FormRequest(rlz_lib::TOOLBAR_NOTIFIER,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      points, "swg", brand, "IdOk2", NULL, false, &request));
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_response.clear();
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringAppendF(&expected_response,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "/tools/pso/ping?as=swg&brand=%s&pid=IdOk2&"
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "events=I7S,W1I&rep=2&rlz=T4:" DCC_PARAM, brand);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (got_machine_id)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::StringAppendF(&expected_response, "&id=%s", machine_id.c_str());
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_response, request);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::FormRequest(rlz_lib::TOOLBAR_NOTIFIER,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      points, "swg", brand, "IdOk", NULL, true, &request));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_response.clear();
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringAppendF(&expected_response,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "/tools/pso/ping?as=swg&brand=%s&pid=IdOk&"
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "events=I7S,W1I&rep=2&rlz=T4:" DCC_PARAM, brand);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_response, request);
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::FormRequest(rlz_lib::TOOLBAR_NOTIFIER,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      points, "swg", brand, NULL, NULL, true, &request));
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_response.clear();
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringAppendF(&expected_response,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "/tools/pso/ping?as=swg&brand=%s&events=I7S,W1I&rep=2"
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "&rlz=T4:" DCC_PARAM, brand);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_response, request);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clear all events.
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clear all RLZs.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char rlz[rlz_lib::kMaxRlzLength + 1];
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int ap = rlz_lib::NO_ACCESS_POINT + 1;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       ap < rlz_lib::LAST_ACCESS_POINT; ap++) {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rlz[0] = 0;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rlz_lib::AccessPoint point = static_cast<rlz_lib::AccessPoint>(ap);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (rlz_lib::GetAccessPointRlz(point, rlz, arraysize(rlz)) && rlz[0]) {
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rlz_lib::SetAccessPointRlz(point, "");
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX,
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "TbRlzValue"));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::QUICK_SEARCH_BOX,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "QsbRlzValue"));
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::FormRequest(rlz_lib::TOOLBAR_NOTIFIER,
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      points, "swg", brand, NULL, NULL, false, &request));
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_response.clear();
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::StringAppendF(&expected_response,
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "/tools/pso/ping?as=swg&brand=%s&rep=2&rlz=T4:TbRlzValue,"
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "Q1:QsbRlzValue" DCC_PARAM, brand);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_STREQ(expected_response.c_str(), request.c_str());
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!GetAccessPointRlz(rlz_lib::IE_HOME_PAGE, rlz, arraysize(rlz))) {
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    points[2] = rlz_lib::IE_HOME_PAGE;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(rlz_lib::FinancialPing::FormRequest(rlz_lib::TOOLBAR_NOTIFIER,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        points, "swg", brand, "MyId", "en-US", true, &request));
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_response.clear();
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::StringAppendF(&expected_response,
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "/tools/pso/ping?as=swg&brand=%s&hl=en-US&pid=MyId&rep=2"
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "&rlz=T4:TbRlzValue,Q1:QsbRlzValue" DCC_PARAM, brand);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_STREQ(expected_response.c_str(), request.c_str());
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FinancialPingTest, FormRequestBadBrand) {
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rlz_lib::AccessPoint points[] =
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT,
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     rlz_lib::NO_ACCESS_POINT};
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string request;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ok = rlz_lib::FinancialPing::FormRequest(rlz_lib::TOOLBAR_NOTIFIER,
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      points, "swg", "GOOG", NULL, "en", false, &request);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(rlz_lib::SupplementaryBranding::GetBrand().empty(), ok);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void SetLastPingTime(int64 time, rlz_lib::Product product) {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rlz_lib::ScopedRlzValueStoreLock lock;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  rlz_lib::RlzValueStore* store = lock.GetStore();
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(store);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(store->HasAccess(rlz_lib::RlzValueStore::kWriteAccess));
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  store->WritePingTime(product, time);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FinancialPingTest, IsPingTime) {
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 now = GetSystemTimeAsInt64();
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 last_ping = now - rlz_lib::kEventsPingInterval - k1MinuteInterval;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPingTime(last_ping, rlz_lib::TOOLBAR_NOTIFIER);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No events, last ping just over a day ago.
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER));
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  false));
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Has events, last ping just over a day ago.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE));
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 false));
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Has events, last ping just under a day ago.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_ping = now - rlz_lib::kEventsPingInterval + k1MinuteInterval;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPingTime(last_ping, rlz_lib::TOOLBAR_NOTIFIER);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  false));
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER));
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No events, last ping just under a week ago.
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_ping = now - rlz_lib::kNoEventsPingInterval + k1MinuteInterval;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPingTime(last_ping, rlz_lib::TOOLBAR_NOTIFIER);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  false));
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No events, last ping just over a week ago.
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_ping = now - rlz_lib::kNoEventsPingInterval - k1MinuteInterval;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPingTime(last_ping, rlz_lib::TOOLBAR_NOTIFIER);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 false));
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Last ping was in future (invalid).
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_ping = now + k1MinuteInterval;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPingTime(last_ping, rlz_lib::TOOLBAR_NOTIFIER);
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 false));
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER,
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE));
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 false));
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FinancialPingTest, BrandingIsPingTime) {
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Don't run these tests if a supplementary brand is already in place.  That
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // way we can control the branding.
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!rlz_lib::SupplementaryBranding::GetBrand().empty())
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 now = GetSystemTimeAsInt64();
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 last_ping = now - rlz_lib::kEventsPingInterval - k1MinuteInterval;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPingTime(last_ping, rlz_lib::TOOLBAR_NOTIFIER);
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Has events, last ping just over a day ago.
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER,
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE));
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 false));
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rlz_lib::SupplementaryBranding branding("TEST");
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetLastPingTime(last_ping, rlz_lib::TOOLBAR_NOTIFIER);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Has events, last ping just over a day ago.
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER,
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE));
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   false));
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  last_ping = now - k1MinuteInterval;
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPingTime(last_ping, rlz_lib::TOOLBAR_NOTIFIER);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  false));
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rlz_lib::SupplementaryBranding branding("TEST");
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_TRUE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   false));
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(FinancialPingTest, ClearLastPingTime) {
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 now = GetSystemTimeAsInt64();
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 last_ping = now - rlz_lib::kEventsPingInterval + k1MinuteInterval;
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLastPingTime(last_ping, rlz_lib::TOOLBAR_NOTIFIER);
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Has events, last ping just under a day ago.
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER));
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER,
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE));
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  false));
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::ClearLastPingTime(
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rlz_lib::TOOLBAR_NOTIFIER));
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(rlz_lib::FinancialPing::IsPingTime(rlz_lib::TOOLBAR_NOTIFIER,
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 false));
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
294