omaha_request_action_unittest.cc revision f3e2801f18bae14e41099e007de7c9a019735556
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 59abb763fa3840d69cc1098c0233162557a7f99eaBen Chan#include <glib.h> 69abb763fa3840d69cc1098c0233162557a7f99eaBen Chan#include <stdint.h> 79abb763fa3840d69cc1098c0233162557a7f99eaBen Chan 86a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <string> 96a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <vector> 100dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 1175039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/strings/string_util.h> 1275039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/strings/stringprintf.h> 1375039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/time/time.h> 1477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa#include <chromeos/dbus/service_constants.h> 150dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov#include "gtest/gtest.h" 16d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasan 176a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/action_pipe.h" 18d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasan#include "update_engine/constants.h" 1977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa#include "update_engine/mock_connection_manager.h" 206a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/mock_http_fetcher.h" 216a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/omaha_hash_calculator.h" 226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/omaha_request_action.h" 23a4a8a8ccc2d9e0285728ed247b43f09433e63323Darin Petkov#include "update_engine/omaha_request_params.h" 24480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan#include "update_engine/prefs.h" 256a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/test_utils.h" 26480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan#include "update_engine/utils.h" 276a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 281cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing base::Time; 291cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing base::TimeDelta; 306a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovusing std::string; 316a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovusing std::vector; 321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::_; 331cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::AllOf; 3434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasanusing testing::DoAll; 351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Ge; 361cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Le; 379c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkovusing testing::NiceMock; 381cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Return; 391cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::SetArgumentPointee; 4033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthenusing testing::AnyNumber; 416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace chromeos_update_engine { 436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 44ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasanclass OmahaRequestActionTest : public ::testing::Test {}; 456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 466a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace { 47480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 485bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad ArnoldFakeSystemState fake_system_state; 49480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanOmahaRequestParams kDefaultTestParams( 505bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold &fake_system_state, 511cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestParams::kOsPlatform, 521cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestParams::kOsVersion, 531cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "service_pack", 541cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "x86-generic", 551cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestParams::kAppId, 561cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "0.1.0.0", 571cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "en-US", 581cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "unittest", 59fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "OEM MODEL 09235 7471", 60c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 61c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "0X0A1", 62d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // delta okay 63d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // interactive 640a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://url", 65d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // update_disabled 66d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "", // target_version_prefix 67d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // use_p2p_for_downloading 68d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false); // use_p2p_for_sharing 691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 706a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovstring GetNoUpdateResponse(const string& app_id) { 716a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return string( 7223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 7323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 7423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"") + app_id + "\" status=\"ok\"><ping " 7523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "status=\"ok\"/><updatecheck status=\"noupdate\"/></app></response>"; 766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 776a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 78f3e2801f18bae14e41099e007de7c9a019735556David Zeuthenstring GetNoUpdateResponseWithEntity(const string& app_id) { 79f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen return string( 80f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" 81f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen "<!DOCTYPE response [" 82f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen "<!ENTITY CrOS \"ChromeOS\">" 83f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen "]>" 84f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen "<response protocol=\"3.0\">" 85f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen "<daystart elapsed_seconds=\"100\"/>" 86f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen "<app appid=\"") + app_id + "\" status=\"ok\"><ping " 87f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen "status=\"ok\"/><updatecheck status=\"noupdate\"/></app></response>"; 88f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen} 89f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen 90480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasanstring GetUpdateResponse2(const string& app_id, 913b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa const string& version, 92480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& more_info_url, 93480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& prompt, 94480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& codebase, 9523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan const string& filename, 96480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& hash, 97480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& needsadmin, 98480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& size, 99480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& deadline, 1008f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen const string& max_days_to_scatter, 101639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen const string& elapsed_days, 1028f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool disable_p2p_for_downloading, 1038f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool disable_p2p_for_sharing) { 10423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan string response = 10523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 10623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\">" 107639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "<daystart elapsed_seconds=\"100\"" + 108639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen (elapsed_days.empty() ? "" : (" elapsed_days=\"" + elapsed_days + "\"")) + 109639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "/>" 11023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"" + app_id + "\" status=\"ok\">" 11123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/><updatecheck status=\"ok\">" 11223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<urls><url codebase=\"" + codebase + "\"/></urls>" 1133b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa "<manifest version=\"" + version + "\">" 11423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<packages><package hash=\"not-used\" name=\"" + filename + "\" " 11523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "size=\"" + size + "\"/></packages>" 11623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<actions><action event=\"postinstall\" " 1173b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa "ChromeOSVersion=\"" + version + "\" " 1186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "MoreInfo=\"" + more_info_url + "\" Prompt=\"" + prompt + "\" " 1193270f7411f55b872db385d0edffdfed18a684121Andrew de los Reyes "IsDelta=\"true\" " 120d671e97c8cc87c71a01ee3e4a889753ea9bec35fJay Srinivasan "IsDeltaPayload=\"true\" " 121480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "MaxDaysToScatter=\"" + max_days_to_scatter + "\" " 122480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "sha256=\"" + hash + "\" " 12323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "needsadmin=\"" + needsadmin + "\" " + 124480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan (deadline.empty() ? "" : ("deadline=\"" + deadline + "\" ")) + 1258f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen (disable_p2p_for_downloading ? 1268f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "DisableP2PForDownloading=\"true\" " : "") + 1278f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen (disable_p2p_for_sharing ? "DisableP2PForSharing=\"true\" " : "") + 12823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "/></actions></manifest></updatecheck></app></response>"; 12923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan LOG(INFO) << "Response = " << response; 13023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan return response; 131480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 132480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 133480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasanstring GetUpdateResponse(const string& app_id, 1343b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa const string& version, 135480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& more_info_url, 136480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& prompt, 137480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& codebase, 13823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan const string& filename, 139480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& hash, 140480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& needsadmin, 141480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& size, 142480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan const string& deadline) { 143480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan return GetUpdateResponse2(app_id, 1443b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa version, 145480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan more_info_url, 146480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan prompt, 147480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan codebase, 14823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan filename, 149480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan hash, 150480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan needsadmin, 151480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan size, 152480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan deadline, 1538f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "7", 154d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 155d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // disable_p2p_for_downloading 156d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false); // disable_p2p_for sharing 1576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 1586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OmahaRequestActionTestProcessorDelegate : public ActionProcessorDelegate { 1606a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 1616a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate() 1626a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov : loop_(NULL), 163d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold expected_code_(ErrorCode::kSuccess) {} 1646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov virtual ~OmahaRequestActionTestProcessorDelegate() { 1656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 166c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov virtual void ProcessingDone(const ActionProcessor* processor, 167a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen ErrorCode code) { 1686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE(loop_); 1696a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_quit(loop_); 1706a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 1716a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1726a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov virtual void ActionCompleted(ActionProcessor* processor, 1736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov AbstractAction* action, 174a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen ErrorCode code) { 1756a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // make sure actions always succeed 1766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (action->Type() == OmahaRequestAction::StaticType()) 177c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov EXPECT_EQ(expected_code_, code); 1786a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov else 179d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold EXPECT_EQ(ErrorCode::kSuccess, code); 1806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 1816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop_; 182a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen ErrorCode expected_code_; 1836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 1846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovgboolean StartProcessorInRunLoop(gpointer data) { 1866a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor *processor = reinterpret_cast<ActionProcessor*>(data); 1876a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StartProcessing(); 1886a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return FALSE; 1896a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 190d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko} // namespace 1916a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1926a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OutputObjectCollectorAction; 1936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovtemplate<> 1956a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass ActionTraits<OutputObjectCollectorAction> { 1966a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 1976a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Does not take an object for input 1986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov typedef OmahaResponse InputObjectType; 1996a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // On success, puts the output path on output 2006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov typedef NoneType OutputObjectType; 2016a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 2026a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2036a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OutputObjectCollectorAction : public Action<OutputObjectCollectorAction> { 2046a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 2056a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OutputObjectCollectorAction() : has_input_object_(false) {} 2066a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void PerformAction() { 2076a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // copy input object 2086a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov has_input_object_ = HasInputObject(); 2096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (has_input_object_) 2106a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov omaha_response_ = GetInputObject(); 211d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold processor_->ActionComplete(this, ErrorCode::kSuccess); 2126a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 2136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Should never be called 2146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void TerminateProcessing() { 2156a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov CHECK(false); 2166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 2176a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Debugging/logging 2186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov static std::string StaticType() { 2196a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return "OutputObjectCollectorAction"; 2206a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 2216a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov std::string Type() const { return StaticType(); } 2226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov bool has_input_object_; 2236a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse omaha_response_; 2246a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 2256a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2261cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov// Returns true iff an output response was obtained from the 227edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov// OmahaRequestAction. |prefs| may be NULL, in which case a local PrefsMock is 2288f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// used. |payload_state| may be NULL, in which case a local mock is used. 2298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// |p2p_manager| may be NULL, in which case a local mock is used. 23077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa// |connection_manager| may be NULL, in which case a local mock is used. 2318f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen// out_response may be NULL. If |fail_http_response_code| is non-negative, 232265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov// the transfer will fail with that code. |ping_only| is passed through to the 233265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov// OmahaRequestAction constructor. out_post_data may be null; if non-null, the 234265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov// post-data received by the mock HttpFetcher is returned. 23533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// 23633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// The |expected_check_result|, |expected_check_reaction| and 23733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// |expected_error_code| parameters are for checking expectations 23833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// about reporting UpdateEngine.Check.{Result,Reaction,DownloadError} 23933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// UMA statistics. Use the appropriate ::kUnset value to specify that 24033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen// the given metric should not be reported. 2411cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovbool TestUpdateCheck(PrefsInterface* prefs, 2428f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen PayloadStateInterface *payload_state, 2438f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen P2PManager *p2p_manager, 24477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa ConnectionManager *connection_manager, 245d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko OmahaRequestParams* params, 2460dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov const string& http_response, 247edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov int fail_http_response_code, 248265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov bool ping_only, 249a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen ErrorCode expected_code, 25033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult expected_check_result, 25133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction expected_check_reaction, 25233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode expected_download_error_code, 2530dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaResponse* out_response, 2540dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char>* out_post_data) { 2550dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); 2560dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), 2574516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 2584516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL); 259edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov if (fail_http_response_code >= 0) { 260edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov fetcher->FailTransfer(fail_http_response_code); 261edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov } 2625bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 2636f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan if (prefs) 2645bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_prefs(prefs); 2658f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen if (payload_state) 2665bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_payload_state(payload_state); 2678f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen if (p2p_manager) 2685bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_p2p_manager(p2p_manager); 26977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa if (connection_manager) 27077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa fake_system_state.set_connection_manager(connection_manager); 271d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko fake_system_state.set_request_params(params); 2725bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestAction action(&fake_system_state, 2731cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 274116fda3221ff3df037ea1feb271883c87644c839Thieu Le fetcher, 275265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov ping_only); 2766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate delegate; 2776a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov delegate.loop_ = loop; 278c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov delegate.expected_code_ = expected_code; 279a4a8a8ccc2d9e0285728ed247b43f09433e63323Darin Petkov 2806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 2816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 2826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 2836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OutputObjectCollectorAction collector_action; 2856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov BondActions(&action, &collector_action); 2866a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&collector_action); 2876a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2885bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold EXPECT_CALL(*fake_system_state.mock_metrics_lib(), SendEnumToUMA(_, _, _)) 28933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 2905bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold EXPECT_CALL(*fake_system_state.mock_metrics_lib(), 29133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SendEnumToUMA(metrics::kMetricCheckResult, 29233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(expected_check_result), 29333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(metrics::CheckResult::kNumConstants) - 1)) 29433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(expected_check_result == metrics::CheckResult::kUnset ? 0 : 1); 2955bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold EXPECT_CALL(*fake_system_state.mock_metrics_lib(), 29633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SendEnumToUMA(metrics::kMetricCheckReaction, 29733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(expected_check_reaction), 29833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(metrics::CheckReaction::kNumConstants) - 1)) 29933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(expected_check_reaction == metrics::CheckReaction::kUnset ? 0 : 1); 3005bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold EXPECT_CALL(*fake_system_state.mock_metrics_lib(), 301c0dd0210d01406df4b88086ea1349a75b8fe0584David Zeuthen SendSparseToUMA(metrics::kMetricCheckDownloadErrorCode, 302c0dd0210d01406df4b88086ea1349a75b8fe0584David Zeuthen static_cast<int>(expected_download_error_code))) 30333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(expected_download_error_code == metrics::DownloadErrorCode::kUnset 30433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen ? 0 : 1); 30533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 3066a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_timeout_add(0, &StartProcessorInRunLoop, &processor); 3076a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_run(loop); 3086a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_unref(loop); 3096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (collector_action.has_input_object_ && out_response) 3106a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov *out_response = collector_action.omaha_response_; 3116a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (out_post_data) 3126a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov *out_post_data = fetcher->post_data(); 3136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return collector_action.has_input_object_; 3146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3156a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3160dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// Tests Event requests -- they should always succeed. |out_post_data| 3170dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// may be null; if non-null, the post-data received by the mock 3180dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// HttpFetcher is returned. 319480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasanvoid TestEvent(OmahaRequestParams params, 3200dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaEvent* event, 3210dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov const string& http_response, 3220dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char>* out_post_data) { 3230dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); 3240dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), 3254516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 3264516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL); 3275bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 3285bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_request_params(¶ms); 3295bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestAction action(&fake_system_state, event, fetcher, false); 3300dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestActionTestProcessorDelegate delegate; 3310dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov delegate.loop_ = loop; 3320dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ActionProcessor processor; 3330dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov processor.set_delegate(&delegate); 3340dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov processor.EnqueueAction(&action); 3350dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 3360dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov g_timeout_add(0, &StartProcessorInRunLoop, &processor); 3370dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov g_main_loop_run(loop); 3380dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov g_main_loop_unref(loop); 3390dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov if (out_post_data) 3400dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov *out_post_data = fetcher->post_data(); 3410dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 3420dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 343f3e2801f18bae14e41099e007de7c9a019735556David ZeuthenTEST(OmahaRequestActionTest, RejectEntities) { 344f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen OmahaResponse response; 345f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen ASSERT_FALSE( 346f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen TestUpdateCheck(NULL, // prefs 347f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen NULL, // payload_state 348f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen NULL, // p2p_manager 349f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen NULL, // connection_manager 350f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen &kDefaultTestParams, 351f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen GetNoUpdateResponseWithEntity(OmahaRequestParams::kAppId), 352f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen -1, 353f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen false, // ping_only 354f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen ErrorCode::kOmahaRequestXMLHasEntityDecl, 355f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen metrics::CheckResult::kParsingError, 356f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen metrics::CheckReaction::kUnset, 357f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen metrics::DownloadErrorCode::kUnset, 358f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen &response, 359f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen NULL)); 360f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen EXPECT_FALSE(response.update_exists); 361f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen} 362f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen 3636a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, NoUpdateTest) { 3646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 3656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 3661cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 3678f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 3688f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 36977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 370d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 3710dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 372edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 373265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 374d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 37533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 37633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 37733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 3780dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 3790dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 3806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 3816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3836a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, ValidUpdateTest) { 3846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 3856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 3861cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 3878f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 3888f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 38977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 390d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 3910dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetUpdateResponse(OmahaRequestParams::kAppId, 3920dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "1.2.3.4", // version 3930dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "http://more/info", 3940dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "true", // prompt 39523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 396d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 3970dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "HASH1234=", // checksum 3980dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "false", // needs admin 3996c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "123", // size 4006c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "20101020"), // deadline 401edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 402265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 403d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 40433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 40533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 40633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 4070dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 4080dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 4096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.update_exists); 41034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan EXPECT_TRUE(response.update_exists); 4113b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa EXPECT_EQ("1.2.3.4", response.version); 4126f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan EXPECT_EQ("http://code/base/file.signed", response.payload_urls[0]); 4136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("http://more/info", response.more_info_url); 4146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("HASH1234=", response.hash); 4156a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(123, response.size); 4166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.prompt); 4176c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_EQ("20101020", response.deadline); 4186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 4196a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4200a70874c61118a2b276edc731ad890c6826be2beJay SrinivasanTEST(OmahaRequestActionTest, ValidUpdateBlockedByPolicyTest) { 4210a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaResponse response; 4220a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 423ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_disabled(true); 4240a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan ASSERT_FALSE( 4250a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan TestUpdateCheck(NULL, // prefs 4268f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 4278f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 42877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 429d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 4300a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan GetUpdateResponse(OmahaRequestParams::kAppId, 4310a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "1.2.3.4", // version 4320a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://more/info", 4330a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "true", // prompt 43423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 435d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 4360a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "HASH1234=", // checksum 4370a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "false", // needs admin 4380a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "123", // size 439480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ""), // deadline 4400a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan -1, 4410a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan false, // ping_only 442d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateIgnoredPerPolicy, 44333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 44433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kIgnored, 44533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 4460a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan &response, 4470a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan NULL)); 4480a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan EXPECT_FALSE(response.update_exists); 4490a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan} 4500a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 45177f79e876a77796fc248d099b6574f05bd23c954Chris SosaTEST(OmahaRequestActionTest, ValidUpdateBlockedByConnection) { 45277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa OmahaResponse response; 45377f79e876a77796fc248d099b6574f05bd23c954Chris Sosa // Set up a connection manager that doesn't allow a valid update over 45477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa // the current ethernet connection. 45577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa MockConnectionManager mock_cm(NULL); 456d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko EXPECT_CALL(mock_cm, GetConnectionProperties(_, _, _)) 45777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa .WillRepeatedly(DoAll(SetArgumentPointee<1>(kNetEthernet), 45877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa SetArgumentPointee<2>(NetworkTethering::kUnknown), 45977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa Return(true))); 46077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa EXPECT_CALL(mock_cm, IsUpdateAllowedOver(kNetEthernet, _)) 46177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa .WillRepeatedly(Return(false)); 46277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa EXPECT_CALL(mock_cm, StringForConnectionType(kNetEthernet)) 46377f79e876a77796fc248d099b6574f05bd23c954Chris Sosa .WillRepeatedly(Return(shill::kTypeEthernet)); 46477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 46577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa ASSERT_FALSE( 46677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa TestUpdateCheck(NULL, // prefs 46777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // payload_state 46877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // p2p_manager 469d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &mock_cm, // connection_manager 470d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 47177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa GetUpdateResponse(OmahaRequestParams::kAppId, 47277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "1.2.3.4", // version 47377f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "http://more/info", 47477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "true", // prompt 47577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "http://code/base/", // dl url 476d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 47777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "HASH1234=", // checksum 47877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "false", // needs admin 47977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "123", // size 48077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa ""), // deadline 48177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa -1, 48277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa false, // ping_only 483d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateIgnoredPerPolicy, 48477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::CheckResult::kUpdateAvailable, 48577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::CheckReaction::kIgnored, 48677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::DownloadErrorCode::kUnset, 48777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa &response, 48877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL)); 48977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa EXPECT_FALSE(response.update_exists); 49077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa} 49177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 49277f79e876a77796fc248d099b6574f05bd23c954Chris SosaTEST(OmahaRequestActionTest, ValidUpdateBlockedByRollback) { 49377f79e876a77796fc248d099b6574f05bd23c954Chris Sosa string rollback_version = "1234.0.0"; 49477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa OmahaResponse response; 49577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 49677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa MockPayloadState mock_payload_state; 49777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa EXPECT_CALL(mock_payload_state, GetRollbackVersion()) 49877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa .WillRepeatedly(Return(rollback_version)); 49977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 50077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa ASSERT_FALSE( 50177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa TestUpdateCheck(NULL, // prefs 50277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa &mock_payload_state, // payload_state 50377f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // p2p_manager 50477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 505d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 50677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa GetUpdateResponse(OmahaRequestParams::kAppId, 50777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa rollback_version, // version 50877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "http://more/info", 50977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "true", // prompt 51077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "http://code/base/", // dl url 511d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 51277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "HASH1234=", // checksum 51377f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "false", // needs admin 51477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa "123", // size 51577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa ""), // deadline 51677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa -1, 51777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa false, // ping_only 518d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateIgnoredPerPolicy, 51977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::CheckResult::kUpdateAvailable, 52077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::CheckReaction::kIgnored, 52177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::DownloadErrorCode::kUnset, 52277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa &response, 52377f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL)); 52477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa EXPECT_FALSE(response.update_exists); 52577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa} 52677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 5270a70874c61118a2b276edc731ad890c6826be2beJay SrinivasanTEST(OmahaRequestActionTest, NoUpdatesSentWhenBlockedByPolicyTest) { 5280a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaResponse response; 5290a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 530ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_disabled(true); 5310a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan ASSERT_TRUE( 5320a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan TestUpdateCheck(NULL, // prefs 5338f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 5348f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 53577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 536d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 5370a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan GetNoUpdateResponse(OmahaRequestParams::kAppId), 5380a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan -1, 5390a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan false, // ping_only 540d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 54133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 54233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 54333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 5440a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan &response, 5450a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan NULL)); 5460a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan EXPECT_FALSE(response.update_exists); 5470a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan} 5480a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 549480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, WallClockBasedWaitAloneCausesScattering) { 550480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 551480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 552ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 553ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(false); 554ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta::FromDays(2)); 555480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 556480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 557a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 558480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 559480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 560480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 561480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 56275039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 563480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 564480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 565480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_FALSE( 566480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan TestUpdateCheck(&prefs, // prefs 5678f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 5688f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 56977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 570d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 571480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 572480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 573480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 574480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 57523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 576d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 577480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 578480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 579480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 580480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 581d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 582d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 5838f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 584d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 585480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 586480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 587d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateDeferredPerPolicy, 58833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 58933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 59033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 591480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 592480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 593480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_FALSE(response.update_exists); 594968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 595968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 596968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 597968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 598968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa TestUpdateCheck(&prefs, // prefs 5998f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 6008f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 60177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 602d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 603968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa GetUpdateResponse2(OmahaRequestParams::kAppId, 604968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "1.2.3.4", // version 605968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://more/info", 606968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "true", // prompt 607968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://code/base/", // dl url 608d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 609968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "HASH1234=", // checksum 610968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "false", // needs admin 611968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "123", // size 612968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "", // deadline 613d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 614d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 6158f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 616d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 617968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 618968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 619d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 62033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 62133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 62233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 623968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 624968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa NULL)); 625968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 626480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 627480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 628480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, NoWallClockBasedWaitCausesNoScattering) { 629480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 630480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 631ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(false); 632ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta::FromDays(2)); 633480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 634ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 635ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 636ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 637480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 638480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 639a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 640480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 641480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 642480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 643480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 64475039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 645480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 646480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 647480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE( 648480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan TestUpdateCheck(&prefs, // prefs 6498f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 6508f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 65177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 652d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 653480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 654480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 655480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 656480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 65723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 658d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 659480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 660480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 661480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 662480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 663d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 664d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 6658f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 666d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 667480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 668480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 669d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 67033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 67133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 67233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 673480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 674480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 675480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_TRUE(response.update_exists); 676480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 677480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 678480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, ZeroMaxDaysToScatterCausesNoScattering) { 679480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 680480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 681ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 682ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta::FromDays(2)); 683480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 684ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 685ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 686ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 687480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 688480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 689a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 690480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 691480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 692480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 693480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 69475039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 695480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 696480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 697480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE( 698480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan TestUpdateCheck(&prefs, // prefs 6998f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 7008f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 70177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 702d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 703480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 704480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 705480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 706480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 70723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 708d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 709480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 710480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 711480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 712480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 713d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "0", // max days to scatter 714d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 7158f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 716d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 717480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 718480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 719d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 72033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 72133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 72233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 723480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 724480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 725480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_TRUE(response.update_exists); 726480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 727480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 728480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 729480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, ZeroUpdateCheckCountCausesNoScattering) { 730480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 731480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 732ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 733ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta()); 734480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 735ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 736ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(0); 737ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(0); 738480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 739480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 740a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 741480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 742480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 743480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 744480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 74575039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 746480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 747480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 748480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(TestUpdateCheck( 749480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs, // prefs 7508f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 7518f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 75277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 753d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 754480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 755480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 756480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 757480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 75823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 759d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 760480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 761480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 762480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 763480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 764d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 765d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 7668f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 767d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 768480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 769480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 770d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 77133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 77233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 77333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 774480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 775480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 776480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 7779abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t count; 778480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateCheckCount, &count)); 779d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ASSERT_EQ(count, 0); 780480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_TRUE(response.update_exists); 781480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 782480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 783480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, NonZeroUpdateCheckCountCausesScattering) { 784480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 785480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 786ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 787ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta()); 788480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 789ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 790ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 791ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 792480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 793480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 794a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 795480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 796480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 797480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 798480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 79975039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 800480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 801480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 802480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_FALSE(TestUpdateCheck( 803480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs, // prefs 8048f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 8058f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 80677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 807d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 808480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 809480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 810480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 811480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 81223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 813d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 814480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 815480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 816480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 817480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 818d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 819d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 8208f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 821d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 822480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 823480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 824d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateDeferredPerPolicy, 82533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 82633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 82733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 828480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 829480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 830480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 8319abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t count; 832480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateCheckCount, &count)); 833d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ASSERT_GT(count, 0); 834480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_FALSE(response.update_exists); 835968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 836968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 837968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 838968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 839968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa TestUpdateCheck(&prefs, // prefs 8408f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 8418f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 84277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 843d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 844968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa GetUpdateResponse2(OmahaRequestParams::kAppId, 845968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "1.2.3.4", // version 846968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://more/info", 847968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "true", // prompt 848968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://code/base/", // dl url 849d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 850968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "HASH1234=", // checksum 851968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "false", // needs admin 852968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "123", // size 853968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "", // deadline 854d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 855d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 8568f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 857d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 858968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 859968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 860d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 86133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 86233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 86333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 864968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 865968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa NULL)); 866968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 867480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 868480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 869480ddfa079ebd01ed87e495332dec121d9ae781fJay SrinivasanTEST(OmahaRequestActionTest, ExistingUpdateCheckCountCausesScattering) { 870480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 871480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 872ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 873ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta()); 874480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 875ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 876ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 877ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 878480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 879480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan string prefs_dir; 880a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 881480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs_dir)); 882480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 883480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 884480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan Prefs prefs; 88575039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 886480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan << "Failed to initialize preferences."; 887480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 888480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(prefs.SetInt64(kPrefsUpdateCheckCount, 5)); 889480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 890480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_FALSE(TestUpdateCheck( 891480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &prefs, // prefs 8928f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 8938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 89477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 895d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 896480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 897480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "1.2.3.4", // version 898480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "http://more/info", 899480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "true", // prompt 90023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 901d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 902480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "HASH1234=", // checksum 903480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "false", // needs admin 904480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "123", // size 905480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan "", // deadline 906d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 907d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 9088f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 909d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 910480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 911480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 912d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateDeferredPerPolicy, 91333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 91433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 91533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 916480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 917480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan NULL)); 918480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 9199abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t count; 920480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateCheckCount, &count)); 921480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan // count remains the same, as the decrementing happens in update_attempter 922480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan // which this test doesn't exercise. 923d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ASSERT_EQ(count, 5); 924480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_FALSE(response.update_exists); 925968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 926968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 927968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 928968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 929968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa TestUpdateCheck(&prefs, // prefs 9308f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 9318f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 93277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 933d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 934968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa GetUpdateResponse2(OmahaRequestParams::kAppId, 935968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "1.2.3.4", // version 936968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://more/info", 937968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "true", // prompt 938968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://code/base/", // dl url 939d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 940968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "HASH1234=", // checksum 941968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "false", // needs admin 942968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "123", // size 943968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "", // deadline 944d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 945d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 9468f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 947d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 948968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 949968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 950d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 95133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 95233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 95333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 954968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 955968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa NULL)); 956968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 957480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 9580a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 9596a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, NoOutputPipeTest) { 9606a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov const string http_response(GetNoUpdateResponse(OmahaRequestParams::kAppId)); 9616a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 9626a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); 9636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 9645bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 965480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 9665bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_request_params(¶ms); 9675bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestAction action(&fake_system_state, NULL, 9680dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 9694516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 970116fda3221ff3df037ea1feb271883c87644c839Thieu Le NULL), 971116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 9726a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate delegate; 9736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov delegate.loop_ = loop; 9746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 9756a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 9766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 9776a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 9786a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_timeout_add(0, &StartProcessorInRunLoop, &processor); 9796a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_run(loop); 9806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_unref(loop); 9816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(processor.IsRunning()); 9826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 9836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 9846a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, InvalidXmlTest) { 9856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 9866a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_FALSE( 9871cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 9888f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 9898f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 99077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 991d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 9920dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 993edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 994265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 995d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 99633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 99733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 99833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 999edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 1000edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov NULL)); 1001edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 1002edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 1003edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 1004edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin PetkovTEST(OmahaRequestActionTest, EmptyResponseTest) { 1005edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 1006edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 1007edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov TestUpdateCheck(NULL, // prefs 10088f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 10098f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 101077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1011d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 1012edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 1013edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1014265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1015d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestEmptyResponseError, 101633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 101733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 101833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 10190dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 10200dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 10216a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 10226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 10236a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10246a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, MissingStatusTest) { 10256a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 10260dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 10271cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // prefs 10288f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 10298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 103077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1031d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 103223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 103323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 103423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"foo\" status=\"ok\">" 103523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/>" 103623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck/></app></response>", 1037edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1038265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1039d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaResponseInvalid, 104033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 104133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 104233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 10436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 10446a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov NULL)); 10456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 10466a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 10476a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10486a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, InvalidStatusTest) { 10496a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 10500dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 10511cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // prefs 10528f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 10538f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 105477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1055d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 105623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 105723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 105823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"foo\" status=\"ok\">" 105923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/>" 106023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"InvalidStatusTest\"/></app></response>", 1061edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1062265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1063d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaResponseInvalid, 106433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 106533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 106633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 10676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 10686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov NULL)); 10696a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 10706a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 10716a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10726a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, MissingNodesetTest) { 10736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 10740dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 10751cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // prefs 10768f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 10778f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 107877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1079d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 108023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 108123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 108223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"foo\" status=\"ok\">" 108323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/>" 108423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "</app></response>", 1085edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1086265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1087d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaResponseInvalid, 108833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 108933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 109033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 10916a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 10926a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov NULL)); 10936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 10946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 10956a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10966a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, MissingFieldTest) { 109723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan string input_response = 109823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 109923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 110023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"xyz\" status=\"ok\">" 110123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"ok\">" 110223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<urls><url codebase=\"http://missing/field/test/\"/></urls>" 11033b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa "<manifest version=\"10.2.3.4\">" 110423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<packages><package hash=\"not-used\" name=\"f\" " 110523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "size=\"587\"/></packages>" 110623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<actions><action event=\"postinstall\" " 110723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "ChromeOSVersion=\"10.2.3.4\" " 110823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "Prompt=\"false\" " 110923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "IsDelta=\"true\" " 1110d671e97c8cc87c71a01ee3e4a889753ea9bec35fJay Srinivasan "IsDeltaPayload=\"false\" " 111123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "sha256=\"lkq34j5345\" " 111223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "needsadmin=\"true\" " 111323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "/></actions></manifest></updatecheck></app></response>"; 111423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan LOG(INFO) << "Input Response = " << input_response; 111523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan 11166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 11171cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE(TestUpdateCheck(NULL, // prefs 11188f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 11198f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 112077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1121d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 112223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan input_response, 1123edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1124265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1125d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 112633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 112733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 112833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 11290dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 11300dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 11316a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.update_exists); 11323b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa EXPECT_EQ("10.2.3.4", response.version); 11336f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan EXPECT_EQ("http://missing/field/test/f", response.payload_urls[0]); 11346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("", response.more_info_url); 113523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ("lkq34j5345", response.hash); 113623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(587, response.size); 11376a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.prompt); 11386c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_TRUE(response.deadline.empty()); 11396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 11406a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace { 11426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass TerminateEarlyTestProcessorDelegate : public ActionProcessorDelegate { 11436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 11446a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void ProcessingStopped(const ActionProcessor* processor) { 11456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE(loop_); 11466a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_quit(loop_); 11476a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 11486a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop_; 11496a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 11506a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11516a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovgboolean TerminateTransferTestStarter(gpointer data) { 11526a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor *processor = reinterpret_cast<ActionProcessor*>(data); 11536a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StartProcessing(); 11546a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov CHECK(processor->IsRunning()); 11556a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StopProcessing(); 11566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return FALSE; 11576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 1158d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko} // namespace 11596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11606a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, TerminateTransferTest) { 11616a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov string http_response("doesn't matter"); 11626a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); 11636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11645bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 1165480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 11665bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_request_params(¶ms); 11675bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestAction action(&fake_system_state, NULL, 11680dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 11694516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 1170116fda3221ff3df037ea1feb271883c87644c839Thieu Le NULL), 1171116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 11726a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov TerminateEarlyTestProcessorDelegate delegate; 11736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov delegate.loop_ = loop; 11746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 11756a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 11766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 11776a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11786a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_timeout_add(0, &TerminateTransferTestStarter, &processor); 11796a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_run(loop); 11806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_unref(loop); 11816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 11826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11836a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, XmlEncodeTest) { 11846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("ab", XmlEncode("ab")); 11856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("a<b", XmlEncode("a<b")); 11866a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("<&>", XmlEncode("<&>")); 11876a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("&lt;&amp;&gt;", XmlEncode("<&>")); 11886a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11896a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov vector<char> post_data; 11906a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11916a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Make sure XML Encode is being called on the params 11925bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 11935bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestParams params(&fake_system_state, 1194ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams::kOsPlatform, 11956a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestParams::kOsVersion, 11966a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "testtheservice_pack>", 11971cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "x86 generic<id", 11986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestParams::kAppId, 11996a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "0.1.0.0", 12006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "en-US", 12011cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "unittest_track<", 1202fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "<OEM MODEL>", 1203c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 1204c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "EC100", 1205d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // delta okay 1206d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // interactive 12070a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://url", 1208d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // update_disabled 1209d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "", // target_version_prefix 1210d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // use_p2p_for_downloading 1211d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false); // use_p2p_for_sharing 12126a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 12136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_FALSE( 12141cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 12158f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 12168f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 121777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1218d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 12190dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 1220edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1221265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1222d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 122333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 122433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 122533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 12260dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 12270dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &post_data)); 12286a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // convert post_data to string 12296a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov string post_str(&post_data[0], post_data.size()); 12306a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_NE(post_str.find("testtheservice_pack>"), string::npos); 12316a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(post_str.find("testtheservice_pack>"), string::npos); 12321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find("x86 generic<id"), string::npos); 12331cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_EQ(post_str.find("x86 generic<id"), string::npos); 12341cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find("unittest_track&lt;"), string::npos); 12351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_EQ(post_str.find("unittest_track<"), string::npos); 1236fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_NE(post_str.find("<OEM MODEL>"), string::npos); 1237fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_EQ(post_str.find("<OEM MODEL>"), string::npos); 12386a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 12396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 12406a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, XmlDecodeTest) { 12416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 12426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 12431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 12448f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 12458f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 124677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1247d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 12480dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetUpdateResponse(OmahaRequestParams::kAppId, 12490dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "1.2.3.4", // version 12500dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "testthe<url", // more info 12510dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "true", // prompt 125223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "testthe&codebase/", // dl url 1253d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 1254d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "HASH1234=", // checksum 12550dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "false", // needs admin 12566c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "123", // size 12576c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "<20110101"), // deadline 1258edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1259265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1260d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 126133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 126233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 126333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 12640dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 12650dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 12666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 12676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(response.more_info_url, "testthe<url"); 12686f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan EXPECT_EQ(response.payload_urls[0], "testthe&codebase/file.signed"); 12696c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_EQ(response.deadline, "<20110101"); 12706a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 12716a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 12726a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, ParseIntTest) { 12736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 12746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 12751cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 12768f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 12778f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 127877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1279d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 12800dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetUpdateResponse(OmahaRequestParams::kAppId, 12810dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "1.2.3.4", // version 12820dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "theurl", // more info 12830dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "true", // prompt 128423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "thecodebase/", // dl url 1285d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 1286d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "HASH1234=", // checksum 12870dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "false", // needs admin 12889abb763fa3840d69cc1098c0233162557a7f99eaBen Chan // overflows int32_t: 12896c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "123123123123123", // size 12906c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "deadline"), 1291edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1292265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1293d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 129433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 129533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 129633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 12970dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 12980dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 12996a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 13006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(response.size, 123123123123123ll); 13016a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 13026a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 13030dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin PetkovTEST(OmahaRequestActionTest, FormatUpdateCheckOutputTest) { 13040dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char> post_data; 130595508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov NiceMock<PrefsMock> prefs; 130695508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_CALL(prefs, GetString(kPrefsPreviousVersion, _)) 130795508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(string("")), Return(true))); 1308ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_CALL(prefs, SetString(kPrefsPreviousVersion, _)).Times(1); 130995508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov ASSERT_FALSE(TestUpdateCheck(&prefs, 13108f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 13118f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 131277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1313d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 13140dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 1315edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1316265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1317d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 131833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 131933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 132033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 13211cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // response 13220dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &post_data)); 13230dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov // convert post_data to string 13240dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string post_str(&post_data[0], post_data.size()); 1325116fda3221ff3df037ea1feb271883c87644c839Thieu Le EXPECT_NE(post_str.find( 132623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <ping active=\"1\" a=\"-1\" r=\"-1\"></ping>\n" 1327ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan " <updatecheck targetversionprefix=\"\"></updatecheck>\n"), 13280a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan string::npos); 1329fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_NE(post_str.find("hardware_class=\"OEM MODEL 09235 7471\""), 1330fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov string::npos); 1331c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("fw_version=\"ChromeOSFirmware.1.0\""), 1332c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 1333c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("ec_version=\"0X0A1\""), 1334c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 13350dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 13360dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 13370a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 1338ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST(OmahaRequestActionTest, FormatUpdateDisabledOutputTest) { 133995508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov vector<char> post_data; 134095508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov NiceMock<PrefsMock> prefs; 134195508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_CALL(prefs, GetString(kPrefsPreviousVersion, _)) 13420a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan .WillOnce(DoAll(SetArgumentPointee<1>(string("")), Return(true))); 1343ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_CALL(prefs, SetString(kPrefsPreviousVersion, _)).Times(1); 13440a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 1345ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_disabled(true); 134695508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov ASSERT_FALSE(TestUpdateCheck(&prefs, 13478f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 13488f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 134977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1350d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 135195508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov "invalid xml>", 135295508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov -1, 1353265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1354d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 135533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 135633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 135733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 135895508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov NULL, // response 135995508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov &post_data)); 136095508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov // convert post_data to string 136195508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov string post_str(&post_data[0], post_data.size()); 1362116fda3221ff3df037ea1feb271883c87644c839Thieu Le EXPECT_NE(post_str.find( 136323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <ping active=\"1\" a=\"-1\" r=\"-1\"></ping>\n" 1364ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan " <updatecheck targetversionprefix=\"\"></updatecheck>\n"), 13650a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan string::npos); 136695508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_NE(post_str.find("hardware_class=\"OEM MODEL 09235 7471\""), 136795508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov string::npos); 1368c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("fw_version=\"ChromeOSFirmware.1.0\""), 1369c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 1370c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("ec_version=\"0X0A1\""), 1371c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 137295508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov} 137395508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov 1374e17f86bae4299882232d3e6858ada68692e80501Darin PetkovTEST(OmahaRequestActionTest, FormatSuccessEventOutputTest) { 1375e17f86bae4299882232d3e6858ada68692e80501Darin Petkov vector<char> post_data; 13761cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestEvent(kDefaultTestParams, 1377e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeUpdateDownloadStarted), 1378e17f86bae4299882232d3e6858ada68692e80501Darin Petkov "invalid xml>", 1379e17f86bae4299882232d3e6858ada68692e80501Darin Petkov &post_data); 1380e17f86bae4299882232d3e6858ada68692e80501Darin Petkov // convert post_data to string 1381e17f86bae4299882232d3e6858ada68692e80501Darin Petkov string post_str(&post_data[0], post_data.size()); 138275039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko string expected_event = base::StringPrintf( 138323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <event eventtype=\"%d\" eventresult=\"%d\"></event>\n", 1384e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kTypeUpdateDownloadStarted, 1385e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultSuccess); 1386e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_NE(post_str.find(expected_event), string::npos); 138723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("ping"), string::npos); 138823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("updatecheck"), string::npos); 1389e17f86bae4299882232d3e6858ada68692e80501Darin Petkov} 1390e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1391e17f86bae4299882232d3e6858ada68692e80501Darin PetkovTEST(OmahaRequestActionTest, FormatErrorEventOutputTest) { 1392e17f86bae4299882232d3e6858ada68692e80501Darin Petkov vector<char> post_data; 13931cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestEvent(kDefaultTestParams, 1394e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeDownloadComplete, 1395e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 1396d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kError), 1397e17f86bae4299882232d3e6858ada68692e80501Darin Petkov "invalid xml>", 1398e17f86bae4299882232d3e6858ada68692e80501Darin Petkov &post_data); 1399e17f86bae4299882232d3e6858ada68692e80501Darin Petkov // convert post_data to string 1400e17f86bae4299882232d3e6858ada68692e80501Darin Petkov string post_str(&post_data[0], post_data.size()); 140175039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko string expected_event = base::StringPrintf( 140223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <event eventtype=\"%d\" eventresult=\"%d\" " 140323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "errorcode=\"%d\"></event>\n", 1404e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kTypeDownloadComplete, 1405e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 1406d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<int>(ErrorCode::kError)); 14070dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_NE(post_str.find(expected_event), string::npos); 140823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("updatecheck"), string::npos); 14090dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 14100dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 14110dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin PetkovTEST(OmahaRequestActionTest, IsEventTest) { 14120dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string http_response("doesn't matter"); 14135bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 1414480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaRequestParams params = kDefaultTestParams; 14155bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_request_params(¶ms); 14160dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestAction update_check_action( 14175bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold &fake_system_state, 14180dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL, 14190dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 14204516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 1421116fda3221ff3df037ea1feb271883c87644c839Thieu Le NULL), 1422116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 14230dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_FALSE(update_check_action.IsEvent()); 14240dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 1425480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan params = kDefaultTestParams; 14265bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_request_params(¶ms); 14270dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestAction event_action( 14285bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold &fake_system_state, 1429e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeUpdateComplete), 14300dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 14314516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 1432116fda3221ff3df037ea1feb271883c87644c839Thieu Le NULL), 1433116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 14340dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_TRUE(event_action.IsEvent()); 14350dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 14360dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 14373f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los ReyesTEST(OmahaRequestActionTest, FormatDeltaOkayOutputTest) { 14383f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes for (int i = 0; i < 2; i++) { 14393f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes bool delta_okay = i == 1; 14403f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes const char* delta_okay_str = delta_okay ? "true" : "false"; 14413f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes vector<char> post_data; 14425bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 14435bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestParams params(&fake_system_state, 1444ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams::kOsPlatform, 14453f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes OmahaRequestParams::kOsVersion, 14463f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "service_pack", 14473f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "x86-generic", 14483f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes OmahaRequestParams::kAppId, 14493f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "0.1.0.0", 14503f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "en-US", 14513f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "unittest_track", 1452fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "OEM MODEL REV 1234", 1453c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 1454c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "EC100", 14553f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes delta_okay, 1456bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold false, // interactive 14570a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://url", 14588f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // update_disabled 14598f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "", // target_version_prefix 14608f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // use_p2p_for_downloading 1461d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false); // use_p2p_for_sharing 14621cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_FALSE(TestUpdateCheck(NULL, // prefs 14638f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 14648f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 146577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1466d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 14673f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "invalid xml>", 1468edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1469265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1470d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 147133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 147233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 147333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 14743f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes NULL, 14753f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes &post_data)); 14763f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes // convert post_data to string 147775039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko string post_str(post_data.data(), post_data.size()); 147875039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko EXPECT_NE(post_str.find(base::StringPrintf(" delta_okay=\"%s\"", 147975039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko delta_okay_str)), 14803f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes string::npos) 14813f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes << "i = " << i; 14823f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes } 14833f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes} 14843f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes 1485bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad ArnoldTEST(OmahaRequestActionTest, FormatInteractiveOutputTest) { 1486bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold for (int i = 0; i < 2; i++) { 1487bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold bool interactive = i == 1; 14888a659d80dc1912c664ef16f0bc66acaa01bd8b73Gilad Arnold const char* interactive_str = interactive ? "ondemandupdate" : "scheduler"; 1489bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold vector<char> post_data; 14905bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 14915bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold OmahaRequestParams params(&fake_system_state, 1492ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams::kOsPlatform, 1493bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold OmahaRequestParams::kOsVersion, 1494bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "service_pack", 1495bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "x86-generic", 1496bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold OmahaRequestParams::kAppId, 1497bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "0.1.0.0", 1498bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "en-US", 1499bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "unittest_track", 1500bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "OEM MODEL REV 1234", 1501c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 1502c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "EC100", 15038f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // delta_okay 1504bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold interactive, 1505bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "http://url", 15068f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // update_disabled 15078f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "", // target_version_prefix 15088f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // use_p2p_for_downloading 1509d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false); // use_p2p_for_sharing 1510bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold ASSERT_FALSE(TestUpdateCheck(NULL, // prefs 15118f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 15128f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 151377f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1514d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 1515bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "invalid xml>", 1516bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold -1, 1517bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold false, // ping_only 1518d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 151933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 152033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 152133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 1522bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold NULL, 1523bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold &post_data)); 1524bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold // convert post_data to string 1525bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold string post_str(&post_data[0], post_data.size()); 152675039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko EXPECT_NE(post_str.find(base::StringPrintf("installsource=\"%s\"", 152775039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko interactive_str)), 1528bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold string::npos) 1529bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold << "i = " << i; 1530bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold } 1531bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold} 1532bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold 1533e17f86bae4299882232d3e6858ada68692e80501Darin PetkovTEST(OmahaRequestActionTest, OmahaEventTest) { 1534e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent default_event; 1535e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUnknown, default_event.type); 1536e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultError, default_event.result); 1537d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold EXPECT_EQ(ErrorCode::kError, default_event.error_code); 1538e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1539e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent success_event(OmahaEvent::kTypeUpdateDownloadStarted); 1540e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUpdateDownloadStarted, success_event.type); 1541e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultSuccess, success_event.result); 1542d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold EXPECT_EQ(ErrorCode::kSuccess, success_event.error_code); 1543e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1544e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent error_event(OmahaEvent::kTypeUpdateDownloadFinished, 1545e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 1546d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kError); 1547e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUpdateDownloadFinished, error_event.type); 1548e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultError, error_event.result); 1549d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold EXPECT_EQ(ErrorCode::kError, error_event.error_code); 1550e17f86bae4299882232d3e6858ada68692e80501Darin Petkov} 1551e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 15521cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, PingTest) { 1553265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov for (int ping_only = 0; ping_only < 2; ping_only++) { 1554265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov NiceMock<PrefsMock> prefs; 155533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 155633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 155733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 1558265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov // Add a few hours to the day difference to test no rounding, etc. 1559265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov int64_t five_days_ago = 1560265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov (Time::Now() - TimeDelta::FromHours(5 * 24 + 13)).ToInternalValue(); 1561265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov int64_t six_days_ago = 1562265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov (Time::Now() - TimeDelta::FromHours(6 * 24 + 11)).ToInternalValue(); 1563639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1564639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 1565265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 1566265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(six_days_ago), Return(true))); 1567265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 1568265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(five_days_ago), Return(true))); 1569265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov vector<char> post_data; 1570265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov ASSERT_TRUE( 1571265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov TestUpdateCheck(&prefs, 15728f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 15738f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 157477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1575d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 1576265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 1577265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov -1, 1578265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov ping_only, 1579d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 158033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUnset, 158133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 158233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 1583265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov NULL, 1584265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov &post_data)); 1585265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov string post_str(&post_data[0], post_data.size()); 158623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("<ping active=\"1\" a=\"6\" r=\"5\"></ping>"), 1587265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov string::npos); 1588265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov if (ping_only) { 158923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("updatecheck"), string::npos); 1590265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov EXPECT_EQ(post_str.find("previousversion"), string::npos); 1591265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov } else { 159223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("updatecheck"), string::npos); 1593265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov EXPECT_NE(post_str.find("previousversion"), string::npos); 1594265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov } 1595265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov } 15961cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 15971cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 15981cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, ActivePingTest) { 15999c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 160033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 160133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 160233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 16031cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t three_days_ago = 16041cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(3 * 24 + 12)).ToInternalValue(); 16051cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t now = Time::Now().ToInternalValue(); 1606639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1607639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 16081cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 16091cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(three_days_ago), Return(true))); 16101cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 16111cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 16121cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 16131cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 16141cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 16158f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 16168f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 161777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1618d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 16191cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 1620edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1621265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1622d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 162333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 162433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 162533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 16261cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 16271cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 16281cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 162923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("<ping active=\"1\" a=\"3\"></ping>"), 1630116fda3221ff3df037ea1feb271883c87644c839Thieu Le string::npos); 16311cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 16321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 16331cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, RollCallPingTest) { 16349c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 163533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 163633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 163733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 16381cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t four_days_ago = 16391cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(4 * 24)).ToInternalValue(); 16401cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t now = Time::Now().ToInternalValue(); 1641639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1642639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 16431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 16441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 16451cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 16461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(four_days_ago), Return(true))); 16471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 16481cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 16491cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 16508f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 16518f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 165277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1653d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 16541cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 1655edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1656265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1657d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 165833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 165933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 166033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 16611cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 16621cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 16631cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 166423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("<ping active=\"1\" r=\"4\"></ping>\n"), 1665116fda3221ff3df037ea1feb271883c87644c839Thieu Le string::npos); 16661cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 16671cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 16681cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, NoPingTest) { 16699c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 167033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 167133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 167233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 16731cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t one_hour_ago = 16741cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(1)).ToInternalValue(); 1675639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1676639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 16771cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 16781cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); 16791cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 16801cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); 16811cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 16821cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 16831cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 16841cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 16851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 16868f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 16878f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 168877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1689d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 16901cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 1691edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1692265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1693d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 169433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 169533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 169633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 16971cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 16981cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 16991cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 170023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("ping"), string::npos); 17011cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 17021cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1703b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu LeTEST(OmahaRequestActionTest, IgnoreEmptyPingTest) { 1704b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le // This test ensures that we ignore empty ping only requests. 1705b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le NiceMock<PrefsMock> prefs; 1706b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le int64_t now = Time::Now().ToInternalValue(); 1707b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 1708b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 1709b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 1710b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 1711b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 1712b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 1713b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le vector<char> post_data; 1714b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_TRUE( 1715b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le TestUpdateCheck(&prefs, 17168f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 17178f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 171877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1719d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 1720b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le GetNoUpdateResponse(OmahaRequestParams::kAppId), 1721b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le -1, 1722b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le true, // ping_only 1723d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 172433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUnset, 172533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 172633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 1727b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le NULL, 1728b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le &post_data)); 1729b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_EQ(post_data.size(), 0); 1730b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le} 1731b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le 17321cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, BackInTimePingTest) { 17339c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 173433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 173533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 173633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 17371cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t future = 17381cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() + TimeDelta::FromHours(3 * 24 + 4)).ToInternalValue(); 1739639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1740639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 17411cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 17421cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); 17431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 17441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); 17451cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)) 17461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 17471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)) 17481cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 17491cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 17501cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 17511cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 17528f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 17538f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 175477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1755d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 175623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 175723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart elapsed_seconds=\"100\"/>" 17581cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 175923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1760edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1761265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1762d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 176333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 176433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 176533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 17661cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 17671cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 17681cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 176923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("ping"), string::npos); 17701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 17711cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 17721cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, LastPingDayUpdateTest) { 17731cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // This test checks that the action updates the last ping day to now 177484c763cffce6778711792944387fadb760c55c8dDarin Petkov // minus 200 seconds with a slack of 5 seconds. Therefore, the test 17751cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // may fail if it runs for longer than 5 seconds. It shouldn't run 17761cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // that long though. 17771cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t midnight = 17781cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromSeconds(200)).ToInternalValue(); 17791cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t midnight_slack = 17801cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromSeconds(195)).ToInternalValue(); 17819c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 178233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(_, _)).Times(AnyNumber()); 178333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 17841cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, 17851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov AllOf(Ge(midnight), Le(midnight_slack)))) 17861cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 17871cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, 17881cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov AllOf(Ge(midnight), Le(midnight_slack)))) 17891cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 17901cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 17911cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 17928f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 17938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 179477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1795d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 179623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 179723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart elapsed_seconds=\"200\"/>" 17981cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 179923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1800edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1801265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1802d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 180333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 180433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 180533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 18061cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 18071cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL)); 18081cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 18091cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 18101cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, NoElapsedSecondsTest) { 18119c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 181233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(_, _)).Times(AnyNumber()); 181333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 18141cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 18151cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 18161cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 18171cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 18188f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 18198f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 182077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1821d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 182223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 182323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart blah=\"200\"/>" 18241cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 182523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1826edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1827265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1828d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 182933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 183033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 183133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 18321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 18331cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL)); 18341cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 18351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 18361cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, BadElapsedSecondsTest) { 18379c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 183833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(_, _)).Times(AnyNumber()); 183933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 18401cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 18411cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 18421cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 18431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 18448f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 18458f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 184677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1847d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 184823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 184923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart elapsed_seconds=\"x\"/>" 18501cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 185123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1852edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1853265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1854d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 185533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 185633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 185733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 18581cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 18591cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL)); 18601cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 18611cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 186284c763cffce6778711792944387fadb760c55c8dDarin PetkovTEST(OmahaRequestActionTest, NoUniqueIDTest) { 186384c763cffce6778711792944387fadb760c55c8dDarin Petkov vector<char> post_data; 186484c763cffce6778711792944387fadb760c55c8dDarin Petkov ASSERT_FALSE(TestUpdateCheck(NULL, // prefs 18658f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 18668f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 186777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1868d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 186984c763cffce6778711792944387fadb760c55c8dDarin Petkov "invalid xml>", 1870edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1871265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1872d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 187333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 187433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 187533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 187684c763cffce6778711792944387fadb760c55c8dDarin Petkov NULL, // response 187784c763cffce6778711792944387fadb760c55c8dDarin Petkov &post_data)); 187884c763cffce6778711792944387fadb760c55c8dDarin Petkov // convert post_data to string 187984c763cffce6778711792944387fadb760c55c8dDarin Petkov string post_str(&post_data[0], post_data.size()); 188084c763cffce6778711792944387fadb760c55c8dDarin Petkov EXPECT_EQ(post_str.find("machineid="), string::npos); 188184c763cffce6778711792944387fadb760c55c8dDarin Petkov EXPECT_EQ(post_str.find("userid="), string::npos); 188284c763cffce6778711792944387fadb760c55c8dDarin Petkov} 188384c763cffce6778711792944387fadb760c55c8dDarin Petkov 1884edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin PetkovTEST(OmahaRequestActionTest, NetworkFailureTest) { 1885edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 1886d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold const int http_error_code = 1887d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<int>(ErrorCode::kOmahaRequestHTTPResponseBase) + 501; 1888edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 1889edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov TestUpdateCheck(NULL, // prefs 18908f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 18918f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 189277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1893d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 1894edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 1895edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 501, 1896265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1897d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<ErrorCode>(http_error_code), 189833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kDownloadError, 189933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 190033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<metrics::DownloadErrorCode>(501), 1901edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 1902edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov NULL)); 1903edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 1904edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 1905edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 1906edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin PetkovTEST(OmahaRequestActionTest, NetworkFailureBadHTTPCodeTest) { 1907edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 1908d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold const int http_error_code = 1909d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<int>(ErrorCode::kOmahaRequestHTTPResponseBase) + 999; 1910edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 1911edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov TestUpdateCheck(NULL, // prefs 19128f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 19138f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 191477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1915d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 1916edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 1917edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 1500, 1918265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1919d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<ErrorCode>(http_error_code), 192033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kDownloadError, 192133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 192233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kHttpStatusOther, 1923edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 1924edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov NULL)); 1925edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 1926edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 1927edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 192834b5d86d057d450325dd06d35ae182ac6da306e4Jay SrinivasanTEST(OmahaRequestActionTest, TestUpdateFirstSeenAtGetsPersistedFirstTime) { 192934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaResponse response; 193034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaRequestParams params = kDefaultTestParams; 1931ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 1932ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta().FromDays(1)); 1933ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(false); 193434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 193534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan string prefs_dir; 1936a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 193734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &prefs_dir)); 193834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 193934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 194034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Prefs prefs; 194175039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 194234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan << "Failed to initialize preferences."; 194334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 194434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_FALSE(TestUpdateCheck( 194534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &prefs, // prefs 19468f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 19478f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 194877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1949d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 195034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 195134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "1.2.3.4", // version 195234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "http://more/info", 195334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "true", // prompt 195423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 1955d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 195634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "HASH1234=", // checksum 195734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "false", // needs admin 195834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "123", // size 195934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "", // deadline 1960d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 1961d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 19628f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 1963d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 196434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan -1, 196534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan false, // ping_only 1966d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateDeferredPerPolicy, 196733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 196833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 196933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 197034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &response, 197134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan NULL)); 197234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 19739abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t timestamp = 0; 197434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateFirstSeenAt, ×tamp)); 1975d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ASSERT_GT(timestamp, 0); 197634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan EXPECT_FALSE(response.update_exists); 1977968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 1978968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 1979968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 1980968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 1981968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa TestUpdateCheck(&prefs, // prefs 19828f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 19838f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 198477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 1985d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 1986968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa GetUpdateResponse2(OmahaRequestParams::kAppId, 1987968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "1.2.3.4", // version 1988968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://more/info", 1989968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "true", // prompt 1990968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "http://code/base/", // dl url 1991d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 1992968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "HASH1234=", // checksum 1993968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "false", // needs admin 1994968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "123", // size 1995968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa "", // deadline 1996d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 1997d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 19988f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 1999d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 2000968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 2001968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 2002d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 200333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 200433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 200533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 2006968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 2007968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa NULL)); 2008968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 200934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan} 201034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 201134b5d86d057d450325dd06d35ae182ac6da306e4Jay SrinivasanTEST(OmahaRequestActionTest, TestUpdateFirstSeenAtGetsUsedIfAlreadyPresent) { 201234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaResponse response; 201334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaRequestParams params = kDefaultTestParams; 2014ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 2015ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta().FromDays(1)); 2016ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(false); 201734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 201834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan string prefs_dir; 2019a6742b35938b6f58e24e3f1c550fe92d4d33eb74Gilad Arnold EXPECT_TRUE(utils::MakeTempDirectory("ue_ut_prefs.XXXXXX", 202034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &prefs_dir)); 202134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ScopedDirRemover temp_dir_remover(prefs_dir); 202234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 202334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Prefs prefs; 202475039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir))) 202534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan << "Failed to initialize preferences."; 202634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 202734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan // Set the timestamp to a very old value such that it exceeds the 202834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan // waiting period set above. 202934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Time t1; 203034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Time::FromString("1/1/2012", &t1); 203134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(prefs.SetInt64(kPrefsUpdateFirstSeenAt, t1.ToInternalValue())); 203234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(TestUpdateCheck( 203334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &prefs, // prefs 20348f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 20358f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 203677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 2037d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 203834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan GetUpdateResponse2(OmahaRequestParams::kAppId, 203934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "1.2.3.4", // version 204034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "http://more/info", 204134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "true", // prompt 204223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "http://code/base/", // dl url 2043d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 204434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "HASH1234=", // checksum 204534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "false", // needs admin 204634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "123", // size 204734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan "", // deadline 2048d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 2049d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 20508f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // disable_p2p_for_downloading 2051d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 205234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan -1, 205334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan false, // ping_only 2054d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 205533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 205633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 205733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 205834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &response, 205934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan NULL)); 206034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 206134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan EXPECT_TRUE(response.update_exists); 206234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 206334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan // Make sure the timestamp t1 is unchanged showing that it was reused. 20649abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t timestamp = 0; 206534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(prefs.GetInt64(kPrefsUpdateFirstSeenAt, ×tamp)); 206634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(timestamp == t1.ToInternalValue()); 206734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan} 206834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 2069ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST(OmahaRequestActionTest, TestChangingToMoreStableChannel) { 2070eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold // Create a uniquely named test directory. 2071eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold string test_dir; 2072eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::MakeTempDirectory( 2073eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold "omaha_request_action-test-XXXXXX", &test_dir)); 2074eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 2075eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc")); 2076eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + 2077be45bef9e283188b00e7def8967f81843669a7f1Chris Sosa kStatefulPartition + "/etc")); 2078ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan vector<char> post_data; 2079ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan NiceMock<PrefsMock> prefs; 2080ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 2081eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + "/etc/lsb-release", 2082ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_APPID={11111111-1111-1111-1111-111111111111}\n" 2083ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_BOARD_APPID={22222222-2222-2222-2222-222222222222}\n" 2084ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=canary-channel\n")); 2085ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 2086eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + kStatefulPartition + "/etc/lsb-release", 2087ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_IS_POWERWASH_ALLOWED=true\n" 2088ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=stable-channel\n")); 2089ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams params = kDefaultTestParams; 2090d04f8e24716d5acca6a7d116b63851adc1506845Gilad Arnold params.set_root(test_dir); 2091ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.SetLockDown(false); 2092ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.Init("1.2.3.4", "", 0); 2093ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("canary-channel", params.current_channel()); 2094ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("stable-channel", params.target_channel()); 2095ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params.to_more_stable_channel()); 2096ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params.is_powerwash_allowed()); 2097ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_FALSE(TestUpdateCheck(&prefs, 20988f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 20998f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 210077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 2101d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 2102ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "invalid xml>", 2103ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan -1, 2104ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan false, // ping_only 2105d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 210633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 210733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 210833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 2109ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan NULL, // response 2110ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan &post_data)); 2111ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // convert post_data to string 2112ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan string post_str(&post_data[0], post_data.size()); 2113ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_NE(string::npos, post_str.find( 2114ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "appid=\"{22222222-2222-2222-2222-222222222222}\" " 2115ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "version=\"0.0.0.0\" from_version=\"1.2.3.4\" " 2116ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "track=\"stable-channel\" from_track=\"canary-channel\" ")); 2117eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 2118eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::RecursiveUnlinkDir(test_dir)); 2119ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan} 2120ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 2121ae4697c073b84b260990a141acd53c6806da0708Jay SrinivasanTEST(OmahaRequestActionTest, TestChangingToLessStableChannel) { 2122eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold // Create a uniquely named test directory. 2123eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold string test_dir; 2124eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::MakeTempDirectory( 2125eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold "omaha_request_action-test-XXXXXX", &test_dir)); 2126eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 2127eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc")); 2128eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + 2129be45bef9e283188b00e7def8967f81843669a7f1Chris Sosa kStatefulPartition + "/etc")); 2130ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan vector<char> post_data; 2131ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan NiceMock<PrefsMock> prefs; 2132ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 2133eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + "/etc/lsb-release", 2134ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_APPID={11111111-1111-1111-1111-111111111111}\n" 2135ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_BOARD_APPID={22222222-2222-2222-2222-222222222222}\n" 2136ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=stable-channel\n")); 2137ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 2138eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + kStatefulPartition + "/etc/lsb-release", 2139ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=canary-channel\n")); 2140ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan OmahaRequestParams params = kDefaultTestParams; 2141d04f8e24716d5acca6a7d116b63851adc1506845Gilad Arnold params.set_root(test_dir); 2142ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.SetLockDown(false); 2143ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.Init("5.6.7.8", "", 0); 2144ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("stable-channel", params.current_channel()); 2145ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("canary-channel", params.target_channel()); 2146ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params.to_more_stable_channel()); 2147ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params.is_powerwash_allowed()); 2148ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_FALSE(TestUpdateCheck(&prefs, 21498f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // payload_state 21508f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL, // p2p_manager 215177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 2152d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 2153ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "invalid xml>", 2154ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan -1, 2155ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan false, // ping_only 2156d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 215733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 215833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 215933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 2160ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan NULL, // response 2161ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan &post_data)); 2162ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // convert post_data to string 2163ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan string post_str(&post_data[0], post_data.size()); 2164ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_NE(string::npos, post_str.find( 2165ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "appid=\"{11111111-1111-1111-1111-111111111111}\" " 2166ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "version=\"5.6.7.8\" " 2167ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "track=\"canary-channel\" from_track=\"stable-channel\"")); 2168d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko EXPECT_EQ(string::npos, post_str.find("from_version")); 2169eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 2170eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::RecursiveUnlinkDir(test_dir)); 2171ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan} 2172ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 21738f191b22a1a1ab2b803d65ee488729206e648695David Zeuthenvoid P2PTest(bool initial_allow_p2p_for_downloading, 21748f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool initial_allow_p2p_for_sharing, 21758f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool omaha_disable_p2p_for_downloading, 21768f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool omaha_disable_p2p_for_sharing, 21778f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool payload_state_allow_p2p_attempt, 21788f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool expect_p2p_client_lookup, 21798f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen const string& p2p_client_result_url, 21808f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool expected_allow_p2p_for_downloading, 21818f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen bool expected_allow_p2p_for_sharing, 21828f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen const string& expected_p2p_url) { 21838f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen OmahaResponse response; 21848f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen OmahaRequestParams request_params = kDefaultTestParams; 21858f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen request_params.set_use_p2p_for_downloading(initial_allow_p2p_for_downloading); 21868f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen request_params.set_use_p2p_for_sharing(initial_allow_p2p_for_sharing); 21878f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 21888f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen MockPayloadState mock_payload_state; 21898f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_CALL(mock_payload_state, P2PAttemptAllowed()) 21908f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen .WillRepeatedly(Return(payload_state_allow_p2p_attempt)); 21918f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen MockP2PManager mock_p2p_manager; 21928f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen mock_p2p_manager.fake().SetLookupUrlForFileResult(p2p_client_result_url); 21938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 21944cc5ed215180d19598d8b99f0a8a15cc24b831fcDavid Zeuthen TimeDelta timeout = TimeDelta::FromSeconds(kMaxP2PNetworkWaitTimeSeconds); 21954cc5ed215180d19598d8b99f0a8a15cc24b831fcDavid Zeuthen EXPECT_CALL(mock_p2p_manager, LookupUrlForFile(_, _, timeout, _)) 21968f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen .Times(expect_p2p_client_lookup ? 1 : 0); 21978f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 21988f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen ASSERT_TRUE( 21998f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen TestUpdateCheck(NULL, // prefs 22008f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen &mock_payload_state, 22018f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen &mock_p2p_manager, 220277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 2203d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &request_params, 22048f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen GetUpdateResponse2(OmahaRequestParams::kAppId, 22058f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "1.2.3.4", // version 22068f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "http://more/info", 22078f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "true", // prompt 22088f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "http://code/base/", // dl url 2209d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 22108f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "HASH1234=", // checksum 22118f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "false", // needs admin 22128f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "123", // size 22138f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen "", // deadline 2214d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 2215d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "42", // elapsed_days 22168f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen omaha_disable_p2p_for_downloading, 22178f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen omaha_disable_p2p_for_sharing), 22188f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen -1, 22198f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // ping_only 2220d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 222133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 222233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 222333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 22248f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen &response, 22258f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen NULL)); 22268f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_TRUE(response.update_exists); 22278f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 22288f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(response.disable_p2p_for_downloading, 22298f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen omaha_disable_p2p_for_downloading); 22308f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(response.disable_p2p_for_sharing, 22318f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen omaha_disable_p2p_for_sharing); 22328f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 22338f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(request_params.use_p2p_for_downloading(), 22348f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen expected_allow_p2p_for_downloading); 22358f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 22368f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(request_params.use_p2p_for_sharing(), 22378f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen expected_allow_p2p_for_sharing); 22388f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 22398f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_EQ(request_params.p2p_url(), expected_p2p_url); 22408f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 22418f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 22428f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithPeer) { 2243d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 2244d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2245d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_downloading 2246d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_sharing 2247d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2248d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expect_p2p_client_lookup 2249d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "http://1.3.5.7/p2p", // p2p_client_result_url 2250d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_downloading 2251d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_sharing 2252d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "http://1.3.5.7/p2p"); // expected_p2p_url 22538f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 22548f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 22558f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithoutPeer) { 2256d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 2257d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2258d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_downloading 2259d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_sharing 2260d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2261d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expect_p2p_client_lookup 2262d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "", // p2p_client_result_url 2263d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_downloading 2264d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_sharing 2265d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ""); // expected_p2p_url 22668f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 22678f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 22688f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PDownloadNotAllowed) { 2269d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(false, // initial_allow_p2p_for_downloading 2270d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2271d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_downloading 2272d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_sharing 2273d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2274d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expect_p2p_client_lookup 2275d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "unset", // p2p_client_result_url 2276d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_downloading 2277d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_sharing 2278d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ""); // expected_p2p_url 22798f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 22808f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 22818f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithPeerDownloadDisabledByOmaha) { 2282d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 2283d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2284d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // omaha_disable_p2p_for_downloading 2285d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_sharing 2286d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2287d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expect_p2p_client_lookup 2288d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "unset", // p2p_client_result_url 2289d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_downloading 2290d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_sharing 2291d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ""); // expected_p2p_url 22928f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 22938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 22948f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithPeerSharingDisabledByOmaha) { 2295d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 2296d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2297d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_downloading 2298d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // omaha_disable_p2p_for_sharing 2299d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2300d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expect_p2p_client_lookup 2301d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "http://1.3.5.7/p2p", // p2p_client_result_url 2302d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_downloading 2303d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_sharing 2304d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "http://1.3.5.7/p2p"); // expected_p2p_url 23058f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 23068f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 23078f191b22a1a1ab2b803d65ee488729206e648695David ZeuthenTEST(OmahaRequestActionTest, P2PWithPeerBothDisabledByOmaha) { 2308d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 2309d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2310d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // omaha_disable_p2p_for_downloading 2311d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // omaha_disable_p2p_for_sharing 2312d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2313d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expect_p2p_client_lookup 2314d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "unset", // p2p_client_result_url 2315d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_downloading 2316d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_sharing 2317d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ""); // expected_p2p_url 23188f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 23198f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 2320639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthenbool InstallDateParseHelper(const std::string &elapsed_days, 2321639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen PrefsInterface* prefs, 2322639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen OmahaResponse *response) { 2323639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen return 2324639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen TestUpdateCheck(prefs, 2325639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NULL, // payload_state 2326639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NULL, // p2p_manager 232777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa NULL, // connection_manager 2328d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko &kDefaultTestParams, 2329639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen GetUpdateResponse2(OmahaRequestParams::kAppId, 2330639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "1.2.3.4", // version 2331639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "http://more/info", 2332639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "true", // prompt 2333639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "http://code/base/", // dl url 2334d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "file.signed", // file name 2335639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "HASH1234=", // checksum 2336639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "false", // needs admin 2337639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "123", // size 2338639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen "", // deadline 2339d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "7", // max days to scatter 2340639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen elapsed_days, 2341639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen false, // disable_p2p_for_downloading 2342d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false), // disable_p2p_for sharing 2343639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen -1, 2344639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen false, // ping_only 2345d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 234633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 234733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 234833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 2349639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen response, 2350639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen NULL); 2351639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen} 2352639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2353639aa36fc7e27ba400402cd7a32b091f555783a6David ZeuthenTEST(OmahaRequestActionTest, ParseInstallDateFromResponse) { 2354639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen OmahaResponse response; 2355639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen string temp_dir; 2356639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Prefs prefs; 2357639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(utils::MakeTempDirectory("ParseInstallDateFromResponse.XXXXXX", 2358639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen &temp_dir)); 235975039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko prefs.Init(base::FilePath(temp_dir)); 2360639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2361639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Check that we parse elapsed_days in the Omaha Response correctly. 2362639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // and that the kPrefsInstallDateDays value is written to. 2363639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_FALSE(prefs.Exists(kPrefsInstallDateDays)); 2364639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(InstallDateParseHelper("42", &prefs, &response)); 2365639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2366639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(42, response.install_date_days); 2367639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.Exists(kPrefsInstallDateDays)); 2368639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen int64_t prefs_days; 2369639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2370639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 42); 2371639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2372639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // If there already is a value set, we shouldn't do anything. 2373639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(InstallDateParseHelper("7", &prefs, &response)); 2374639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2375639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(7, response.install_date_days); 2376639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2377639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 42); 2378639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2379639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Note that elapsed_days is not necessarily divisible by 7 so check 2380639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // that we round down correctly when populating kPrefsInstallDateDays. 2381639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.Delete(kPrefsInstallDateDays)); 2382639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(InstallDateParseHelper("23", &prefs, &response)); 2383639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2384639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(23, response.install_date_days); 2385639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2386639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 21); 2387639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2388639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Check that we correctly handle elapsed_days not being included in 2389639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // the Omaha Response. 2390639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(InstallDateParseHelper("", &prefs, &response)); 2391639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2392639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(-1, response.install_date_days); 2393639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2394639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(utils::RecursiveUnlinkDir(temp_dir)); 2395639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen} 2396639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2397639aa36fc7e27ba400402cd7a32b091f555783a6David ZeuthenTEST(OmahaRequestActionTest, GetInstallDate) { 2398639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen string temp_dir; 2399639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen Prefs prefs; 2400639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(utils::MakeTempDirectory("GetInstallDate.XXXXXX", 2401639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen &temp_dir)); 240275039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko prefs.Init(base::FilePath(temp_dir)); 2403639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2404639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // If there is no prefs and OOBE is not complete, we should not 2405639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // report anything to Omaha. 2406639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen { 24075bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState system_state; 2408639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen system_state.set_prefs(&prefs); 2409639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(OmahaRequestAction::GetInstallDate(&system_state), -1); 2410639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_FALSE(prefs.Exists(kPrefsInstallDateDays)); 2411639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen } 2412639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2413639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // If OOBE is complete and happened on a valid date (e.g. after Jan 2414639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // 1 2007 0:00 PST), that date should be used and written to 2415639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // prefs. However, first try with an invalid date and check we do 2416639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // nothing. 2417639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen { 24185bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 24195bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_prefs(&prefs); 2420639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2421d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko Time oobe_date = Time::FromTimeT(42); // Dec 31, 1969 16:00:42 PST. 24225bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.fake_hardware()->SetIsOOBEComplete(oobe_date); 24235bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold EXPECT_EQ(OmahaRequestAction::GetInstallDate(&fake_system_state), -1); 2424639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_FALSE(prefs.Exists(kPrefsInstallDateDays)); 2425639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen } 2426639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2427639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Then check with a valid date. The date Jan 20, 2007 0:00 PST 2428639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // should yield an InstallDate of 14. 2429639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen { 24305bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 24315bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_prefs(&prefs); 2432639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2433d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko Time oobe_date = Time::FromTimeT(1169280000); // Jan 20, 2007 0:00 PST. 24345bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.fake_hardware()->SetIsOOBEComplete(oobe_date); 24355bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold EXPECT_EQ(OmahaRequestAction::GetInstallDate(&fake_system_state), 14); 2436639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.Exists(kPrefsInstallDateDays)); 2437639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2438639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen int64_t prefs_days; 2439639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2440639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 14); 2441639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen } 2442639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2443639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Now that we have a valid date in prefs, check that we keep using 2444639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // that even if OOBE date reports something else. The date Jan 30, 2445639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // 2007 0:00 PST should yield an InstallDate of 28... but since 2446639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // there's a prefs file, we should still get 14. 2447639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen { 24485bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 24495bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_prefs(&prefs); 2450639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2451d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko Time oobe_date = Time::FromTimeT(1170144000); // Jan 30, 2007 0:00 PST. 24525bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.fake_hardware()->SetIsOOBEComplete(oobe_date); 24535bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold EXPECT_EQ(OmahaRequestAction::GetInstallDate(&fake_system_state), 14); 2454639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2455639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen int64_t prefs_days; 2456639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2457639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 14); 2458639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2459639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // If we delete the prefs file, we should get 28 days. 2460639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.Delete(kPrefsInstallDateDays)); 24615bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold EXPECT_EQ(OmahaRequestAction::GetInstallDate(&fake_system_state), 28); 2462639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(prefs.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2463639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 28); 2464639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen } 2465639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2466639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(utils::RecursiveUnlinkDir(temp_dir)); 2467639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen} 2468639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 24696a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} // namespace chromeos_update_engine 2470