Index: rlz/lib/rlz_lib_test.cc |
diff --git a/rlz/lib/rlz_lib_test.cc b/rlz/lib/rlz_lib_test.cc |
deleted file mode 100644 |
index 0f8cb4c21c4379114ae43d4c45abb42b3a485366..0000000000000000000000000000000000000000 |
--- 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 |