diff options
author | zysxqn@google.com <zysxqn@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-26 00:28:46 +0000 |
---|---|---|
committer | zysxqn@google.com <zysxqn@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-26 00:28:46 +0000 |
commit | 5eff57ede25d7fe51c3bb964aaba2745e3fb1896 (patch) | |
tree | f8cb338f8e22ce99a77903d4214dfda581857e38 /rlz/lib/rlz_lib_test.cc | |
parent | 2be6abf3a4fb590a1b59586858d1e49ea61f0708 (diff) | |
download | chromium_src-5eff57ede25d7fe51c3bb964aaba2745e3fb1896.zip chromium_src-5eff57ede25d7fe51c3bb964aaba2745e3fb1896.tar.gz chromium_src-5eff57ede25d7fe51c3bb964aaba2745e3fb1896.tar.bz2 |
Add a regenerate button to regenerate the password in Windows.
BUG=120480
TEST=Not tested.
Review URL: https://chromiumcodereview.appspot.com/10642009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@144071 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'rlz/lib/rlz_lib_test.cc')
-rw-r--r-- | rlz/lib/rlz_lib_test.cc | 824 |
1 files changed, 0 insertions, 824 deletions
diff --git a/rlz/lib/rlz_lib_test.cc b/rlz/lib/rlz_lib_test.cc deleted file mode 100644 index 0f8cb4c..0000000 --- a/rlz/lib/rlz_lib_test.cc +++ /dev/null @@ -1,824 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// A test application for the RLZ library. -// -// These tests should not be executed on the build server: -// - They assert for the failed cases. -// - They modify machine state (registry). -// -// These tests require write access to HKLM and HKCU. -// -// The "GGLA" brand is used to test the normal code flow of the code, and the -// "TEST" brand is used to test the supplementary brand code code flow. - -#include "base/logging.h" -#include "base/memory/scoped_ptr.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -#include "rlz/lib/rlz_lib.h" -#include "rlz/test/rlz_test_helpers.h" - -#if defined(OS_WIN) -#include <Windows.h> -#include "rlz/win/lib/machine_deal.h" -#endif - -#if defined(RLZ_NETWORK_IMPLEMENTATION_CHROME_NET) -#include "base/mac/scoped_nsautorelease_pool.h" -#include "base/threading/thread.h" -#include "net/url_request/url_request_test_util.h" -#endif - - -class MachineDealCodeHelper -#if defined(OS_WIN) - : public rlz_lib::MachineDealCode -#endif - { - public: - static bool Clear() { -#if defined(OS_WIN) - return rlz_lib::MachineDealCode::Clear(); -#else - return true; -#endif - } - - private: - MachineDealCodeHelper() {} - ~MachineDealCodeHelper() {} -}; - -class RlzLibTest : public RlzLibTestBase { -}; - -TEST_F(RlzLibTest, RecordProductEvent) { - char cgi_50[50]; - - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7S", cgi_50); - - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7S,W1I", cgi_50); - - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7S,W1I", cgi_50); -} - -TEST_F(RlzLibTest, ClearProductEvent) { - char cgi_50[50]; - - // Clear 1 of 1 events. - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7S", cgi_50); - EXPECT_TRUE(rlz_lib::ClearProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("", cgi_50); - - // Clear 1 of 2 events. - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7S,W1I", cgi_50); - EXPECT_TRUE(rlz_lib::ClearProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=W1I", cgi_50); - - // Clear a non-recorded event. - EXPECT_TRUE(rlz_lib::ClearProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IETB_SEARCH_BOX, rlz_lib::FIRST_SEARCH)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=W1I", cgi_50); -} - - -TEST_F(RlzLibTest, GetProductEventsAsCgi) { - char cgi_50[50]; - char cgi_1[1]; - - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - - EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_1, 1)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7S,W1I", cgi_50); -} - -TEST_F(RlzLibTest, ClearAllAllProductEvents) { - char cgi_50[50]; - - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7S", cgi_50); - - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("", cgi_50); -} - -TEST_F(RlzLibTest, SetAccessPointRlz) { - char rlz_50[50]; - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "")); - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); - EXPECT_STREQ("", rlz_50); - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "IeTbRlz")); - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); - EXPECT_STREQ("IeTbRlz", rlz_50); -} - -TEST_F(RlzLibTest, GetAccessPointRlz) { - char rlz_1[1]; - char rlz_50[50]; - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "")); - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_1, 1)); - EXPECT_STREQ("", rlz_1); - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "IeTbRlz")); - EXPECT_FALSE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_1, 1)); - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); - EXPECT_STREQ("IeTbRlz", rlz_50); -} - -TEST_F(RlzLibTest, GetPingParams) { - MachineDealCodeHelper::Clear(); - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, - "TbRlzValue")); - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IE_HOME_PAGE, "")); - - char cgi[2048]; - rlz_lib::AccessPoint points[] = - {rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT, - rlz_lib::NO_ACCESS_POINT}; - - EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, - cgi, 2048)); - EXPECT_STREQ("rep=2&rlz=T4:TbRlzValue", cgi); - -#if defined(OS_WIN) - EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value")); -#define DCC_PARAM "&dcc=dcc_value" -#else -#define DCC_PARAM "" -#endif - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "")); - EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, - cgi, 2048)); - EXPECT_STREQ("rep=2&rlz=T4:" DCC_PARAM, cgi); - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, - "TbRlzValue")); - EXPECT_FALSE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, - cgi, 23 + strlen(DCC_PARAM))); - EXPECT_STREQ("", cgi); - EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, - cgi, 24 + strlen(DCC_PARAM))); - EXPECT_STREQ("rep=2&rlz=T4:TbRlzValue" DCC_PARAM, cgi); - - EXPECT_TRUE(GetAccessPointRlz(rlz_lib::IE_HOME_PAGE, cgi, 2048)); - points[2] = rlz_lib::IE_HOME_PAGE; - EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points, - cgi, 2048)); - EXPECT_STREQ("rep=2&rlz=T4:TbRlzValue" DCC_PARAM, cgi); -} - -TEST_F(RlzLibTest, IsPingResponseValid) { - const char* kBadPingResponses[] = { - // No checksum. - "version: 3.0.914.7250\r\n" - "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" - "launch-action: custom-action\r\n" - "launch-target: SearchWithGoogleUpdate.exe\r\n" - "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" - "rlz: 1R1_____en__252\r\n" - "rlzXX: 1R1_____en__250\r\n", - - // Invalid checksum. - "version: 3.0.914.7250\r\n" - "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" - "launch-action: custom-action\r\n" - "launch-target: SearchWithGoogleUpdate.exe\r\n" - "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" - "rlz: 1R1_____en__252\r\n" - "rlzXX: 1R1_____en__250\r\n" - "rlzT4 1T4_____en__251\r\n" - "rlzT4: 1T4_____en__252\r\n" - "rlz\r\n" - "crc32: B12CC79A", - - // Misplaced checksum. - "version: 3.0.914.7250\r\n" - "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" - "launch-action: custom-action\r\n" - "launch-target: SearchWithGoogleUpdate.exe\r\n" - "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" - "rlz: 1R1_____en__252\r\n" - "rlzXX: 1R1_____en__250\r\n" - "crc32: B12CC79C\r\n" - "rlzT4 1T4_____en__251\r\n" - "rlzT4: 1T4_____en__252\r\n" - "rlz\r\n", - - NULL - }; - - const char* kGoodPingResponses[] = { - "version: 3.0.914.7250\r\n" - "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" - "launch-action: custom-action\r\n" - "launch-target: SearchWithGoogleUpdate.exe\r\n" - "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" - "rlz: 1R1_____en__252\r\n" - "rlzXX: 1R1_____en__250\r\n" - "rlzT4 1T4_____en__251\r\n" - "rlzT4: 1T4_____en__252\r\n" - "rlz\r\n" - "crc32: D6FD55A3", - - "version: 3.0.914.7250\r\n" - "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" - "launch-action: custom-action\r\n" - "launch-target: SearchWithGoogleUpdate.exe\r\n" - "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" - "rlz: 1R1_____en__252\r\n" - "rlzXX: 1R1_____en__250\r\n" - "rlzT4 1T4_____en__251\r\n" - "rlzT4: 1T4_____en__252\r\n" - "rlz\r\n" - "crc32: D6FD55A3\r\n" - "extradata: not checksummed", - - NULL - }; - - for (int i = 0; kBadPingResponses[i]; i++) - EXPECT_FALSE(rlz_lib::IsPingResponseValid(kBadPingResponses[i], NULL)); - - for (int i = 0; kGoodPingResponses[i]; i++) - EXPECT_TRUE(rlz_lib::IsPingResponseValid(kGoodPingResponses[i], NULL)); -} - -TEST_F(RlzLibTest, ParsePingResponse) { - const char* kPingResponse = - "version: 3.0.914.7250\r\n" - "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" - "launch-action: custom-action\r\n" - "launch-target: SearchWithGoogleUpdate.exe\r\n" - "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" - "rlz: 1R1_____en__252\r\n" // Invalid RLZ - no access point. - "rlzXX: 1R1_____en__250\r\n" // Invalid RLZ - bad access point. - "rlzT4 1T4_____en__251\r\n" // Invalid RLZ - missing colon. - "rlzT4: 1T4_____en__252\r\n" // GoodRLZ. - "events: I7S,W1I\r\n" // Clear all events. - "rlz\r\n" - "dcc: dcc_value\r\n" - "crc32: F9070F81"; - -#if defined(OS_WIN) - EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value2")); -#endif - - // Record some product events to check that they get cleared. - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz( - rlz_lib::IETB_SEARCH_BOX, "TbRlzValue")); - - EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, - kPingResponse)); - -#if defined(OS_WIN) - EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value")); -#endif - EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, - kPingResponse)); - - char value[50]; - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, value, 50)); - EXPECT_STREQ("1T4_____en__252", value); - EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - value, 50)); - EXPECT_STREQ("", value); - - const char* kPingResponse2 = - "rlzT4: 1T4_____de__253 \r\n" // Good with extra spaces. - "crc32: 321334F5\r\n"; - EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, - kPingResponse2)); - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, value, 50)); - EXPECT_STREQ("1T4_____de__253", value); - - const char* kPingResponse3 = - "crc32: 0\r\n"; // Good RLZ - empty response. - EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, - kPingResponse3)); - EXPECT_STREQ("1T4_____de__253", value); -} - -// Test whether a stateful event will only be sent in financial pings once. -TEST_F(RlzLibTest, ParsePingResponseWithStatefulEvents) { - const char* kPingResponse = - "version: 3.0.914.7250\r\n" - "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" - "launch-action: custom-action\r\n" - "launch-target: SearchWithGoogleUpdate.exe\r\n" - "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" - "rlzT4: 1T4_____en__252\r\n" // GoodRLZ. - "events: I7S,W1I\r\n" // Clear all events. - "stateful-events: W1I\r\n" // W1I as an stateful event. - "rlz\r\n" - "dcc: dcc_value\r\n" - "crc32: 55191759"; - - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - - // Record some product events to check that they get cleared. - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz( - rlz_lib::IETB_SEARCH_BOX, "TbRlzValue")); - - EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, - kPingResponse)); - - // Check all the events sent earlier are cleared. - char value[50]; - EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - value, 50)); - EXPECT_STREQ("", value); - - // Record both events (one is stateless and the other is stateful) again. - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - - // Check the stateful event won't be sent again while the stateless one will. - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - value, 50)); - EXPECT_STREQ("events=I7S", value); - - // Test that stateful events are cleared by ClearAllProductEvents(). After - // calling it, trying to record a stateful again should result in it being - // recorded again. - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - value, 50)); - EXPECT_STREQ("events=W1I", value); -} - -TEST_F(RlzLibTest, SendFinancialPing) { - // We don't really check a value or result in this test. All this does is - // attempt to ping the financial server, which you can verify in Fiddler. - // TODO: Make this a measurable test. - -#if defined(RLZ_NETWORK_IMPLEMENTATION_CHROME_NET) -#if defined(OS_MACOSX) - base::mac::ScopedNSAutoreleasePool pool; -#endif - - base::Thread::Options options; - options.message_loop_type = MessageLoop::TYPE_IO; - - base::Thread io_thread("rlz_unittest_io_thread"); - ASSERT_TRUE(io_thread.StartWithOptions(options)); - - scoped_refptr<TestURLRequestContextGetter> context = - new TestURLRequestContextGetter( - io_thread.message_loop()->message_loop_proxy()); - rlz_lib::SetURLRequestContext(context.get()); - - class URLRequestRAII { - public: - URLRequestRAII(net::URLRequestContextGetter* context) { - rlz_lib::SetURLRequestContext(context); - } - ~URLRequestRAII() { - rlz_lib::SetURLRequestContext(NULL); - } - }; - - URLRequestRAII set_context(context.get()); -#endif - - MachineDealCodeHelper::Clear(); -#if defined(OS_WIN) - EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value")); -#endif - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, - "TbRlzValue")); - - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - - rlz_lib::AccessPoint points[] = - {rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT, - rlz_lib::NO_ACCESS_POINT}; - - std::string request; - rlz_lib::SendFinancialPing(rlz_lib::TOOLBAR_NOTIFIER, points, - "swg", "GGLA", "SwgProductId1234", "en-UK", false, - /*skip_time_check=*/true); -} - -TEST_F(RlzLibTest, ClearProductState) { - MachineDealCodeHelper::Clear(); - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, - "TbRlzValue")); - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::GD_DESKBAND, - "GdbRlzValue")); - - rlz_lib::AccessPoint points[] = - { rlz_lib::IETB_SEARCH_BOX, rlz_lib::NO_ACCESS_POINT }; - - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IETB_SEARCH_BOX, rlz_lib::INSTALL)); - - rlz_lib::AccessPoint points2[] = - { rlz_lib::IETB_SEARCH_BOX, - rlz_lib::GD_DESKBAND, - rlz_lib::NO_ACCESS_POINT }; - - char cgi[2048]; - EXPECT_TRUE(rlz_lib::GetPingParams(rlz_lib::TOOLBAR_NOTIFIER, points2, - cgi, 2048)); - EXPECT_STREQ("rep=2&rlz=T4:TbRlzValue,D1:GdbRlzValue", cgi); - - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi, 2048)); - std::string events(cgi); - EXPECT_LT(0u, events.find("I7S")); - EXPECT_LT(0u, events.find("T4I")); - EXPECT_LT(0u, events.find("T4R")); - - rlz_lib::ClearProductState(rlz_lib::TOOLBAR_NOTIFIER, points); - - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, - cgi, 2048)); - EXPECT_STREQ("", cgi); - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::GD_DESKBAND, - cgi, 2048)); - EXPECT_STREQ("GdbRlzValue", cgi); - - EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi, 2048)); - EXPECT_STREQ("", cgi); -} - -#if defined(OS_WIN) -template<class T> -class typed_buffer_ptr { - scoped_array<char> buffer_; - - public: - typed_buffer_ptr() { - } - - explicit typed_buffer_ptr(size_t size) : buffer_(new char[size]) { - } - - void reset(size_t size) { - buffer_.reset(new char[size]); - } - - operator T*() { - return reinterpret_cast<T*>(buffer_.get()); - } -}; - -namespace rlz_lib { -bool HasAccess(PSID sid, ACCESS_MASK access_mask, ACL* dacl); -} - -bool EmptyAcl(ACL* acl) { - ACL_SIZE_INFORMATION info; - bool ret = GetAclInformation(acl, &info, sizeof(info), AclSizeInformation); - EXPECT_TRUE(ret); - - for (DWORD i = 0; i < info.AceCount && ret; ++i) { - ret = DeleteAce(acl, 0); - EXPECT_TRUE(ret); - } - - return ret; -} - -TEST_F(RlzLibTest, HasAccess) { - // Create a SID that represents ALL USERS. - DWORD users_sid_size = SECURITY_MAX_SID_SIZE; - typed_buffer_ptr<SID> users_sid(users_sid_size); - CreateWellKnownSid(WinBuiltinUsersSid, NULL, users_sid, &users_sid_size); - - // RLZ always asks for KEY_ALL_ACCESS access to the key. This is what we - // test here. - - // No ACL mean no access. - EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, NULL)); - - // Create an ACL for these tests. - const DWORD kMaxAclSize = 1024; - typed_buffer_ptr<ACL> dacl(kMaxAclSize); - InitializeAcl(dacl, kMaxAclSize, ACL_REVISION); - - // Empty DACL mean no access. - EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); - - // ACE without all needed privileges should mean no access. - EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_READ, users_sid)); - EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); - - // ACE without all needed privileges should mean no access. - EXPECT_TRUE(EmptyAcl(dacl)); - EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_WRITE, users_sid)); - EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); - - // A deny ACE before an allow ACE should not give access. - EXPECT_TRUE(EmptyAcl(dacl)); - EXPECT_TRUE(AddAccessDeniedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, - users_sid)); - EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, - users_sid)); - EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); - - // A deny ACE before an allow ACE should not give access. - EXPECT_TRUE(EmptyAcl(dacl)); - EXPECT_TRUE(AddAccessDeniedAce(dacl, ACL_REVISION, KEY_READ, users_sid)); - EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, - users_sid)); - EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); - - - // An allow ACE without all required bits should not give access. - EXPECT_TRUE(EmptyAcl(dacl)); - EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_WRITE, users_sid)); - EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); - - // An allow ACE with all required bits should give access. - EXPECT_TRUE(EmptyAcl(dacl)); - EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, - users_sid)); - EXPECT_TRUE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); - - // A deny ACE after an allow ACE should not give access. - EXPECT_TRUE(EmptyAcl(dacl)); - EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, - users_sid)); - EXPECT_TRUE(AddAccessDeniedAce(dacl, ACL_REVISION, KEY_READ, users_sid)); - EXPECT_TRUE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); - - // An inherit-only allow ACE should not give access. - EXPECT_TRUE(EmptyAcl(dacl)); - EXPECT_TRUE(AddAccessAllowedAceEx(dacl, ACL_REVISION, INHERIT_ONLY_ACE, - KEY_ALL_ACCESS, users_sid)); - EXPECT_FALSE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); - - // An inherit-only deny ACE should not apply. - EXPECT_TRUE(EmptyAcl(dacl)); - EXPECT_TRUE(AddAccessDeniedAceEx(dacl, ACL_REVISION, INHERIT_ONLY_ACE, - KEY_ALL_ACCESS, users_sid)); - EXPECT_TRUE(AddAccessAllowedAce(dacl, ACL_REVISION, KEY_ALL_ACCESS, - users_sid)); - EXPECT_TRUE(rlz_lib::HasAccess(users_sid, KEY_ALL_ACCESS, dacl)); -} -#endif - -TEST_F(RlzLibTest, BrandingRecordProductEvent) { - // Don't run these tests if a supplementary brand is already in place. That - // way we can control the branding. - if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) - return; - - char cgi_50[50]; - - // Record different events for the same product with diffrent branding, and - // make sure that the information remains separate. - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - { - rlz_lib::SupplementaryBranding branding("TEST"); - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - } - - // Test that recording events with the default brand and a supplementary - // brand don't overwrite each other. - - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7S", cgi_50); - - { - rlz_lib::SupplementaryBranding branding("TEST"); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::INSTALL)); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7I", cgi_50); - } - - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - cgi_50, 50)); - EXPECT_STREQ("events=I7S", cgi_50); -} - -TEST_F(RlzLibTest, BrandingSetAccessPointRlz) { - // Don't run these tests if a supplementary brand is already in place. That - // way we can control the branding. - if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) - return; - - char rlz_50[50]; - - // Test that setting RLZ strings with the default brand and a supplementary - // brand don't overwrite each other. - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "IeTbRlz")); - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); - EXPECT_STREQ("IeTbRlz", rlz_50); - - { - rlz_lib::SupplementaryBranding branding("TEST"); - - EXPECT_TRUE(rlz_lib::SetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, "SuppRlz")); - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, - 50)); - EXPECT_STREQ("SuppRlz", rlz_50); - } - - EXPECT_TRUE(rlz_lib::GetAccessPointRlz(rlz_lib::IETB_SEARCH_BOX, rlz_50, 50)); - EXPECT_STREQ("IeTbRlz", rlz_50); - -} - -TEST_F(RlzLibTest, BrandingWithStatefulEvents) { - // Don't run these tests if a supplementary brand is already in place. That - // way we can control the branding. - if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) - return; - - const char* kPingResponse = - "version: 3.0.914.7250\r\n" - "url: http://www.corp.google.com/~av/45/opt/SearchWithGoogleUpdate.exe\r\n" - "launch-action: custom-action\r\n" - "launch-target: SearchWithGoogleUpdate.exe\r\n" - "signature: c08a3f4438e1442c4fe5678ee147cf6c5516e5d62bb64e\r\n" - "rlzT4: 1T4_____en__252\r\n" // GoodRLZ. - "events: I7S,W1I\r\n" // Clear all events. - "stateful-events: W1I\r\n" // W1I as an stateful event. - "rlz\r\n" - "dcc: dcc_value\r\n" - "crc32: 55191759"; - - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - { - rlz_lib::SupplementaryBranding branding("TEST"); - EXPECT_TRUE(rlz_lib::ClearAllProductEvents(rlz_lib::TOOLBAR_NOTIFIER)); - } - - // Record some product events for the default and supplementary brand. - // Check that they get cleared only for the default brand. - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - - { - rlz_lib::SupplementaryBranding branding("TEST"); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - } - - EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, - kPingResponse)); - - // Check all the events sent earlier are cleared only for default brand. - char value[50]; - EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - value, 50)); - EXPECT_STREQ("", value); - - { - rlz_lib::SupplementaryBranding branding("TEST"); - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - value, 50)); - EXPECT_STREQ("events=I7S,W1I", value); - } - - // Record both events (one is stateless and the other is stateful) again. - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); - EXPECT_TRUE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_HOME_PAGE, rlz_lib::INSTALL)); - - // Check the stateful event won't be sent again while the stateless one will. - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - value, 50)); - EXPECT_STREQ("events=I7S", value); - - { - rlz_lib::SupplementaryBranding branding("TEST"); - EXPECT_TRUE(rlz_lib::ParsePingResponse(rlz_lib::TOOLBAR_NOTIFIER, - kPingResponse)); - - EXPECT_FALSE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - value, 50)); - EXPECT_STREQ("", value); - } - - EXPECT_TRUE(rlz_lib::GetProductEventsAsCgi(rlz_lib::TOOLBAR_NOTIFIER, - value, 50)); - EXPECT_STREQ("events=I7S", value); -} - -#if defined(OS_MACOSX) -class ReadonlyRlzDirectoryTest : public RlzLibTestNoMachineState { - protected: - virtual void SetUp() OVERRIDE; -}; - -void ReadonlyRlzDirectoryTest::SetUp() { - RlzLibTestNoMachineState::SetUp(); - // Make the rlz directory non-writeable. - chmod(temp_dir_.path().value().c_str(), 0500); -} - -TEST_F(ReadonlyRlzDirectoryTest, WriteFails) { - // The rlz test runner runs every test twice: Once normally, and once with - // a SupplementaryBranding on the stack. In the latter case, the rlz lock - // has already been acquired before the rlz directory got changed to - // read-only, which makes this test pointless. So run it only in the first - // pass. - if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) - return; - - EXPECT_FALSE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::SET_TO_GOOGLE)); -} - -// Regression test for http://crbug.com/121255 -TEST_F(ReadonlyRlzDirectoryTest, SupplementaryBrandingDoesNotCrash) { - // See the comment at the top of WriteFails. - if (!rlz_lib::SupplementaryBranding::GetBrand().empty()) - return; - - rlz_lib::SupplementaryBranding branding("TEST"); - EXPECT_FALSE(rlz_lib::RecordProductEvent(rlz_lib::TOOLBAR_NOTIFIER, - rlz_lib::IE_DEFAULT_SEARCH, rlz_lib::INSTALL)); -} -#endif |