omaha_request_action_unittest.cc revision 33bae491eded4ef4f1eb4f4ef0f01ef0e5463f3a
18155d081dc729d407f8ff9e95b4ef91ae14281ceMike Frysinger// Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 26a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov// Use of this source code is governed by a BSD-style license that can be 36a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov// found in the LICENSE file. 46a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 56a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <string> 66a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <vector> 70dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 86a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <glib.h> 90dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 1075039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/strings/string_util.h> 1175039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/strings/stringprintf.h> 1275039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/time/time.h> 130dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov#include "gtest/gtest.h" 14d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasan 156a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/action_pipe.h" 16d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasan#include "update_engine/constants.h" 176a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/mock_http_fetcher.h" 186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/omaha_hash_calculator.h" 196a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/omaha_request_action.h" 20a4a8a8ccc2d9e0285728ed247b43f09433e63323Darin Petkov#include "update_engine/omaha_request_params.h" 21480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan#include "update_engine/prefs.h" 226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/test_utils.h" 23480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan#include "update_engine/utils.h" 246a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 251cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing base::Time; 261cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing base::TimeDelta; 276a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovusing std::string; 286a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovusing std::vector; 291cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::_; 301cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::AllOf; 3134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasanusing testing::DoAll; 321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Ge; 331cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Le; 349c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkovusing testing::NiceMock; 351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Return; 361cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::SetArgumentPointee; 3733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenusing testing::AnyNumber; 386a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace chromeos_update_engine { 406a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 41ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasanclass OmahaRequestActionTest : public ::testing::Test {}; 426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace { 44480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 45ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanMockSystemState mock_system_state; 46480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanOmahaRequestParams kDefaultTestParams( 47ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan &mock_system_state, 481cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestParams::kOsPlatform, 491cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestParams::kOsVersion, 501cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "service_pack", 511cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "x86-generic", 521cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestParams::kAppId, 531cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "0.1.0.0", 541cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "en-US", 551cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "unittest", 56fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "OEM MODEL 09235 7471", 57c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 58c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "0X0A1", 591cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov false, // delta okay 60bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold false, // interactive 610a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://url", 628f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // update_disabled 638f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "", // target_version_prefix 648f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // use_p2p_for_downloading 658f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false); // use_p2p_for_sharing 661cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovstring GetNoUpdateResponse(const string& app_id) { 686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return string( 6923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 7023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 7123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"") + app_id + "\" status=\"ok\"><ping " 7223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "status=\"ok\"/><updatecheck status=\"noupdate\"/></app></response>"; 736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 75480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasanstring GetUpdateResponse2(const string& app_id, 763b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa const string& version, 77480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& more_info_url, 78480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& prompt, 79480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& codebase, 8023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan const string& filename, 81480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& hash, 82480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& needsadmin, 83480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& size, 84480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& deadline, 858f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen const string& max_days_to_scatter, 86639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen const string& elapsed_days, 878f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool disable_p2p_for_downloading, 888f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool disable_p2p_for_sharing) { 8923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan string response = 9023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 9123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\">" 92639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "<daystart elapsed_seconds=\"100\"" + 93639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen (elapsed_days.empty() ? "" : (" elapsed_days=\"" + elapsed_days + "\"")) + 94639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "/>" 9523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"" + app_id + "\" status=\"ok\">" 9623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/><updatecheck status=\"ok\">" 9723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<urls><url codebase=\"" + codebase + "\"/></urls>" 983b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa "<manifest version=\"" + version + "\">" 9923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<packages><package hash=\"not-used\" name=\"" + filename + "\" " 10023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "size=\"" + size + "\"/></packages>" 10123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<actions><action event=\"postinstall\" " 1023b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa "ChromeOSVersion=\"" + version + "\" " 1036a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "MoreInfo=\"" + more_info_url + "\" Prompt=\"" + prompt + "\" " 1043270f7411f55b872db385d0edffdfed18a684121Andrew de los Reyes "IsDelta=\"true\" " 105d671e97c8cc87c71a01ee3e4a889753ea9bec35fJay Srinivasan "IsDeltaPayload=\"true\" " 106480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "MaxDaysToScatter=\"" + max_days_to_scatter + "\" " 107480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "sha256=\"" + hash + "\" " 10823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "needsadmin=\"" + needsadmin + "\" " + 109480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan (deadline.empty() ? "" : ("deadline=\"" + deadline + "\" ")) + 1108f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen (disable_p2p_for_downloading ? 1118f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "DisableP2PForDownloading=\"true\" " : "") + 1128f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen (disable_p2p_for_sharing ? "DisableP2PForSharing=\"true\" " : "") + 11323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "/></actions></manifest></updatecheck></app></response>"; 11423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan LOG(INFO) << "Response = " << response; 11523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan return response; 116480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 117480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 118480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasanstring GetUpdateResponse(const string& app_id, 1193b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa const string& version, 120480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& more_info_url, 121480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& prompt, 122480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& codebase, 12323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan const string& filename, 124480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& hash, 125480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& needsadmin, 126480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& size, 127480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& deadline) { 128480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan return GetUpdateResponse2(app_id, 1293b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa version, 130480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan more_info_url, 131480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan prompt, 132480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan codebase, 13323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan filename, 134480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan hash, 135480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan needsadmin, 136480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan size, 137480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan deadline, 1388f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", 139639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 1408f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 1418f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false); // disable_p2p_for sharing 1426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 1436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1446a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OmahaRequestActionTestProcessorDelegate : public ActionProcessorDelegate { 1456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 1466a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate() 1476a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov : loop_(NULL), 148a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen expected_code_(kErrorCodeSuccess) {} 1496a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov virtual ~OmahaRequestActionTestProcessorDelegate() { 1506a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 151c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov virtual void ProcessingDone(const ActionProcessor* processor, 152a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen ErrorCode code) { 1536a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE(loop_); 1546a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_quit(loop_); 1556a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 1566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov virtual void ActionCompleted(ActionProcessor* processor, 1586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov AbstractAction* action, 159a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen ErrorCode code) { 1606a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // make sure actions always succeed 1616a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (action->Type() == OmahaRequestAction::StaticType()) 162c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov EXPECT_EQ(expected_code_, code); 1636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov else 164a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen EXPECT_EQ(kErrorCodeSuccess, code); 1656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 1666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop_; 167a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen ErrorCode expected_code_; 1686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 1696a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1706a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovgboolean StartProcessorInRunLoop(gpointer data) { 1716a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor *processor = reinterpret_cast<ActionProcessor*>(data); 1726a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StartProcessing(); 1736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return FALSE; 1746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 1756a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} // namespace {} 1766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1776a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OutputObjectCollectorAction; 1786a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1796a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovtemplate<> 1806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass ActionTraits<OutputObjectCollectorAction> { 1816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 1826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Does not take an object for input 1836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov typedef OmahaResponse InputObjectType; 1846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // On success, puts the output path on output 1856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov typedef NoneType OutputObjectType; 1866a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 1876a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1886a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OutputObjectCollectorAction : public Action<OutputObjectCollectorAction> { 1896a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 1906a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OutputObjectCollectorAction() : has_input_object_(false) {} 1916a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void PerformAction() { 1926a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // copy input object 1936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov has_input_object_ = HasInputObject(); 1946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (has_input_object_) 1956a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov omaha_response_ = GetInputObject(); 196a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen processor_->ActionComplete(this, kErrorCodeSuccess); 1976a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 1986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Should never be called 1996a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void TerminateProcessing() { 2006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov CHECK(false); 2016a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 2026a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Debugging/logging 2036a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov static std::string StaticType() { 2046a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return "OutputObjectCollectorAction"; 2056a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 2066a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov std::string Type() const { return StaticType(); } 2076a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov bool has_input_object_; 2086a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse omaha_response_; 2096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 2106a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2111cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov// Returns true iff an output response was obtained from the 212edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov// OmahaRequestAction. |prefs| may be NULL, in which case a local PrefsMock is 2138f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// used. |payload_state| may be NULL, in which case a local mock is used. 2148f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// |p2p_manager| may be NULL, in which case a local mock is used. 2158f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// out_response may be NULL. If |fail_http_response_code| is non-negative, 216265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov// the transfer will fail with that code. |ping_only| is passed through to the 217265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov// OmahaRequestAction constructor. out_post_data may be null; if non-null, the 218265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov// post-data received by the mock HttpFetcher is returned. 21933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 22033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |expected_check_result|, |expected_check_reaction| and 22133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |expected_error_code| parameters are for checking expectations 22233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// about reporting UpdateEngine.Check.{Result,Reaction,DownloadError} 22333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UMA statistics. Use the appropriate ::kUnset value to specify that 22433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// the given metric should not be reported. 2251cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovbool TestUpdateCheck(PrefsInterface* prefs, 2268f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen PayloadStateInterface *payload_state, 2278f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen P2PManager *p2p_manager, 2288f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen OmahaRequestParams& params, 2290dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov const string& http_response, 230edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov int fail_http_response_code, 231265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov bool ping_only, 232a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen ErrorCode expected_code, 23333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult expected_check_result, 23433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction expected_check_reaction, 23533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode expected_download_error_code, 2360dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaResponse* out_response, 2370dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char>* out_post_data) { 2380dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); 2390dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), 2404516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 2414516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL); 242edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov if (fail_http_response_code >= 0) { 243edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov fetcher->FailTransfer(fail_http_response_code); 244edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov } 2456f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan MockSystemState mock_system_state; 2466f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan if (prefs) 2476f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan mock_system_state.set_prefs(prefs); 2488f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen if (payload_state) 2498f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen mock_system_state.set_payload_state(payload_state); 2508f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen if (p2p_manager) 2518f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen mock_system_state.set_p2p_manager(p2p_manager); 252ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan mock_system_state.set_request_params(¶ms); 2536f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan OmahaRequestAction action(&mock_system_state, 2541cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 255116fda3221ff3df037ea1feb271883c87644c839Thieu Le fetcher, 256265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov ping_only); 2576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate delegate; 2586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov delegate.loop_ = loop; 259c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov delegate.expected_code_ = expected_code; 260a4a8a8ccc2d9e0285728ed247b43f09433e63323Darin Petkov 2616a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 2626a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 2636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 2646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OutputObjectCollectorAction collector_action; 2666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov BondActions(&action, &collector_action); 2676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&collector_action); 2686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 26933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(*mock_system_state.mock_metrics_lib(), SendEnumToUMA(_, _, _)) 27033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 27133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(*mock_system_state.mock_metrics_lib(), 27233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SendEnumToUMA(metrics::kMetricCheckResult, 27333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(expected_check_result), 27433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(metrics::CheckResult::kNumConstants) - 1)) 27533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(expected_check_result == metrics::CheckResult::kUnset ? 0 : 1); 27633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(*mock_system_state.mock_metrics_lib(), 27733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SendEnumToUMA(metrics::kMetricCheckReaction, 27833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(expected_check_reaction), 27933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(metrics::CheckReaction::kNumConstants) - 1)) 28033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(expected_check_reaction == metrics::CheckReaction::kUnset ? 0 : 1); 28133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(*mock_system_state.mock_metrics_lib(), 28233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SendEnumToUMA(metrics::kMetricCheckDownloadErrorCode, 28333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(expected_download_error_code), 28433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(metrics::DownloadErrorCode::kNumConstants) - 1)) 28533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(expected_download_error_code == metrics::DownloadErrorCode::kUnset 28633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen ? 0 : 1); 28733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 2886a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_timeout_add(0, &StartProcessorInRunLoop, &processor); 2896a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_run(loop); 2906a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_unref(loop); 2916a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (collector_action.has_input_object_ && out_response) 2926a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov *out_response = collector_action.omaha_response_; 2936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (out_post_data) 2946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov *out_post_data = fetcher->post_data(); 2956a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return collector_action.has_input_object_; 2966a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 2976a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2980dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// Tests Event requests -- they should always succeed. |out_post_data| 2990dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// may be null; if non-null, the post-data received by the mock 3000dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// HttpFetcher is returned. 301480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasanvoid TestEvent(OmahaRequestParams params, 3020dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaEvent* event, 3030dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov const string& http_response, 3040dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char>* out_post_data) { 3050dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); 3060dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), 3074516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 3084516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL); 3096f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan MockSystemState mock_system_state; 310ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan mock_system_state.set_request_params(¶ms); 311ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestAction action(&mock_system_state, event, fetcher, false); 3120dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestActionTestProcessorDelegate delegate; 3130dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov delegate.loop_ = loop; 3140dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ActionProcessor processor; 3150dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov processor.set_delegate(&delegate); 3160dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov processor.EnqueueAction(&action); 3170dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 3180dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov g_timeout_add(0, &StartProcessorInRunLoop, &processor); 3190dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov g_main_loop_run(loop); 3200dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov g_main_loop_unref(loop); 3210dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov if (out_post_data) 3220dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov *out_post_data = fetcher->post_data(); 3230dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 3240dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 3256a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, NoUpdateTest) { 3266a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 3276a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 3281cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 3298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 3308f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 3311cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 3320dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 333edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 334265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 335a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 33633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 33733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 33833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 3390dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 3400dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 3416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 3426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3446a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, ValidUpdateTest) { 3456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 3466a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 3471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 3488f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 3498f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 3501cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 3510dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetUpdateResponse(OmahaRequestParams::kAppId, 3520dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "1.2.3.4", // version 3530dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "http://more/info", 3540dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "true", // prompt 35523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 35623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 3570dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "HASH1234=", // checksum 3580dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "false", // needs admin 3596c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "123", // size 3606c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "20101020"), // deadline 361edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 362265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 363a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 36433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 36533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 36633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 3670dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 3680dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 3696a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.update_exists); 37034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan EXPECT_TRUE(response.update_exists); 3713b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa EXPECT_EQ("1.2.3.4", response.version); 3726f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan EXPECT_EQ("http://code/base/file.signed", response.payload_urls[0]); 3736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("http://more/info", response.more_info_url); 3746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("HASH1234=", response.hash); 3756a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(123, response.size); 3766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.prompt); 3776c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_EQ("20101020", response.deadline); 3786a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3796a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3800a70874c61118a2b276edc731ad890c6826be2beJay SrinivasanTEST(OmahaRequestActionTest, ValidUpdateBlockedByPolicyTest) { 3810a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaResponse response; 3820a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 383ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_disabled(true); 3840a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan ASSERT_FALSE( 3850a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan TestUpdateCheck(NULL, // prefs 3868f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 3878f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 3880a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan params, 3890a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan GetUpdateResponse(OmahaRequestParams::kAppId, 3900a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "1.2.3.4", // version 3910a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://more/info", 3920a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "true", // prompt 39323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 39423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 3950a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "HASH1234=", // checksum 3960a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "false", // needs admin 3970a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "123", // size 398480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ""), // deadline 3990a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan -1, 4000a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan false, // ping_only 401a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaUpdateIgnoredPerPolicy, 40233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 40333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kIgnored, 40433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 4050a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan &response, 4060a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan NULL)); 4070a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan EXPECT_FALSE(response.update_exists); 4080a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan} 4090a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 4100a70874c61118a2b276edc731ad890c6826be2beJay SrinivasanTEST(OmahaRequestActionTest, NoUpdatesSentWhenBlockedByPolicyTest) { 4110a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaResponse response; 4120a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 413ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_disabled(true); 4140a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan ASSERT_TRUE( 4150a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan TestUpdateCheck(NULL, // prefs 4168f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 4178f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 4180a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan params, 4190a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan GetNoUpdateResponse(OmahaRequestParams::kAppId), 4200a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan -1, 4210a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan false, // ping_only 422a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 42333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 42433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 42533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 4260a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan &response, 4270a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan NULL)); 4280a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan EXPECT_FALSE(response.update_exists); 4290a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan} 4300a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 431480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, WallClockBasedWaitAloneCausesScattering) { 432480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 433480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 434ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 435ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(false); 436ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta::FromDays(2)); 437480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 438480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 439a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 440480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 441480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 442480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 443480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 44475039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 445480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 446480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 447480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_FALSE( 448480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan TestUpdateCheck(&prefs, // prefs 4498f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 4508f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 451480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan params, 452480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 453480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 454480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 455480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 45623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 45723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 458480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 459480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 460480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 461480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 4628f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 463639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 4648f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 4658f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 466480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 467480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 468a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaUpdateDeferredPerPolicy, 46933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 47033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 47133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 472480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 473480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 474480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_FALSE(response.update_exists); 475968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 476968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 477968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 478968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 479968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa TestUpdateCheck(&prefs, // prefs 4808f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 4818f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 482968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params, 483968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa GetUpdateResponse2(OmahaRequestParams::kAppId, 484968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "1.2.3.4", // version 485968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://more/info", 486968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "true", // prompt 487968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://code/base/", // dl url 488968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "file.signed", // file name 489968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "HASH1234=", // checksum 490968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "false", // needs admin 491968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "123", // size 492968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "", // deadline 4938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 494639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 4958f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 4968f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 497968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 498968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 499968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa kErrorCodeSuccess, 50033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 50133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 50233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 503968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 504968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa NULL)); 505968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 506480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 507480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 508480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, NoWallClockBasedWaitCausesNoScattering) { 509480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 510480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 511ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(false); 512ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta::FromDays(2)); 513480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 514ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 515ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 516ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 517480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 518480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 519a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 520480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 521480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 522480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 523480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 52475039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 525480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 526480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 527480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE( 528480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan TestUpdateCheck(&prefs, // prefs 5298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 5308f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 531480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan params, 532480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 533480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 534480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 535480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 53623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 53723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 538480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 539480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 540480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 541480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 5428f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 543639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 5448f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 5458f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 546480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 547480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 548a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 54933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 55033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 55133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 552480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 553480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 554480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_TRUE(response.update_exists); 555480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 556480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 557480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, ZeroMaxDaysToScatterCausesNoScattering) { 558480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 559480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 560ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 561ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta::FromDays(2)); 562480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 563ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 564ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 565ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 566480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 567480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 568a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 569480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 570480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 571480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 572480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 57375039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 574480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 575480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 576480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE( 577480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan TestUpdateCheck(&prefs, // prefs 5788f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 5798f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 580480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan params, 581480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 582480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 583480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 584480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 58523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 58623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 587480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 588480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 589480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 590480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 5918f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "0", // max days to scatter 592639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 5938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 5948f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 595480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 596480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 597a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 59833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 59933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 60033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 601480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 602480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 603480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_TRUE(response.update_exists); 604480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 605480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 606480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 607480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, ZeroUpdateCheckCountCausesNoScattering) { 608480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 609480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 610ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 611ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta()); 612480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 613ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 614ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(0); 615ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(0); 616480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 617480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 618a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 619480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 620480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 621480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 622480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 62375039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 624480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 625480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 626480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(TestUpdateCheck( 627480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs, // prefs 6288f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 6298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 630480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan params, 631480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 632480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 633480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 634480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 63523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 63623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 637480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 638480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 639480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 640480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 6418f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 642639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 6438f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 6448f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 645480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 646480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 647a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 64833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 64933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 65033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 651480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 652480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 653480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 654480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan int64 count; 655480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateCheckCount, &count)); 656480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(count == 0); 657480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_TRUE(response.update_exists); 658480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 659480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 660480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, NonZeroUpdateCheckCountCausesScattering) { 661480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 662480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 663ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 664ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta()); 665480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 666ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 667ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 668ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 669480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 670480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 671a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 672480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 673480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 674480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 675480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 67675039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 677480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 678480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 679480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_FALSE(TestUpdateCheck( 680480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs, // prefs 6818f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 6828f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 683480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan params, 684480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 685480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 686480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 687480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 68823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 68923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 690480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 691480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 692480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 693480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 6948f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 695639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 6968f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 6978f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 698480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 699480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 700a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaUpdateDeferredPerPolicy, 70133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 70233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 70333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 704480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 705480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 706480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 707480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan int64 count; 708480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateCheckCount, &count)); 709480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(count > 0); 710480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_FALSE(response.update_exists); 711968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 712968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 713968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 714968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 715968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa TestUpdateCheck(&prefs, // prefs 7168f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 7178f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 718968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params, 719968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa GetUpdateResponse2(OmahaRequestParams::kAppId, 720968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "1.2.3.4", // version 721968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://more/info", 722968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "true", // prompt 723968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://code/base/", // dl url 724968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "file.signed", // file name 725968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "HASH1234=", // checksum 726968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "false", // needs admin 727968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "123", // size 728968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "", // deadline 7298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 730639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 7318f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 7328f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 733968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 734968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 735968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa kErrorCodeSuccess, 73633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 73733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 73833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 739968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 740968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa NULL)); 741968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 742480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 743480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 744480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, ExistingUpdateCheckCountCausesScattering) { 745480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 746480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 747ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 748ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta()); 749480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 750ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 751ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 752ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 753480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 754480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 755a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 756480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 757480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 758480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 759480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 76075039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 761480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 762480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 763480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(prefs.SetInt64(kPrefsUpdateCheckCount, 5)); 764480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 765480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_FALSE(TestUpdateCheck( 766480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs, // prefs 7678f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 7688f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 769480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan params, 770480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 771480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 772480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 773480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 77423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 77523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 776480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 777480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 778480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 779480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 7808f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 781639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 7828f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 7838f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 784480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 785480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 786a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaUpdateDeferredPerPolicy, 78733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 78833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 78933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 790480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 791480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 792480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 793480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan int64 count; 794480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateCheckCount, &count)); 795480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan // count remains the same, as the decrementing happens in update_attempter 796480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan // which this test doesn't exercise. 797480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(count == 5); 798480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_FALSE(response.update_exists); 799968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 800968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 801968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 802968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 803968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa TestUpdateCheck(&prefs, // prefs 8048f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 8058f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 806968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params, 807968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa GetUpdateResponse2(OmahaRequestParams::kAppId, 808968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "1.2.3.4", // version 809968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://more/info", 810968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "true", // prompt 811968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://code/base/", // dl url 812968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "file.signed", // file name 813968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "HASH1234=", // checksum 814968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "false", // needs admin 815968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "123", // size 816968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "", // deadline 8178f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 818639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 8198f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 8208f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 821968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 822968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 823968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa kErrorCodeSuccess, 82433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 82533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 82633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 827968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 828968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa NULL)); 829968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 830480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 8310a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 8326a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, NoOutputPipeTest) { 8336a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov const string http_response(GetNoUpdateResponse(OmahaRequestParams::kAppId)); 8346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 8356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); 8366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 8376f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan MockSystemState mock_system_state; 838480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 839ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan mock_system_state.set_request_params(¶ms); 840ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestAction action(&mock_system_state, NULL, 8410dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 8424516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 843116fda3221ff3df037ea1feb271883c87644c839Thieu Le NULL), 844116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 8456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate delegate; 8466a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov delegate.loop_ = loop; 8476a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 8486a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 8496a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 8506a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 8516a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_timeout_add(0, &StartProcessorInRunLoop, &processor); 8526a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_run(loop); 8536a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_unref(loop); 8546a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(processor.IsRunning()); 8556a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 8566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 8576a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, InvalidXmlTest) { 8586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 8596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_FALSE( 8601cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 8618f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 8628f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 8631cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 8640dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 865edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 866265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 867a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestXMLParseError, 86833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 86933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 87033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 871edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 872edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov NULL)); 873edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 874edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 875edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 876edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin PetkovTEST(OmahaRequestActionTest, EmptyResponseTest) { 877edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 878edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 879edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov TestUpdateCheck(NULL, // prefs 8808f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 8818f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 882edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kDefaultTestParams, 883edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 884edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 885265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 886a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestEmptyResponseError, 88733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 88833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 88933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 8900dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 8910dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 8926a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 8936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 8946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 8956a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, MissingStatusTest) { 8966a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 8970dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 8981cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // prefs 8998f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 9008f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 9011cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 90223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 90323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 90423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"foo\" status=\"ok\">" 90523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/>" 90623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck/></app></response>", 907edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 908265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 909a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaResponseInvalid, 91033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 91133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 91233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 9136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 9146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov NULL)); 9156a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 9166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 9176a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 9186a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, InvalidStatusTest) { 9196a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 9200dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 9211cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // prefs 9228f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 9238f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 9241cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 92523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 92623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 92723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"foo\" status=\"ok\">" 92823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/>" 92923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"InvalidStatusTest\"/></app></response>", 930edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 931265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 932a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaResponseInvalid, 93333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 93433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 93533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 9366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 9376a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov NULL)); 9386a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 9396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 9406a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 9416a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, MissingNodesetTest) { 9426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 9430dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 9441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // prefs 9458f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 9468f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 9471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 94823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 94923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 95023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"foo\" status=\"ok\">" 95123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/>" 95223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "</app></response>", 953edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 954265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 955a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaResponseInvalid, 95633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 95733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 95833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 9596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 9606a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov NULL)); 9616a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 9626a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 9636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 9646a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, MissingFieldTest) { 96523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan string input_response = 96623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 96723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 96823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"xyz\" status=\"ok\">" 96923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"ok\">" 97023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<urls><url codebase=\"http://missing/field/test/\"/></urls>" 9713b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa "<manifest version=\"10.2.3.4\">" 97223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<packages><package hash=\"not-used\" name=\"f\" " 97323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "size=\"587\"/></packages>" 97423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<actions><action event=\"postinstall\" " 97523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "ChromeOSVersion=\"10.2.3.4\" " 97623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "Prompt=\"false\" " 97723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "IsDelta=\"true\" " 978d671e97c8cc87c71a01ee3e4a889753ea9bec35fJay Srinivasan "IsDeltaPayload=\"false\" " 97923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "sha256=\"lkq34j5345\" " 98023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "needsadmin=\"true\" " 98123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "/></actions></manifest></updatecheck></app></response>"; 98223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan LOG(INFO) << "Input Response = " << input_response; 98323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan 9846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 9851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE(TestUpdateCheck(NULL, // prefs 9868f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 9878f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 9881cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 98923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan input_response, 990edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 991265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 992a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 99333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 99433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 99533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 9960dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 9970dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 9986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.update_exists); 9993b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa EXPECT_EQ("10.2.3.4", response.version); 10006f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan EXPECT_EQ("http://missing/field/test/f", response.payload_urls[0]); 10016a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("", response.more_info_url); 100223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ("lkq34j5345", response.hash); 100323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(587, response.size); 10046a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.prompt); 10056c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_TRUE(response.deadline.empty()); 10066a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 10076a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10086a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace { 10096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass TerminateEarlyTestProcessorDelegate : public ActionProcessorDelegate { 10106a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 10116a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void ProcessingStopped(const ActionProcessor* processor) { 10126a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE(loop_); 10136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_quit(loop_); 10146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 10156a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop_; 10166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 10176a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovgboolean TerminateTransferTestStarter(gpointer data) { 10196a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor *processor = reinterpret_cast<ActionProcessor*>(data); 10206a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StartProcessing(); 10216a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov CHECK(processor->IsRunning()); 10226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StopProcessing(); 10236a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return FALSE; 10246a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 10256a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} // namespace {} 10266a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10276a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, TerminateTransferTest) { 10286a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov string http_response("doesn't matter"); 10296a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); 10306a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10316f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan MockSystemState mock_system_state; 1032480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 1033ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan mock_system_state.set_request_params(¶ms); 1034ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestAction action(&mock_system_state, NULL, 10350dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 10364516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 1037116fda3221ff3df037ea1feb271883c87644c839Thieu Le NULL), 1038116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 10396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov TerminateEarlyTestProcessorDelegate delegate; 10406a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov delegate.loop_ = loop; 10416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 10426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 10436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 10446a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_timeout_add(0, &TerminateTransferTestStarter, &processor); 10466a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_run(loop); 10476a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_unref(loop); 10486a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 10496a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10506a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, XmlEncodeTest) { 10516a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("ab", XmlEncode("ab")); 10526a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("a<b", XmlEncode("a<b")); 10536a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("foo-Ω", XmlEncode("foo-\xce\xa9")); 10546a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("<&>", XmlEncode("<&>")); 10556a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("&lt;&amp;&gt;", XmlEncode("<&>")); 10566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov vector<char> post_data; 10586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Make sure XML Encode is being called on the params 1060ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan MockSystemState mock_system_state; 1061ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams params(&mock_system_state, 1062ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams::kOsPlatform, 10636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestParams::kOsVersion, 10646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "testtheservice_pack>", 10651cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "x86 generic<id", 10666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestParams::kAppId, 10676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "0.1.0.0", 10686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "en-US", 10691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "unittest_track<", 1070fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "<OEM MODEL>", 1071c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 1072c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "EC100", 10733f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes false, // delta okay 1074bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold false, // interactive 10750a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://url", 10768f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // update_disabled 10778f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "", // target_version_prefix 10788f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // use_p2p_for_downloading 10798f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false); // use_p2p_for_sharing 10806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 10816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_FALSE( 10821cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 10838f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 10848f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 10851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov params, 10860dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 1087edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1088265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1089a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestXMLParseError, 109033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 109133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 109233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 10930dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 10940dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &post_data)); 10956a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // convert post_data to string 10966a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov string post_str(&post_data[0], post_data.size()); 10976a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_NE(post_str.find("testtheservice_pack>"), string::npos); 10986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(post_str.find("testtheservice_pack>"), string::npos); 10991cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find("x86 generic<id"), string::npos); 11001cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_EQ(post_str.find("x86 generic<id"), string::npos); 11011cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find("unittest_track&lt;"), string::npos); 11021cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_EQ(post_str.find("unittest_track<"), string::npos); 1103fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_NE(post_str.find("<OEM MODEL>"), string::npos); 1104fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_EQ(post_str.find("<OEM MODEL>"), string::npos); 11056a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 11066a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11076a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, XmlDecodeTest) { 11086a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 11096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 11101cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 11118f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 11128f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 11131cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 11140dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetUpdateResponse(OmahaRequestParams::kAppId, 11150dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "1.2.3.4", // version 11160dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "testthe<url", // more info 11170dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "true", // prompt 111823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "testthe&codebase/", // dl url 111923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 11200dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "HASH1234=", // checksum 11210dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "false", // needs admin 11226c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "123", // size 11236c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "<20110101"), // deadline 1124edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1125265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1126a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 112733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 112833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 112933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 11300dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 11310dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 11326a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11336a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(response.more_info_url, "testthe<url"); 11346f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan EXPECT_EQ(response.payload_urls[0], "testthe&codebase/file.signed"); 11356c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_EQ(response.deadline, "<20110101"); 11366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 11376a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11386a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, ParseIntTest) { 11396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 11406a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 11411cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 11428f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 11438f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 11441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 11450dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetUpdateResponse(OmahaRequestParams::kAppId, 11460dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "1.2.3.4", // version 11470dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "theurl", // more info 11480dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "true", // prompt 114923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "thecodebase/", // dl url 115023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 11510dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "HASH1234=", // checksum 11520dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "false", // needs admin 11530dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov // overflows int32: 11546c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "123123123123123", // size 11556c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "deadline"), 1156edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1157265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1158a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 115933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 116033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 116133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 11620dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 11630dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 11646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(response.size, 123123123123123ll); 11666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 11676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11680dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin PetkovTEST(OmahaRequestActionTest, FormatUpdateCheckOutputTest) { 11690dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char> post_data; 117095508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov NiceMock<PrefsMock> prefs; 117195508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_CALL(prefs, GetString(kPrefsPreviousVersion, _)) 117295508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(string("")), Return(true))); 1173ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_CALL(prefs, SetString(kPrefsPreviousVersion, _)).Times(1); 117495508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov ASSERT_FALSE(TestUpdateCheck(&prefs, 11758f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 11768f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 11771cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 11780dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 1179edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1180265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1181a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestXMLParseError, 118233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 118333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 118433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 11851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // response 11860dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &post_data)); 11870dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov // convert post_data to string 11880dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string post_str(&post_data[0], post_data.size()); 1189116fda3221ff3df037ea1feb271883c87644c839Thieu Le EXPECT_NE(post_str.find( 119023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <ping active=\"1\" a=\"-1\" r=\"-1\"></ping>\n" 1191ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan " <updatecheck targetversionprefix=\"\"></updatecheck>\n"), 11920a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan string::npos); 1193fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_NE(post_str.find("hardware_class=\"OEM MODEL 09235 7471\""), 1194fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov string::npos); 1195c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("fw_version=\"ChromeOSFirmware.1.0\""), 1196c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 1197c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("ec_version=\"0X0A1\""), 1198c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 11990dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 12000dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 12010a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 1202ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST(OmahaRequestActionTest, FormatUpdateDisabledOutputTest) { 120395508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov vector<char> post_data; 120495508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov NiceMock<PrefsMock> prefs; 120595508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_CALL(prefs, GetString(kPrefsPreviousVersion, _)) 12060a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan .WillOnce(DoAll(SetArgumentPointee<1>(string("")), Return(true))); 1207ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_CALL(prefs, SetString(kPrefsPreviousVersion, _)).Times(1); 12080a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 1209ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_disabled(true); 121095508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov ASSERT_FALSE(TestUpdateCheck(&prefs, 12118f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 12128f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 12130a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan params, 121495508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov "invalid xml>", 121595508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov -1, 1216265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1217a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestXMLParseError, 121833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 121933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 122033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 122195508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov NULL, // response 122295508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov &post_data)); 122395508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov // convert post_data to string 122495508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov string post_str(&post_data[0], post_data.size()); 1225116fda3221ff3df037ea1feb271883c87644c839Thieu Le EXPECT_NE(post_str.find( 122623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <ping active=\"1\" a=\"-1\" r=\"-1\"></ping>\n" 1227ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan " <updatecheck targetversionprefix=\"\"></updatecheck>\n"), 12280a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan string::npos); 122995508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_NE(post_str.find("hardware_class=\"OEM MODEL 09235 7471\""), 123095508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov string::npos); 1231c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("fw_version=\"ChromeOSFirmware.1.0\""), 1232c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 1233c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("ec_version=\"0X0A1\""), 1234c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 123595508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov} 123695508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov 1237e17f86bae4299882232d3e6858ada68692e80501Darin PetkovTEST(OmahaRequestActionTest, FormatSuccessEventOutputTest) { 1238e17f86bae4299882232d3e6858ada68692e80501Darin Petkov vector<char> post_data; 12391cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestEvent(kDefaultTestParams, 1240e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeUpdateDownloadStarted), 1241e17f86bae4299882232d3e6858ada68692e80501Darin Petkov "invalid xml>", 1242e17f86bae4299882232d3e6858ada68692e80501Darin Petkov &post_data); 1243e17f86bae4299882232d3e6858ada68692e80501Darin Petkov // convert post_data to string 1244e17f86bae4299882232d3e6858ada68692e80501Darin Petkov string post_str(&post_data[0], post_data.size()); 124575039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko string expected_event = base::StringPrintf( 124623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <event eventtype=\"%d\" eventresult=\"%d\"></event>\n", 1247e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kTypeUpdateDownloadStarted, 1248e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultSuccess); 1249e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_NE(post_str.find(expected_event), string::npos); 125023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("ping"), string::npos); 125123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("updatecheck"), string::npos); 1252e17f86bae4299882232d3e6858ada68692e80501Darin Petkov} 1253e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1254e17f86bae4299882232d3e6858ada68692e80501Darin PetkovTEST(OmahaRequestActionTest, FormatErrorEventOutputTest) { 1255e17f86bae4299882232d3e6858ada68692e80501Darin Petkov vector<char> post_data; 12561cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestEvent(kDefaultTestParams, 1257e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeDownloadComplete, 1258e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 1259a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeError), 1260e17f86bae4299882232d3e6858ada68692e80501Darin Petkov "invalid xml>", 1261e17f86bae4299882232d3e6858ada68692e80501Darin Petkov &post_data); 1262e17f86bae4299882232d3e6858ada68692e80501Darin Petkov // convert post_data to string 1263e17f86bae4299882232d3e6858ada68692e80501Darin Petkov string post_str(&post_data[0], post_data.size()); 126475039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko string expected_event = base::StringPrintf( 126523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <event eventtype=\"%d\" eventresult=\"%d\" " 126623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "errorcode=\"%d\"></event>\n", 1267e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kTypeDownloadComplete, 1268e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 1269a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeError); 12700dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_NE(post_str.find(expected_event), string::npos); 127123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("updatecheck"), string::npos); 12720dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 12730dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 12740dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin PetkovTEST(OmahaRequestActionTest, IsEventTest) { 12750dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string http_response("doesn't matter"); 12766f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan MockSystemState mock_system_state; 1277480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 1278ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan mock_system_state.set_request_params(¶ms); 12790dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestAction update_check_action( 12806f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan &mock_system_state, 12810dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL, 12820dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 12834516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 1284116fda3221ff3df037ea1feb271883c87644c839Thieu Le NULL), 1285116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 12860dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_FALSE(update_check_action.IsEvent()); 12870dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 1288480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan params = kDefaultTestParams; 1289ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan mock_system_state.set_request_params(¶ms); 12900dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestAction event_action( 12916f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan &mock_system_state, 1292e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeUpdateComplete), 12930dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 12944516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 1295116fda3221ff3df037ea1feb271883c87644c839Thieu Le NULL), 1296116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 12970dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_TRUE(event_action.IsEvent()); 12980dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 12990dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 13003f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los ReyesTEST(OmahaRequestActionTest, FormatDeltaOkayOutputTest) { 13013f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes for (int i = 0; i < 2; i++) { 13023f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes bool delta_okay = i == 1; 13033f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes const char* delta_okay_str = delta_okay ? "true" : "false"; 13043f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes vector<char> post_data; 1305ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan MockSystemState mock_system_state; 1306ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams params(&mock_system_state, 1307ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams::kOsPlatform, 13083f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes OmahaRequestParams::kOsVersion, 13093f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "service_pack", 13103f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "x86-generic", 13113f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes OmahaRequestParams::kAppId, 13123f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "0.1.0.0", 13133f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "en-US", 13143f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "unittest_track", 1315fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "OEM MODEL REV 1234", 1316c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 1317c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "EC100", 13183f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes delta_okay, 1319bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold false, // interactive 13200a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://url", 13218f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // update_disabled 13228f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "", // target_version_prefix 13238f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // use_p2p_for_downloading 13248f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false); // use_p2p_for_sharing 13251cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_FALSE(TestUpdateCheck(NULL, // prefs 13268f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 13278f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 13281cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov params, 13293f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "invalid xml>", 1330edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1331265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1332a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestXMLParseError, 133333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 133433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 133533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 13363f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes NULL, 13373f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes &post_data)); 13383f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes // convert post_data to string 133975039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko string post_str(post_data.data(), post_data.size()); 134075039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko EXPECT_NE(post_str.find(base::StringPrintf(" delta_okay=\"%s\"", 134175039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko delta_okay_str)), 13423f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes string::npos) 13433f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes << "i = " << i; 13443f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes } 13453f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes} 13463f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes 1347bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad ArnoldTEST(OmahaRequestActionTest, FormatInteractiveOutputTest) { 1348bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold for (int i = 0; i < 2; i++) { 1349bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold bool interactive = i == 1; 13508a659d80dc1912c664ef16f0bc66acaa01bd8b73Gilad Arnold const char* interactive_str = interactive ? "ondemandupdate" : "scheduler"; 1351bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold vector<char> post_data; 1352ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan MockSystemState mock_system_state; 1353ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams params(&mock_system_state, 1354ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams::kOsPlatform, 1355bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold OmahaRequestParams::kOsVersion, 1356bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "service_pack", 1357bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "x86-generic", 1358bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold OmahaRequestParams::kAppId, 1359bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "0.1.0.0", 1360bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "en-US", 1361bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "unittest_track", 1362bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "OEM MODEL REV 1234", 1363c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 1364c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "EC100", 13658f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // delta_okay 1366bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold interactive, 1367bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "http://url", 13688f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // update_disabled 13698f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "", // target_version_prefix 13708f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // use_p2p_for_downloading 13718f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false); // use_p2p_for_sharing 1372bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold ASSERT_FALSE(TestUpdateCheck(NULL, // prefs 13738f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 13748f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 1375bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold params, 1376bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "invalid xml>", 1377bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold -1, 1378bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold false, // ping_only 1379a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestXMLParseError, 138033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 138133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 138233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 1383bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold NULL, 1384bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold &post_data)); 1385bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold // convert post_data to string 1386bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold string post_str(&post_data[0], post_data.size()); 138775039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko EXPECT_NE(post_str.find(base::StringPrintf("installsource=\"%s\"", 138875039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko interactive_str)), 1389bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold string::npos) 1390bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold << "i = " << i; 1391bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold } 1392bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold} 1393bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold 1394e17f86bae4299882232d3e6858ada68692e80501Darin PetkovTEST(OmahaRequestActionTest, OmahaEventTest) { 1395e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent default_event; 1396e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUnknown, default_event.type); 1397e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultError, default_event.result); 1398a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen EXPECT_EQ(kErrorCodeError, default_event.error_code); 1399e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1400e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent success_event(OmahaEvent::kTypeUpdateDownloadStarted); 1401e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUpdateDownloadStarted, success_event.type); 1402e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultSuccess, success_event.result); 1403a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen EXPECT_EQ(kErrorCodeSuccess, success_event.error_code); 1404e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1405e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent error_event(OmahaEvent::kTypeUpdateDownloadFinished, 1406e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 1407a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeError); 1408e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUpdateDownloadFinished, error_event.type); 1409e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultError, error_event.result); 1410a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen EXPECT_EQ(kErrorCodeError, error_event.error_code); 1411e17f86bae4299882232d3e6858ada68692e80501Darin Petkov} 1412e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 14131cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, PingTest) { 1414265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov for (int ping_only = 0; ping_only < 2; ping_only++) { 1415265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov NiceMock<PrefsMock> prefs; 141633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 141733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 141833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 1419265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov // Add a few hours to the day difference to test no rounding, etc. 1420265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov int64_t five_days_ago = 1421265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov (Time::Now() - TimeDelta::FromHours(5 * 24 + 13)).ToInternalValue(); 1422265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov int64_t six_days_ago = 1423265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov (Time::Now() - TimeDelta::FromHours(6 * 24 + 11)).ToInternalValue(); 1424639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1425639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 1426265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 1427265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(six_days_ago), Return(true))); 1428265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 1429265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(five_days_ago), Return(true))); 1430265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov vector<char> post_data; 1431265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov ASSERT_TRUE( 1432265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov TestUpdateCheck(&prefs, 14338f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 14348f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 1435265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov kDefaultTestParams, 1436265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 1437265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov -1, 1438265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov ping_only, 1439a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 144033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUnset, 144133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 144233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 1443265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov NULL, 1444265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov &post_data)); 1445265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov string post_str(&post_data[0], post_data.size()); 144623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("<ping active=\"1\" a=\"6\" r=\"5\"></ping>"), 1447265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov string::npos); 1448265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov if (ping_only) { 144923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("updatecheck"), string::npos); 1450265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov EXPECT_EQ(post_str.find("previousversion"), string::npos); 1451265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov } else { 145223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("updatecheck"), string::npos); 1453265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov EXPECT_NE(post_str.find("previousversion"), string::npos); 1454265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov } 1455265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov } 14561cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 14571cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 14581cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, ActivePingTest) { 14599c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 146033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 146133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 146233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 14631cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t three_days_ago = 14641cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(3 * 24 + 12)).ToInternalValue(); 14651cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t now = Time::Now().ToInternalValue(); 1466639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1467639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 14681cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 14691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(three_days_ago), Return(true))); 14701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 14711cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 14721cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 14731cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 14741cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 14758f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 14768f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 14771cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 14781cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 1479edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1480265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1481a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 148233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 148333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 148433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 14851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 14861cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 14871cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 148823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("<ping active=\"1\" a=\"3\"></ping>"), 1489116fda3221ff3df037ea1feb271883c87644c839Thieu Le string::npos); 14901cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 14911cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 14921cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, RollCallPingTest) { 14939c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 149433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 149533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 149633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 14971cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t four_days_ago = 14981cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(4 * 24)).ToInternalValue(); 14991cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t now = Time::Now().ToInternalValue(); 1500639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1501639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 15021cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 15031cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 15041cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 15051cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(four_days_ago), Return(true))); 15061cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 15071cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 15081cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 15098f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 15108f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 15111cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 15121cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 1513edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1514265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1515a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 151633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 151733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 151833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 15191cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 15201cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 15211cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 152223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("<ping active=\"1\" r=\"4\"></ping>\n"), 1523116fda3221ff3df037ea1feb271883c87644c839Thieu Le string::npos); 15241cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 15251cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 15261cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, NoPingTest) { 15279c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 152833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 152933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 153033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 15311cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t one_hour_ago = 15321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(1)).ToInternalValue(); 1533639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1534639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 15351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 15361cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); 15371cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 15381cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); 15391cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 15401cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 15411cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 15421cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 15431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 15448f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 15458f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 15461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 15471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 1548edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1549265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1550a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 155133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 155233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 155333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 15541cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 15551cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 15561cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 155723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("ping"), string::npos); 15581cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 15591cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1560b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu LeTEST(OmahaRequestActionTest, IgnoreEmptyPingTest) { 1561b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le // This test ensures that we ignore empty ping only requests. 1562b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le NiceMock<PrefsMock> prefs; 1563b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le int64_t now = Time::Now().ToInternalValue(); 1564b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 1565b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 1566b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 1567b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 1568b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 1569b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 1570b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le vector<char> post_data; 1571b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_TRUE( 1572b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le TestUpdateCheck(&prefs, 15738f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 15748f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 1575b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le kDefaultTestParams, 1576b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le GetNoUpdateResponse(OmahaRequestParams::kAppId), 1577b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le -1, 1578b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le true, // ping_only 1579a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 158033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUnset, 158133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 158233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 1583b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le NULL, 1584b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le &post_data)); 1585b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_EQ(post_data.size(), 0); 1586b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le} 1587b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le 15881cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, BackInTimePingTest) { 15899c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 159033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 159133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 159233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 15931cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t future = 15941cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() + TimeDelta::FromHours(3 * 24 + 4)).ToInternalValue(); 1595639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1596639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 15971cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 15981cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); 15991cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 16001cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); 16011cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)) 16021cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 16031cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)) 16041cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 16051cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 16061cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 16071cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 16088f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 16098f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 16101cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 161123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 161223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart elapsed_seconds=\"100\"/>" 16131cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 161423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1615edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1616265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1617a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 161833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 161933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 162033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 16211cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 16221cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 16231cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 162423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("ping"), string::npos); 16251cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 16261cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 16271cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, LastPingDayUpdateTest) { 16281cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // This test checks that the action updates the last ping day to now 162984c763cffce6778711792944387fadb760c55c8dDarin Petkov // minus 200 seconds with a slack of 5 seconds. Therefore, the test 16301cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // may fail if it runs for longer than 5 seconds. It shouldn't run 16311cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // that long though. 16321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t midnight = 16331cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromSeconds(200)).ToInternalValue(); 16341cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t midnight_slack = 16351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromSeconds(195)).ToInternalValue(); 16369c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 163733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(_, _)).Times(AnyNumber()); 163833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 16391cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, 16401cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov AllOf(Ge(midnight), Le(midnight_slack)))) 16411cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 16421cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, 16431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov AllOf(Ge(midnight), Le(midnight_slack)))) 16441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 16451cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 16461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 16478f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 16488f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 16491cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 165023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 165123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart elapsed_seconds=\"200\"/>" 16521cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 165323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1654edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1655265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1656a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 165733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 165833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 165933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 16601cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 16611cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL)); 16621cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 16631cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 16641cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, NoElapsedSecondsTest) { 16659c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 166633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(_, _)).Times(AnyNumber()); 166733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 16681cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 16691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 16701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 16711cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 16728f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 16738f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 16741cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 167523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 167623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart blah=\"200\"/>" 16771cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 167823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1679edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1680265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1681a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 168233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 168333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 168433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 16851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 16861cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL)); 16871cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 16881cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 16891cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, BadElapsedSecondsTest) { 16909c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 169133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(_, _)).Times(AnyNumber()); 169233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 16931cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 16941cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 16951cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 16961cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 16978f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 16988f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 16991cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 170023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 170123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart elapsed_seconds=\"x\"/>" 17021cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 170323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1704edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1705265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1706a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 170733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 170833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 170933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 17101cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 17111cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL)); 17121cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 17131cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 171484c763cffce6778711792944387fadb760c55c8dDarin PetkovTEST(OmahaRequestActionTest, NoUniqueIDTest) { 171584c763cffce6778711792944387fadb760c55c8dDarin Petkov vector<char> post_data; 171684c763cffce6778711792944387fadb760c55c8dDarin Petkov ASSERT_FALSE(TestUpdateCheck(NULL, // prefs 17178f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 17188f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 171984c763cffce6778711792944387fadb760c55c8dDarin Petkov kDefaultTestParams, 172084c763cffce6778711792944387fadb760c55c8dDarin Petkov "invalid xml>", 1721edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1722265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1723a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestXMLParseError, 172433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 172533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 172633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 172784c763cffce6778711792944387fadb760c55c8dDarin Petkov NULL, // response 172884c763cffce6778711792944387fadb760c55c8dDarin Petkov &post_data)); 172984c763cffce6778711792944387fadb760c55c8dDarin Petkov // convert post_data to string 173084c763cffce6778711792944387fadb760c55c8dDarin Petkov string post_str(&post_data[0], post_data.size()); 173184c763cffce6778711792944387fadb760c55c8dDarin Petkov EXPECT_EQ(post_str.find("machineid="), string::npos); 173284c763cffce6778711792944387fadb760c55c8dDarin Petkov EXPECT_EQ(post_str.find("userid="), string::npos); 173384c763cffce6778711792944387fadb760c55c8dDarin Petkov} 173484c763cffce6778711792944387fadb760c55c8dDarin Petkov 1735edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin PetkovTEST(OmahaRequestActionTest, NetworkFailureTest) { 1736edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 1737edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 1738edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov TestUpdateCheck(NULL, // prefs 17398f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 17408f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 1741edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kDefaultTestParams, 1742edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 1743edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 501, 1744265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1745a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen static_cast<ErrorCode>( 1746a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestHTTPResponseBase + 501), 174733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kDownloadError, 174833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 174933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<metrics::DownloadErrorCode>(501), 1750edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 1751edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov NULL)); 1752edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 1753edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 1754edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 1755edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin PetkovTEST(OmahaRequestActionTest, NetworkFailureBadHTTPCodeTest) { 1756edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 1757edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 1758edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov TestUpdateCheck(NULL, // prefs 17598f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 17608f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 1761edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kDefaultTestParams, 1762edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 1763edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 1500, 1764265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1765a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen static_cast<ErrorCode>( 1766a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestHTTPResponseBase + 999), 176733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kDownloadError, 176833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 176933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kHttpStatusOther, 1770edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 1771edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov NULL)); 1772edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 1773edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 1774edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 177534b5d86d057d450325dd06d35ae182ac6da306e4Jay SrinivasanTEST(OmahaRequestActionTest, TestUpdateFirstSeenAtGetsPersistedFirstTime) { 177634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaResponse response; 177734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaRequestParams params = kDefaultTestParams; 1778ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 1779ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta().FromDays(1)); 1780ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(false); 178134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 178234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan string prefs_dir; 1783a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 178434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &prefs_dir)); 178534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 178634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 178734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Prefs prefs; 178875039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 178934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan << "Failed to initialize preferences."; 179034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 179134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_FALSE(TestUpdateCheck( 179234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &prefs, // prefs 17938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 17948f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 179534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan params, 179634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 179734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "1.2.3.4", // version 179834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "http://more/info", 179934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "true", // prompt 180023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 180123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 180234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "HASH1234=", // checksum 180334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "false", // needs admin 180434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "123", // size 180534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "", // deadline 18068f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 1807639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 18088f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 18098f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 181034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan -1, 181134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan false, // ping_only 1812a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaUpdateDeferredPerPolicy, 181333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 181433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 181533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 181634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &response, 181734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan NULL)); 181834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 181934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan int64 timestamp = 0; 182034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateFirstSeenAt, ×tamp)); 182134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(timestamp > 0); 182234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan EXPECT_FALSE(response.update_exists); 1823968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 1824968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 1825968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 1826968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 1827968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa TestUpdateCheck(&prefs, // prefs 18288f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 18298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 1830968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params, 1831968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa GetUpdateResponse2(OmahaRequestParams::kAppId, 1832968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "1.2.3.4", // version 1833968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://more/info", 1834968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "true", // prompt 1835968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://code/base/", // dl url 1836968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "file.signed", // file name 1837968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "HASH1234=", // checksum 1838968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "false", // needs admin 1839968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "123", // size 1840968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "", // deadline 18418f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 1842639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 18438f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 18448f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 1845968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 1846968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 1847968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa kErrorCodeSuccess, 184833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 184933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 185033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 1851968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 1852968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa NULL)); 1853968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 185434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan} 185534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 185634b5d86d057d450325dd06d35ae182ac6da306e4Jay SrinivasanTEST(OmahaRequestActionTest, TestUpdateFirstSeenAtGetsUsedIfAlreadyPresent) { 185734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaResponse response; 185834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaRequestParams params = kDefaultTestParams; 1859ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 1860ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta().FromDays(1)); 1861ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(false); 186234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 186334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan string prefs_dir; 1864a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 186534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &prefs_dir)); 186634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 186734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 186834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Prefs prefs; 186975039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 187034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan << "Failed to initialize preferences."; 187134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 187234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan // Set the timestamp to a very old value such that it exceeds the 187334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan // waiting period set above. 187434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Time t1; 187534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Time::FromString("1/1/2012", &t1); 187634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(prefs.SetInt64(kPrefsUpdateFirstSeenAt, t1.ToInternalValue())); 187734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(TestUpdateCheck( 187834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &prefs, // prefs 18798f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 18808f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 188134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan params, 188234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 188334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "1.2.3.4", // version 188434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "http://more/info", 188534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "true", // prompt 188623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 188723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "file.signed", // file name 188834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "HASH1234=", // checksum 188934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "false", // needs admin 189034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "123", // size 189134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "", // deadline 18928f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 1893639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 18948f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 18958f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false), // disable_p2p_for sharing 189634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan -1, 189734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan false, // ping_only 1898a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeSuccess, 189933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 190033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 190133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 190234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &response, 190334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan NULL)); 190434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 190534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan EXPECT_TRUE(response.update_exists); 190634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 190734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan // Make sure the timestamp t1 is unchanged showing that it was reused. 190834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan int64 timestamp = 0; 190934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateFirstSeenAt, ×tamp)); 191034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(timestamp == t1.ToInternalValue()); 191134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan} 191234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 1913ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST(OmahaRequestActionTest, TestChangingToMoreStableChannel) { 1914eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold // Create a uniquely named test directory. 1915eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold string test_dir; 1916eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::MakeTempDirectory( 1917eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold "omaha_request_action-test-XXXXXX", &test_dir)); 1918eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 1919eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc")); 1920eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + 1921be45bef9e283188b00e7def8967f81843669a7f1Chris Sosa kStatefulPartition + "/etc")); 1922ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan vector<char> post_data; 1923ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan NiceMock<PrefsMock> prefs; 1924ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 1925eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + "/etc/lsb-release", 1926ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_APPID={11111111-1111-1111-1111-111111111111}\n" 1927ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_BOARD_APPID={22222222-2222-2222-2222-222222222222}\n" 1928ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=canary-channel\n")); 1929ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 1930eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + kStatefulPartition + "/etc/lsb-release", 1931ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_IS_POWERWASH_ALLOWED=true\n" 1932ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=stable-channel\n")); 1933ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams params = kDefaultTestParams; 1934d04f8e24716d5acca6a7d116b63851adc1506845Gilad Arnold params.set_root(test_dir); 1935ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.SetLockDown(false); 1936ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.Init("1.2.3.4", "", 0); 1937ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("canary-channel", params.current_channel()); 1938ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("stable-channel", params.target_channel()); 1939ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params.to_more_stable_channel()); 1940ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params.is_powerwash_allowed()); 1941ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_FALSE(TestUpdateCheck(&prefs, 19428f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 19438f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 1944ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params, 1945ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "invalid xml>", 1946ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan -1, 1947ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan false, // ping_only 1948a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestXMLParseError, 194933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 195033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 195133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 1952ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan NULL, // response 1953ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan &post_data)); 1954ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // convert post_data to string 1955ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan string post_str(&post_data[0], post_data.size()); 1956ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_NE(string::npos, post_str.find( 1957ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "appid=\"{22222222-2222-2222-2222-222222222222}\" " 1958ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "version=\"0.0.0.0\" from_version=\"1.2.3.4\" " 1959ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "track=\"stable-channel\" from_track=\"canary-channel\" ")); 1960eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 1961eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::RecursiveUnlinkDir(test_dir)); 1962ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan} 1963ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 1964ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST(OmahaRequestActionTest, TestChangingToLessStableChannel) { 1965eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold // Create a uniquely named test directory. 1966eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold string test_dir; 1967eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::MakeTempDirectory( 1968eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold "omaha_request_action-test-XXXXXX", &test_dir)); 1969eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 1970eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc")); 1971eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + 1972be45bef9e283188b00e7def8967f81843669a7f1Chris Sosa kStatefulPartition + "/etc")); 1973ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan vector<char> post_data; 1974ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan NiceMock<PrefsMock> prefs; 1975ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 1976eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + "/etc/lsb-release", 1977ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_APPID={11111111-1111-1111-1111-111111111111}\n" 1978ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_BOARD_APPID={22222222-2222-2222-2222-222222222222}\n" 1979ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=stable-channel\n")); 1980ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 1981eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + kStatefulPartition + "/etc/lsb-release", 1982ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=canary-channel\n")); 1983ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams params = kDefaultTestParams; 1984d04f8e24716d5acca6a7d116b63851adc1506845Gilad Arnold params.set_root(test_dir); 1985ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.SetLockDown(false); 1986ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.Init("5.6.7.8", "", 0); 1987ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("stable-channel", params.current_channel()); 1988ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("canary-channel", params.target_channel()); 1989ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params.to_more_stable_channel()); 1990ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params.is_powerwash_allowed()); 1991ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_FALSE(TestUpdateCheck(&prefs, 19928f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 19938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 1994ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params, 1995ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "invalid xml>", 1996ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan -1, 1997ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan false, // ping_only 1998a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen kErrorCodeOmahaRequestXMLParseError, 199933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 200033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 200133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 2002ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan NULL, // response 2003ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan &post_data)); 2004ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // convert post_data to string 2005ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan string post_str(&post_data[0], post_data.size()); 2006ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_NE(string::npos, post_str.find( 2007ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "appid=\"{11111111-1111-1111-1111-111111111111}\" " 2008ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "version=\"5.6.7.8\" " 2009ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "track=\"canary-channel\" from_track=\"stable-channel\"")); 2010ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ(string::npos, post_str.find( "from_version")); 2011eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 2012eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::RecursiveUnlinkDir(test_dir)); 2013ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan} 2014ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 20158f191b22a1a1ab2b803d65ee488729206e648695David Zeuthenvoid P2PTest(bool initial_allow_p2p_for_downloading, 20168f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool initial_allow_p2p_for_sharing, 20178f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool omaha_disable_p2p_for_downloading, 20188f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool omaha_disable_p2p_for_sharing, 20198f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool payload_state_allow_p2p_attempt, 20208f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool expect_p2p_client_lookup, 20218f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen const string& p2p_client_result_url, 20228f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool expected_allow_p2p_for_downloading, 20238f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool expected_allow_p2p_for_sharing, 20248f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen const string& expected_p2p_url) { 20258f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen OmahaResponse response; 20268f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen OmahaRequestParams request_params = kDefaultTestParams; 20278f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen request_params.set_use_p2p_for_downloading(initial_allow_p2p_for_downloading); 20288f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen request_params.set_use_p2p_for_sharing(initial_allow_p2p_for_sharing); 20298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 20308f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen MockPayloadState mock_payload_state; 20318f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_CALL(mock_payload_state, P2PAttemptAllowed()) 20328f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen .WillRepeatedly(Return(payload_state_allow_p2p_attempt)); 20338f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen MockP2PManager mock_p2p_manager; 20348f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen mock_p2p_manager.fake().SetLookupUrlForFileResult(p2p_client_result_url); 20358f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 20364cc5ed215180d19598d8b99f0a8a15cc24b831fcDavid Zeuthen TimeDelta timeout = TimeDelta::FromSeconds(kMaxP2PNetworkWaitTimeSeconds); 20374cc5ed215180d19598d8b99f0a8a15cc24b831fcDavid Zeuthen EXPECT_CALL(mock_p2p_manager, LookupUrlForFile(_, _, timeout, _)) 20388f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen .Times(expect_p2p_client_lookup ? 1 : 0); 20398f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 20408f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen ASSERT_TRUE( 20418f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen TestUpdateCheck(NULL, // prefs 20428f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen &mock_payload_state, 20438f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen &mock_p2p_manager, 20448f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen request_params, 20458f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen GetUpdateResponse2(OmahaRequestParams::kAppId, 20468f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "1.2.3.4", // version 20478f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "http://more/info", 20488f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "true", // prompt 20498f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "http://code/base/", // dl url 20508f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "file.signed", // file name 20518f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "HASH1234=", // checksum 20528f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "false", // needs admin 20538f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "123", // size 20548f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "", // deadline 20558f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", // max days to scatter 2056639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "42", // elapsed_days 20578f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen omaha_disable_p2p_for_downloading, 20588f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen omaha_disable_p2p_for_sharing), 20598f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen -1, 20608f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // ping_only 20618f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen kErrorCodeSuccess, 206233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 206333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 206433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 20658f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen &response, 20668f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL)); 20678f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_TRUE(response.update_exists); 20688f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 20698f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(response.disable_p2p_for_downloading, 20708f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen omaha_disable_p2p_for_downloading); 20718f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(response.disable_p2p_for_sharing, 20728f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen omaha_disable_p2p_for_sharing); 20738f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 20748f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(request_params.use_p2p_for_downloading(), 20758f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen expected_allow_p2p_for_downloading); 20768f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 20778f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(request_params.use_p2p_for_sharing(), 20788f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen expected_allow_p2p_for_sharing); 20798f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 20808f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(request_params.p2p_url(), expected_p2p_url); 20818f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 20828f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 20838f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithPeer) { 20848f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen P2PTest(true, // initial_allow_p2p_for_downloading 20858f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // initial_allow_p2p_for_sharing 20868f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // omaha_disable_p2p_for_downloading 20878f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // omaha_disable_p2p_for_sharing 20888f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // payload_state_allow_p2p_attempt 20898f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // expect_p2p_client_lookup 20908f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "http://1.3.5.7/p2p", // p2p_client_result_url 20918f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // expected_allow_p2p_for_downloading 20928f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // expected_allow_p2p_for_sharing 20938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "http://1.3.5.7/p2p"); // expected_p2p_url 20948f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 20958f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 20968f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithoutPeer) { 20978f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen P2PTest(true, // initial_allow_p2p_for_downloading 20988f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // initial_allow_p2p_for_sharing 20998f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // omaha_disable_p2p_for_downloading 21008f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // omaha_disable_p2p_for_sharing 21018f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // payload_state_allow_p2p_attempt 21028f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // expect_p2p_client_lookup 21038f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "", // p2p_client_result_url 21048f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // expected_allow_p2p_for_downloading 21058f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // expected_allow_p2p_for_sharing 21068f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen ""); // expected_p2p_url 21078f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 21088f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 21098f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PDownloadNotAllowed) { 21108f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen P2PTest(false, // initial_allow_p2p_for_downloading 21118f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // initial_allow_p2p_for_sharing 21128f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // omaha_disable_p2p_for_downloading 21138f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // omaha_disable_p2p_for_sharing 21148f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // payload_state_allow_p2p_attempt 21158f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // expect_p2p_client_lookup 21168f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "unset", // p2p_client_result_url 21178f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // expected_allow_p2p_for_downloading 21188f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // expected_allow_p2p_for_sharing 21198f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen ""); // expected_p2p_url 21208f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 21218f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 21228f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithPeerDownloadDisabledByOmaha) { 21238f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen P2PTest(true, // initial_allow_p2p_for_downloading 21248f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // initial_allow_p2p_for_sharing 21258f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // omaha_disable_p2p_for_downloading 21268f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // omaha_disable_p2p_for_sharing 21278f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // payload_state_allow_p2p_attempt 21288f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // expect_p2p_client_lookup 21298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "unset", // p2p_client_result_url 21308f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // expected_allow_p2p_for_downloading 21318f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // expected_allow_p2p_for_sharing 21328f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen ""); // expected_p2p_url 21338f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 21348f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 21358f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithPeerSharingDisabledByOmaha) { 21368f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen P2PTest(true, // initial_allow_p2p_for_downloading 21378f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // initial_allow_p2p_for_sharing 21388f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // omaha_disable_p2p_for_downloading 21398f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // omaha_disable_p2p_for_sharing 21408f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // payload_state_allow_p2p_attempt 21418f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // expect_p2p_client_lookup 21428f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "http://1.3.5.7/p2p", // p2p_client_result_url 21438f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // expected_allow_p2p_for_downloading 21448f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // expected_allow_p2p_for_sharing 21458f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "http://1.3.5.7/p2p"); // expected_p2p_url 21468f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 21478f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 21488f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithPeerBothDisabledByOmaha) { 21498f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen P2PTest(true, // initial_allow_p2p_for_downloading 21508f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // initial_allow_p2p_for_sharing 21518f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // omaha_disable_p2p_for_downloading 21528f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // omaha_disable_p2p_for_sharing 21538f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // payload_state_allow_p2p_attempt 21548f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // expect_p2p_client_lookup 21558f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "unset", // p2p_client_result_url 21568f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // expected_allow_p2p_for_downloading 21578f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // expected_allow_p2p_for_sharing 21588f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen ""); // expected_p2p_url 21598f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 21608f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 2161639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthenbool InstallDateParseHelper(const std::string &elapsed_days, 2162639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen PrefsInterface* prefs, 2163639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen OmahaResponse *response) { 2164639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen return 2165639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen TestUpdateCheck(prefs, 2166639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NULL, // payload_state 2167639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NULL, // p2p_manager 2168639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen kDefaultTestParams, 2169639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen GetUpdateResponse2(OmahaRequestParams::kAppId, 2170639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "1.2.3.4", // version 2171639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "http://more/info", 2172639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "true", // prompt 2173639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "http://code/base/", // dl url 2174639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "file.signed", // file name 2175639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "HASH1234=", // checksum 2176639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "false", // needs admin 2177639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "123", // size 2178639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "", // deadline 2179639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "7", // max days to scatter 2180639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen elapsed_days, 2181639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen false, // disable_p2p_for_downloading 2182639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen false), // disable_p2p_for sharing 2183639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen -1, 2184639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen false, // ping_only 2185639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen kErrorCodeSuccess, 218633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 218733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 218833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 2189639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen response, 2190639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NULL); 2191639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen} 2192639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2193639aa36fc7e27ba400402cd7a32b091f555783a6David ZeuthenTEST(OmahaRequestActionTest, ParseInstallDateFromResponse) { 2194639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen OmahaResponse response; 2195639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen string temp_dir; 2196639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Prefs prefs; 2197639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(utils::MakeTempDirectory("ParseInstallDateFromResponse.XXXXXX", 2198639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen &temp_dir)); 219975039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko prefs.Init(base::FilePath(temp_dir)); 2200639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2201639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Check that we parse elapsed_days in the Omaha Response correctly. 2202639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // and that the kPrefsInstallDateDays value is written to. 2203639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_FALSE(prefs.Exists(kPrefsInstallDateDays)); 2204639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(InstallDateParseHelper("42", &prefs, &response)); 2205639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2206639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(42, response.install_date_days); 2207639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.Exists(kPrefsInstallDateDays)); 2208639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen int64_t prefs_days; 2209639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2210639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 42); 2211639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2212639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // If there already is a value set, we shouldn't do anything. 2213639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(InstallDateParseHelper("7", &prefs, &response)); 2214639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2215639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(7, response.install_date_days); 2216639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2217639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 42); 2218639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2219639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Note that elapsed_days is not necessarily divisible by 7 so check 2220639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // that we round down correctly when populating kPrefsInstallDateDays. 2221639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.Delete(kPrefsInstallDateDays)); 2222639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(InstallDateParseHelper("23", &prefs, &response)); 2223639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2224639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(23, response.install_date_days); 2225639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2226639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 21); 2227639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2228639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Check that we correctly handle elapsed_days not being included in 2229639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // the Omaha Response. 2230639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(InstallDateParseHelper("", &prefs, &response)); 2231639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2232639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(-1, response.install_date_days); 2233639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2234639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(utils::RecursiveUnlinkDir(temp_dir)); 2235639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen} 2236639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2237639aa36fc7e27ba400402cd7a32b091f555783a6David ZeuthenTEST(OmahaRequestActionTest, GetInstallDate) { 2238639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen string temp_dir; 2239639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Prefs prefs; 2240639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(utils::MakeTempDirectory("GetInstallDate.XXXXXX", 2241639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen &temp_dir)); 224275039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko prefs.Init(base::FilePath(temp_dir)); 2243639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2244639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // If there is no prefs and OOBE is not complete, we should not 2245639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // report anything to Omaha. 2246639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen { 2247639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NiceMock<MockSystemState> system_state; 2248639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen system_state.set_prefs(&prefs); 2249639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(OmahaRequestAction::GetInstallDate(&system_state), -1); 2250639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_FALSE(prefs.Exists(kPrefsInstallDateDays)); 2251639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen } 2252639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2253639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // If OOBE is complete and happened on a valid date (e.g. after Jan 2254639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // 1 2007 0:00 PST), that date should be used and written to 2255639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // prefs. However, first try with an invalid date and check we do 2256639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // nothing. 2257639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen { 2258639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NiceMock<MockSystemState> system_state; 2259639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen system_state.set_prefs(&prefs); 2260639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2261639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Time oobe_date = Time::FromTimeT(42); // Dec 31, 1969 16:00:42 PST. 2262639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(system_state, 2263639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen IsOOBEComplete(_)) 2264639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillRepeatedly(DoAll(SetArgumentPointee<0>(oobe_date), 2265639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Return(true))); 2266639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(OmahaRequestAction::GetInstallDate(&system_state), -1); 2267639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_FALSE(prefs.Exists(kPrefsInstallDateDays)); 2268639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen } 2269639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2270639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Then check with a valid date. The date Jan 20, 2007 0:00 PST 2271639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // should yield an InstallDate of 14. 2272639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen { 2273639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NiceMock<MockSystemState> system_state; 2274639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen system_state.set_prefs(&prefs); 2275639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2276639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Time oobe_date = Time::FromTimeT(1169280000); // Jan 20, 2007 0:00 PST. 2277639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(system_state, 2278639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen IsOOBEComplete(_)) 2279639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillRepeatedly(DoAll(SetArgumentPointee<0>(oobe_date), 2280639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Return(true))); 2281639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(OmahaRequestAction::GetInstallDate(&system_state), 14); 2282639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.Exists(kPrefsInstallDateDays)); 2283639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2284639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen int64_t prefs_days; 2285639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2286639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 14); 2287639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen } 2288639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2289639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Now that we have a valid date in prefs, check that we keep using 2290639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // that even if OOBE date reports something else. The date Jan 30, 2291639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // 2007 0:00 PST should yield an InstallDate of 28... but since 2292639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // there's a prefs file, we should still get 14. 2293639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen { 2294639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NiceMock<MockSystemState> system_state; 2295639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen system_state.set_prefs(&prefs); 2296639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2297639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Time oobe_date = Time::FromTimeT(1170144000); // Jan 30, 2007 0:00 PST. 2298639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(system_state, 2299639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen IsOOBEComplete(_)) 2300639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillRepeatedly(DoAll(SetArgumentPointee<0>(oobe_date), 2301639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Return(true))); 2302639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(OmahaRequestAction::GetInstallDate(&system_state), 14); 2303639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2304639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen int64_t prefs_days; 2305639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2306639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 14); 2307639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2308639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // If we delete the prefs file, we should get 28 days. 2309639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.Delete(kPrefsInstallDateDays)); 2310639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(OmahaRequestAction::GetInstallDate(&system_state), 28); 2311639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2312639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 28); 2313639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen } 2314639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2315639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(utils::RecursiveUnlinkDir(temp_dir)); 2316639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen} 2317639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 23186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} // namespace chromeos_update_engine 2319