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 RLZ library. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These tests should not be executed on the build server: 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - They assert for the failed cases. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - They modify machine state (registry). 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These tests require write access to HKLM and HKCU. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The "GGLA" brand is used to test the normal code flow of the code, and the 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// "TEST" brand is used to test the supplementary brand code code flow. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/posix/eintr_wrapper.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "rlz/lib/financial_ping.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/lib/rlz_lib.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/lib/rlz_value_store.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/test/rlz_test_helpers.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <Windows.h> 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/win/lib/machine_deal.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(RLZ_NETWORK_IMPLEMENTATION_CHROME_NET) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/mac/scoped_nsautorelease_pool.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_test_util.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MachineDealCodeHelper 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public rlz_lib::MachineDealCode 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool Clear() { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rlz_lib::MachineDealCode::Clear(); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper() {} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~MachineDealCodeHelper() {} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RlzLibTest : public RlzLibTestBase { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, RecordProductEvent) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi_50[50]; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S", cgi_50); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S,W1I", cgi_50); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S,W1I", cgi_50); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ClearProductEvent) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi_50[50]; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear 1 of 1 events. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S", cgi_50); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", cgi_50); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear 1 of 2 events. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S,W1I", cgi_50); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=W1I", cgi_50); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear a non-recorded event. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IETB_SEARCH_BOX, rlz_lib::FIRST_SEARCH)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=W1I", cgi_50); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, GetProductEventsAsCgi) { 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi_50[50]; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi_1[1]; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_1, 1)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S,W1I", cgi_50); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ClearAllAllProductEvents) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi_50[50]; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S", cgi_50); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", cgi_50); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, SetAccessPointRlz) { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char rlz_50[50]; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "")); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", rlz_50); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "IeTbRlz")); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("IeTbRlz", rlz_50); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, GetAccessPointRlz) { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char rlz_1[1]; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char rlz_50[50]; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "")); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_1, 1)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", rlz_1); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "IeTbRlz")); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_1, 1)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("IeTbRlz", rlz_50); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, GetPingParams) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper::Clear(); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "TbRlzValue")); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IE_HOME_PAGE, "")); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi[2048]; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::AccessPoint points[] = 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::NO_ACCESS_POINT}; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 2048)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("rep=2&rlz=T4:TbRlzValue", cgi); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value")); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DCC_PARAM "&dcc=dcc_value" 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define DCC_PARAM "" 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "")); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 2048)); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("rep=2&rlz=T4:" DCC_PARAM, cgi); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "TbRlzValue")); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 23 + strlen(DCC_PARAM))); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", cgi); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 24 + strlen(DCC_PARAM))); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("rep=2&rlz=T4:TbRlzValue" DCC_PARAM, cgi); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetAccessPointRlz(rlz_lib::IE_HOME_PAGE, cgi, 2048)); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) points[2] = rlz_lib::IE_HOME_PAGE; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 2048)); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("rep=2&rlz=T4:TbRlzValue" DCC_PARAM, cgi); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, IsPingResponseValid) { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kBadPingResponses[] = { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No checksum. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "version: 3.0.914.7250\r\n" 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-action: custom-action\r\n" 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-target: SearchWithGoogleUpdate.exe\r\n" 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz: 1R1_____en__252\r\n" 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzXX: 1R1_____en__250\r\n", 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invalid checksum. 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "version: 3.0.914.7250\r\n" 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-action: custom-action\r\n" 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-target: SearchWithGoogleUpdate.exe\r\n" 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz: 1R1_____en__252\r\n" 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzXX: 1R1_____en__250\r\n" 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4 1T4_____en__251\r\n" 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4: 1T4_____en__252\r\n" 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz\r\n" 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: B12CC79A", 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Misplaced checksum. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "version: 3.0.914.7250\r\n" 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-action: custom-action\r\n" 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-target: SearchWithGoogleUpdate.exe\r\n" 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz: 1R1_____en__252\r\n" 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzXX: 1R1_____en__250\r\n" 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: B12CC79C\r\n" 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4 1T4_____en__251\r\n" 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4: 1T4_____en__252\r\n" 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz\r\n", 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kGoodPingResponses[] = { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "version: 3.0.914.7250\r\n" 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-action: custom-action\r\n" 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-target: SearchWithGoogleUpdate.exe\r\n" 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz: 1R1_____en__252\r\n" 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzXX: 1R1_____en__250\r\n" 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4 1T4_____en__251\r\n" 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4: 1T4_____en__252\r\n" 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz\r\n" 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: D6FD55A3", 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "version: 3.0.914.7250\r\n" 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-action: custom-action\r\n" 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-target: SearchWithGoogleUpdate.exe\r\n" 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz: 1R1_____en__252\r\n" 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzXX: 1R1_____en__250\r\n" 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4 1T4_____en__251\r\n" 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4: 1T4_____en__252\r\n" 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz\r\n" 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: D6FD55A3\r\n" 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "extradata: not checksummed", 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; kBadPingResponses[i]; i++) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::IsPingResponseValid(kBadPingResponses[i], NULL)); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; kGoodPingResponses[i]; i++) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::IsPingResponseValid(kGoodPingResponses[i], NULL)); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ParsePingResponse) { 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kPingResponse = 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "version: 3.0.914.7250\r\n" 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-action: custom-action\r\n" 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-target: SearchWithGoogleUpdate.exe\r\n" 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz: 1R1_____en__252\r\n" // Invalid RLZ - no access point. 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzXX: 1R1_____en__250\r\n" // Invalid RLZ - bad access point. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4 1T4_____en__251\r\n" // Invalid RLZ - missing colon. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4: 1T4_____en__252\r\n" // GoodRLZ. 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "events: I7S,W1I\r\n" // Clear all events. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz\r\n" 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dcc: dcc_value\r\n" 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: F9070F81"; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value2")); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record some product events to check that they get cleared. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz( 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IETB_SEARCH_BOX, "TbRlzValue")); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPingResponse)); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value")); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPingResponse)); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char value[50]; 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, value, 50)); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("1T4_____en__252", value); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 50)); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", value); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kPingResponse2 = 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4: 1T4_____de__253 \r\n" // Good with extra spaces. 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 321334F5\r\n"; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPingResponse2)); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, value, 50)); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("1T4_____de__253", value); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kPingResponse3 = 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 0\r\n"; // Good RLZ - empty response. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPingResponse3)); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("1T4_____de__253", value); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test whether a stateful event will only be sent in financial pings once. 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ParsePingResponseWithStatefulEvents) { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kPingResponse = 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "version: 3.0.914.7250\r\n" 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-action: custom-action\r\n" 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-target: SearchWithGoogleUpdate.exe\r\n" 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4: 1T4_____en__252\r\n" // GoodRLZ. 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "events: I7S,W1I\r\n" // Clear all events. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "stateful-events: W1I\r\n" // W1I as an stateful event. 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz\r\n" 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dcc: dcc_value\r\n" 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 55191759"; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record some product events to check that they get cleared. 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz( 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IETB_SEARCH_BOX, "TbRlzValue")); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPingResponse)); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check all the events sent earlier are cleared. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char value[50]; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 50)); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", value); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record both events (one is stateless and the other is stateful) again. 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the stateful event won't be sent again while the stateless one will. 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 50)); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S", value); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that stateful events are cleared by ClearAllProductEvents(). After 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // calling it, trying to record a stateful again should result in it being 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // recorded again. 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 50)); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=W1I", value); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class URLRequestRAII { 4218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) public: 4228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) URLRequestRAII(net::URLRequestContextGetter* context) { 4238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) rlz_lib::SetURLRequestContext(context); 4248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ~URLRequestRAII() { 4268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) rlz_lib::SetURLRequestContext(NULL); 4278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}; 4298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, SendFinancialPing) { 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't really check a value or result in this test. All this does is 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // attempt to ping the financial server, which you can verify in Fiddler. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO: Make this a measurable test. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(RLZ_NETWORK_IMPLEMENTATION_CHROME_NET) 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::mac::ScopedNSAutoreleasePool pool; 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Thread::Options options; 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) options.message_loop_type = base::MessageLoop::TYPE_IO; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Thread io_thread("rlz_unittest_io_thread"); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(io_thread.StartWithOptions(options)); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<net::TestURLRequestContextGetter> context = 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new net::TestURLRequestContextGetter( 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) io_thread.message_loop()->message_loop_proxy()); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SetURLRequestContext(context.get()); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLRequestRAII set_context(context.get()); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper::Clear(); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value")); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "TbRlzValue")); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::AccessPoint points[] = 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::NO_ACCESS_POINT}; 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string request; 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SendFinancialPing(rlz_lib::TOOLBAR_NOTIFIER, points, 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "swg", "GGLA", "SwgProductId1234", "en-UK", false, 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /*skip_time_check=*/true); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(RLZ_NETWORK_IMPLEMENTATION_CHROME_NET) 4798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void ResetContext() { 4818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) rlz_lib::SetURLRequestContext(NULL); 4828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 4838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)TEST_F(RlzLibTest, SendFinancialPingDuringShutdown) { 4858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // rlz_lib::SendFinancialPing fails when this is set. 4868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) 4878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return; 4888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#if defined(OS_MACOSX) 4908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::mac::ScopedNSAutoreleasePool pool; 4918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 4928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4938bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::Thread::Options options; 4948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) options.message_loop_type = base::MessageLoop::TYPE_IO; 4958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::Thread io_thread("rlz_unittest_io_thread"); 4978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_TRUE(io_thread.StartWithOptions(options)); 4988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) scoped_refptr<net::TestURLRequestContextGetter> context = 5008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) new net::TestURLRequestContextGetter( 5018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) io_thread.message_loop()->message_loop_proxy()); 5028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) rlz_lib::SetURLRequestContext(context.get()); 5038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) URLRequestRAII set_context(context.get()); 5058bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) rlz_lib::AccessPoint points[] = 5078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) {rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT, 5088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) rlz_lib::NO_ACCESS_POINT}; 5098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) rlz_lib::test::ResetSendFinancialPingInterrupted(); 5108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_FALSE(rlz_lib::test::WasSendFinancialPingInterrupted()); 5118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::MessageLoop loop; 5138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) loop.PostTask(FROM_HERE, base::Bind(&ResetContext)); 5148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::string request; 5158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_FALSE(rlz_lib::SendFinancialPing(rlz_lib::TOOLBAR_NOTIFIER, points, 5168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) "swg", "GGLA", "SwgProductId1234", "en-UK", false, 5178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) /*skip_time_check=*/true)); 5188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(rlz_lib::test::WasSendFinancialPingInterrupted()); 5208bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) rlz_lib::test::ResetSendFinancialPingInterrupted(); 5218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 5228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#endif 5238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ClearProductState) { 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper::Clear(); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "TbRlzValue")); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::GD_DESKBAND, 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "GdbRlzValue")); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::AccessPoint points[] = 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT }; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IETB_SEARCH_BOX, rlz_lib::INSTALL)); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::AccessPoint points2[] = 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { rlz_lib::IETB_SEARCH_BOX, 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::GD_DESKBAND, 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::NO_ACCESS_POINT }; 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi[2048]; 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points2, 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 2048)); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("rep=2&rlz=T4:TbRlzValue,D1:GdbRlzValue", cgi); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 2048)); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string events(cgi); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(0u, events.find("I7S")); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(0u, events.find("T4I")); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_LT(0u, events.find("T4R")); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::ClearProductState(rlz_lib::TOOLBAR_NOTIFIER, points); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 2048)); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", cgi); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::GD_DESKBAND, 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 2048)); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("GdbRlzValue", cgi); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi, 2048)); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", cgi); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<class T> 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class typed_buffer_ptr { 574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<char[]> buffer_; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typed_buffer_ptr() { 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit typed_buffer_ptr(size_t size) : buffer_(new char[size]) { 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void reset(size_t size) { 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer_.reset(new char[size]); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) operator T*() { 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<T*>(buffer_.get()); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace rlz_lib { 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HasAccess(PSID sid, ACCESS_MASK access_mask, ACL* dacl); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool EmptyAcl(ACL* acl) { 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ACL_SIZE_INFORMATION info; 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ret = GetAclInformation(acl, &info, sizeof(info), AclSizeInformation); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ret); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (DWORD i = 0; i < info.AceCount && ret; ++i) { 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ret = DeleteAce(acl, 0); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(ret); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ret; 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, HasAccess) { 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a SID that represents ALL USERS. 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD users_sid_size = SECURITY_MAX_SID_SIZE; 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typed_buffer_ptr<SID> users_sid(users_sid_size); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateWellKnownSid(WinBuiltinUsersSid, NULL, users_sid, &users_sid_size); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RLZ always asks for KEY_ALL_ACCESS access to the key. This is what we 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // test here. 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No ACL mean no access. 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, NULL)); 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create an ACL for these tests. 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DWORD kMaxAclSize = 1024; 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typed_buffer_ptr<ACL> dacl(kMaxAclSize); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitializeAcl(dacl, kMaxAclSize, ACL_REVISION); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Empty DACL mean no access. 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ACE without all needed privileges should mean no access. 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_READ, users_sid)); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ACE without all needed privileges should mean no access. 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(EmptyAcl(dacl)); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_WRITE, users_sid)); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A deny ACE before an allow ACE should not give access. 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(EmptyAcl(dacl)); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessDeniedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) users_sid)); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) users_sid)); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A deny ACE before an allow ACE should not give access. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(EmptyAcl(dacl)); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessDeniedAce(dacl, ACL_REVISION, KEY_READ, users_sid)); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) users_sid)); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An allow ACE without all required bits should not give access. 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(EmptyAcl(dacl)); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_WRITE, users_sid)); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An allow ACE with all required bits should give access. 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(EmptyAcl(dacl)); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) users_sid)); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A deny ACE after an allow ACE should not give access. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(EmptyAcl(dacl)); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) users_sid)); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessDeniedAce(dacl, ACL_REVISION, KEY_READ, users_sid)); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An inherit-only allow ACE should not give access. 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(EmptyAcl(dacl)); 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessAllowedAceEx(dacl, ACL_REVISION, INHERIT_ONLY_ACE, 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_ALL_ACCESS, users_sid)); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // An inherit-only deny ACE should not apply. 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(EmptyAcl(dacl)); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessDeniedAceEx(dacl, ACL_REVISION, INHERIT_ONLY_ACE, 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KEY_ALL_ACCESS, users_sid)); 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) users_sid)); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, BrandingRecordProductEvent) { 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't run these tests if a supplementary brand is already in place. That 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // way we can control the branding. 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi_50[50]; 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record different events for the same product with diffrent branding, and 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // make sure that the information remains separate. 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that recording events with the default brand and a supplementary 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // brand don't overwrite each other. 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S", cgi_50); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::INSTALL)); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7I", cgi_50); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50, 50)); 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S", cgi_50); 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, BrandingSetAccessPointRlz) { 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't run these tests if a supplementary brand is already in place. That 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // way we can control the branding. 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char rlz_50[50]; 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test that setting RLZ strings with the default brand and a supplementary 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // brand don't overwrite each other. 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "IeTbRlz")); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("IeTbRlz", rlz_50); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "SuppRlz")); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 50)); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("SuppRlz", rlz_50); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("IeTbRlz", rlz_50); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, BrandingWithStatefulEvents) { 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't run these tests if a supplementary brand is already in place. That 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // way we can control the branding. 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kPingResponse = 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "version: 3.0.914.7250\r\n" 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-action: custom-action\r\n" 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "launch-target: SearchWithGoogleUpdate.exe\r\n" 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlzT4: 1T4_____en__252\r\n" // GoodRLZ. 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "events: I7S,W1I\r\n" // Clear all events. 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "stateful-events: W1I\r\n" // W1I as an stateful event. 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "rlz\r\n" 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dcc: dcc_value\r\n" 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 55191759"; 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record some product events for the default and supplementary brand. 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that they get cleared only for the default brand. 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPingResponse)); 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check all the events sent earlier are cleared only for default brand. 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char value[50]; 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 50)); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", value); 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 50)); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S,W1I", value); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Record both events (one is stateless and the other is stateful) again. 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check the stateful event won't be sent again while the stateless one will. 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 50)); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S", value); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kPingResponse)); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 50)); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", value); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) value, 50)); 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("events=I7S", value); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_POSIX) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ReadonlyRlzDirectoryTest : public RlzLibTestNoMachineState { 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE; 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ReadonlyRlzDirectoryTest::SetUp() { 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RlzLibTestNoMachineState::SetUp(); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make the rlz directory non-writeable. 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int chmod_result = chmod(temp_dir_.path().value().c_str(), 0500); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, chmod_result); 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ReadonlyRlzDirectoryTest, WriteFails) { 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The rlz test runner runs every test twice: Once normally, and once with 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a SupplementaryBranding on the stack. In the latter case, the rlz lock 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // has already been acquired before the rlz directory got changed to 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // read-only, which makes this test pointless. So run it only in the first 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pass. 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Regression test for http://crbug.com/121255 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ReadonlyRlzDirectoryTest, SupplementaryBrandingDoesNotCrash) { 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See the comment at the top of WriteFails. 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::INSTALL)); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Regression test for http://crbug.com/141108 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(RlzLibTest, ConcurrentStoreAccessWithProcessExitsWhileLockHeld) { 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See the comment at the top of WriteFails. 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<pid_t> pids; 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 10; ++i) { 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pid_t pid = fork(); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(-1, pid); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pid == 0) { 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Child. 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SupplementaryBranding is a RAII object for the rlz lock. 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a crash while holding the lock in some of the children. 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i > 0 && i % 3 == 0) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _exit(0); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: Since this is in a forked child, a failing expectation won't 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // make the test fail. It does however cause lots of "check failed" 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // error output. The parent process will then check the exit code 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // below to make the test fail. 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success = rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::INSTALL); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(success); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _exit(success ? 0 : 1); 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _exit(0); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parent. 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pids.push_back(pid); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int status; 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < pids.size(); ++i) { 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (HANDLE_EINTR(waitpid(pids[i], &status, 0)) != -1) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(WIFEXITED(status) && WEXITSTATUS(status) == 0); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No child should have the lock at this point, not even the crashed ones. 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::INSTALL)); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(RlzLibTest, LockAcquistionSucceedsButStoreFileCannotBeCreated) { 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See the comment at the top of WriteFails. 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a directory where the rlz file is supposed to appear. This way, 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the lock file can be created successfully, but creation of the rlz file 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // itself will fail. 9302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int mkdir_result = mkdir(rlz_lib::testing::RlzStoreFilenameStr().c_str(), 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0500); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0, mkdir_result); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::SupplementaryBranding branding("TEST"); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::INSTALL)); 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 940