1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2012 The Android Open Source Project 3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License"); 5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License. 6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at 7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// http://www.apache.org/licenses/LICENSE-2.0 9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software 11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS, 12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and 14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License. 15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// 166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 178427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo#include "update_engine/omaha_request_action.h" 188427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo 199abb763fa3840d69cc1098c0233162557a7f99eaBen Chan#include <stdint.h> 209abb763fa3840d69cc1098c0233162557a7f99eaBen Chan 216a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <string> 226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <vector> 230dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 2460ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo#include <base/bind.h> 25110e030ba1a37787635e229bd36b42e33b9a9208Alex Deymo#include <base/files/file_util.h> 268e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo#include <base/strings/string_number_conversions.h> 2775039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/strings/string_util.h> 2875039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/strings/stringprintf.h> 2975039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko#include <base/time/time.h> 303f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko#include <brillo/bind_lambda.h> 31c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo#include <brillo/make_unique_ptr.h> 323f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko#include <brillo/message_loops/fake_message_loop.h> 333f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko#include <brillo/message_loops/message_loop.h> 343f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko#include <brillo/message_loops/message_loop_utils.h> 35e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo#include <gtest/gtest.h> 36d29695df35b7192faef4009d42a62c37bdd90a8fJay Srinivasan 3739910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/action_pipe.h" 3839910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/constants.h" 3939910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/fake_prefs.h" 4039910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/hash_calculator.h" 4139910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/mock_http_fetcher.h" 4239910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/platform_constants.h" 4339910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/prefs.h" 4439910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/test_utils.h" 4539910dcd1d68987ccee7c3031dc269233a8490bbAlex Deymo#include "update_engine/common/utils.h" 46c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo#include "update_engine/fake_system_state.h" 4738429cf76aaac8c499004b6f537229a26b381602Alex Deymo#include "update_engine/metrics.h" 4877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa#include "update_engine/mock_connection_manager.h" 4974b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold#include "update_engine/mock_payload_state.h" 50a4a8a8ccc2d9e0285728ed247b43f09433e63323Darin Petkov#include "update_engine/omaha_request_params.h" 516a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 521cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing base::Time; 531cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing base::TimeDelta; 5410875d90cf67f883ba7c9ed13bc8d706aa8c6fbcAlex Deymousing chromeos_update_engine::test_utils::System; 5510875d90cf67f883ba7c9ed13bc8d706aa8c6fbcAlex Deymousing chromeos_update_engine::test_utils::WriteFileString; 566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovusing std::string; 576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovusing std::vector; 581cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::AllOf; 59f329b933db41d26644a97afef928eb1b319d6d99Alex Deymousing testing::AnyNumber; 6034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasanusing testing::DoAll; 611cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Ge; 621cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Le; 639c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkovusing testing::NiceMock; 641cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Return; 6574b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnoldusing testing::ReturnPointee; 6674b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnoldusing testing::SaveArg; 671cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::SetArgumentPointee; 68f329b933db41d26644a97afef928eb1b319d6d99Alex Deymousing testing::_; 696a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 708e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymonamespace { 718e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 72856166594771c61973856f563e622ccb7dd48aa1Alex Deymoconst char kTestAppId[] = "test-app-id"; 73856166594771c61973856f563e622ccb7dd48aa1Alex Deymo 748e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo// This is a helper struct to allow unit tests build an update response with the 758e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo// values they care about. 768e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymostruct FakeUpdateResponse { 778e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string GetNoUpdateResponse() const { 788e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string entity_str; 798e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo if (include_entity) 808e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo entity_str = "<!DOCTYPE response [<!ENTITY CrOS \"ChromeOS\">]>"; 8100d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo return 8200d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 8300d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo entity_str + "<response protocol=\"3.0\">" 848e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "<daystart elapsed_seconds=\"100\"/>" 8500d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo "<app appid=\"" + app_id + "\" " + 8600d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo (include_cohorts ? "cohort=\"" + cohort + "\" cohorthint=\"" + 8700d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo cohorthint + "\" cohortname=\"" + cohortname + "\" " : "") + 8800d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo " status=\"ok\">" 8900d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo "<ping status=\"ok\"/>" 9000d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo "<updatecheck status=\"noupdate\"/></app></response>"; 918e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo } 928e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 938e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string GetUpdateResponse() const { 948e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo return 958e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 968e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "protocol=\"3.0\">" 978e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "<daystart elapsed_seconds=\"100\"" + 988e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo (elapsed_days.empty() ? "" : (" elapsed_days=\"" + elapsed_days + "\"")) 998e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo + "/>" 1008e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "<app appid=\"" + app_id + "\" " + 1018e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo (include_cohorts ? "cohort=\"" + cohort + "\" cohorthint=\"" + 1028e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo cohorthint + "\" cohortname=\"" + cohortname + "\" " : "") + 1038e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo " status=\"ok\">" 1048e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "<ping status=\"ok\"/><updatecheck status=\"ok\">" 1058e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "<urls><url codebase=\"" + codebase + "\"/></urls>" 1068e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "<manifest version=\"" + version + "\">" 1078e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "<packages><package hash=\"not-used\" name=\"" + filename + "\" " 1088e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "size=\"" + base::Int64ToString(size) + "\"/></packages>" 1098e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "<actions><action event=\"postinstall\" " 1108e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "ChromeOSVersion=\"" + version + "\" " 1118e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "MoreInfo=\"" + more_info_url + "\" Prompt=\"" + prompt + "\" " 1128e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "IsDelta=\"true\" " 1138e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "IsDeltaPayload=\"true\" " 1148e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "MaxDaysToScatter=\"" + max_days_to_scatter + "\" " 1158e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "sha256=\"" + hash + "\" " 1168e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "needsadmin=\"" + needsadmin + "\" " + 1178e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo (deadline.empty() ? "" : ("deadline=\"" + deadline + "\" ")) + 1188e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo (disable_p2p_for_downloading ? 1198e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "DisableP2PForDownloading=\"true\" " : "") + 1208e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo (disable_p2p_for_sharing ? "DisableP2PForSharing=\"true\" " : "") + 1218e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo "/></actions></manifest></updatecheck></app></response>"; 1228e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo } 1238e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 1248e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo // Return the payload URL, which is split in two fields in the XML response. 1258e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string GetPayloadUrl() { 1268e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo return codebase + filename; 1278e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo } 1288e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 129856166594771c61973856f563e622ccb7dd48aa1Alex Deymo string app_id = kTestAppId; 1308e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string version = "1.2.3.4"; 1318e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string more_info_url = "http://more/info"; 1328e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string prompt = "true"; 1338e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string codebase = "http://code/base/"; 1348e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string filename = "file.signed"; 1358e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string hash = "HASH1234="; 1368e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string needsadmin = "false"; 1378e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo int64_t size = 123; 1388e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string deadline = ""; 1398e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string max_days_to_scatter = "7"; 1408e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string elapsed_days = "42"; 1418e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 1428e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo // P2P setting defaults to allowed. 1438e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo bool disable_p2p_for_downloading = false; 1448e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo bool disable_p2p_for_sharing = false; 1458e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 1468e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo // Omaha cohorts settings. 1478e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo bool include_cohorts = false; 1488e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string cohort = ""; 1498e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string cohorthint = ""; 1508e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string cohortname = ""; 1518e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 1528e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo // Whether to include the CrOS <!ENTITY> in the XML response. 1538e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo bool include_entity = false; 1548e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo}; 1558e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 1568e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo} // namespace 1578e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 1586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace chromeos_update_engine { 1596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 160e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymoclass OmahaRequestActionTest : public ::testing::Test { 161e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo protected: 162610277efc6f7e5239158dfa4bb3b1021804326e0Alex Deymo void SetUp() override { 163e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_request_params(&request_params_); 164e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&fake_prefs_); 165e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo } 1666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 167e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // Returns true iff an output response was obtained from the 1688427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo // OmahaRequestAction. |prefs| may be null, in which case a local MockPrefs 169e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // is used. |payload_state| may be null, in which case a local mock is used. 170e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // |p2p_manager| may be null, in which case a local mock is used. 171e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // |connection_manager| may be null, in which case a local mock is used. 172e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // out_response may be null. If |fail_http_response_code| is non-negative, 173e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // the transfer will fail with that code. |ping_only| is passed through to the 174e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // OmahaRequestAction constructor. out_post_data may be null; if non-null, the 175e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // post-data received by the mock HttpFetcher is returned. 176e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // 177e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // The |expected_check_result|, |expected_check_reaction| and 178e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // |expected_error_code| parameters are for checking expectations 179e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // about reporting UpdateEngine.Check.{Result,Reaction,DownloadError} 180e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // UMA statistics. Use the appropriate ::kUnset value to specify that 181e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // the given metric should not be reported. 182e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool TestUpdateCheck(OmahaRequestParams* request_params, 183e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo const string& http_response, 184e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo int fail_http_response_code, 185e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool ping_only, 186e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ErrorCode expected_code, 187e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo metrics::CheckResult expected_check_result, 188e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo metrics::CheckReaction expected_check_reaction, 189e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo metrics::DownloadErrorCode expected_download_error_code, 190e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaResponse* out_response, 1913f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob* out_post_data); 192e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 193f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko // Runs and checks a ping test. |ping_only| indicates whether it should send 194e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // only a ping or also an updatecheck. 195e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo void PingTest(bool ping_only); 196e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 197e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // InstallDate test helper function. 198f329b933db41d26644a97afef928eb1b319d6d99Alex Deymo bool InstallDateParseHelper(const string &elapsed_days, 199e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaResponse *response); 200e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 201e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // P2P test helper function. 202e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo void P2PTest( 203e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool initial_allow_p2p_for_downloading, 204e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool initial_allow_p2p_for_sharing, 205e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool omaha_disable_p2p_for_downloading, 206e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool omaha_disable_p2p_for_sharing, 207e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool payload_state_allow_p2p_attempt, 208e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool expect_p2p_client_lookup, 209e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo const string& p2p_client_result_url, 210e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool expected_allow_p2p_for_downloading, 211e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool expected_allow_p2p_for_sharing, 212e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo const string& expected_p2p_url); 213e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 214e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo FakeSystemState fake_system_state_; 2158e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo FakeUpdateResponse fake_update_response_; 216e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 217e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // By default, all tests use these objects unless they replace them in the 218e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // fake_system_state_. 219e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams request_params_ = OmahaRequestParams{ 220e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo &fake_system_state_, 221ac41a82e4be1be43913292d13d58b5eb2c572f53Alex Deymo constants::kOmahaPlatformName, 222e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams::kOsVersion, 223e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo "service_pack", 224e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo "x86-generic", 225856166594771c61973856f563e622ccb7dd48aa1Alex Deymo kTestAppId, 226e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo "0.1.0.0", 227e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo "en-US", 228e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo "unittest", 229e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo "OEM MODEL 09235 7471", 230e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo "ChromeOSFirmware.1.0", 231e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo "0X0A1", 232e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo false, // delta okay 233e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo false, // interactive 234e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo "http://url", 23574b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold ""}; // target_version_prefix 236e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 237e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo FakePrefs fake_prefs_; 238e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo}; 239480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 240e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymonamespace { 2416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OmahaRequestActionTestProcessorDelegate : public ActionProcessorDelegate { 2426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 2436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate() 24460ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo : expected_code_(ErrorCode::kSuccess) {} 245610277efc6f7e5239158dfa4bb3b1021804326e0Alex Deymo ~OmahaRequestActionTestProcessorDelegate() override { 2466a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 24735866ed08bcefa9d8bffab9ca64cf994ad0f4290Yunlian Jiang void ProcessingDone(const ActionProcessor* processor, 24835866ed08bcefa9d8bffab9ca64cf994ad0f4290Yunlian Jiang ErrorCode code) override { 2493f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::MessageLoop::current()->BreakLoop(); 2506a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 2516a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 25235866ed08bcefa9d8bffab9ca64cf994ad0f4290Yunlian Jiang void ActionCompleted(ActionProcessor* processor, 25335866ed08bcefa9d8bffab9ca64cf994ad0f4290Yunlian Jiang AbstractAction* action, 25435866ed08bcefa9d8bffab9ca64cf994ad0f4290Yunlian Jiang ErrorCode code) override { 2556a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // make sure actions always succeed 2566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (action->Type() == OmahaRequestAction::StaticType()) 257c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov EXPECT_EQ(expected_code_, code); 2586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov else 259d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold EXPECT_EQ(ErrorCode::kSuccess, code); 2606a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 261a99981fda75fe0b17e96c700e3ddc93eca1cebe5David Zeuthen ErrorCode expected_code_; 2626a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 263d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko} // namespace 2646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OutputObjectCollectorAction; 2666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovtemplate<> 2686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass ActionTraits<OutputObjectCollectorAction> { 2696a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 2706a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Does not take an object for input 2716a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov typedef OmahaResponse InputObjectType; 2726a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // On success, puts the output path on output 2736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov typedef NoneType OutputObjectType; 2746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 2756a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OutputObjectCollectorAction : public Action<OutputObjectCollectorAction> { 2776a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 2786a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OutputObjectCollectorAction() : has_input_object_(false) {} 2796a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void PerformAction() { 2806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // copy input object 2816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov has_input_object_ = HasInputObject(); 2826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (has_input_object_) 2836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov omaha_response_ = GetInputObject(); 284d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold processor_->ActionComplete(this, ErrorCode::kSuccess); 2856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 2866a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Should never be called 2876a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void TerminateProcessing() { 2886a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov CHECK(false); 2896a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 2906a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Debugging/logging 291f329b933db41d26644a97afef928eb1b319d6d99Alex Deymo static string StaticType() { 2926a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return "OutputObjectCollectorAction"; 2936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 294f329b933db41d26644a97afef928eb1b319d6d99Alex Deymo string Type() const { return StaticType(); } 2950057daa5dd6adc2db3b5524cfb3e66011c69c152Alex Vakulenko using InputObjectType = 2960057daa5dd6adc2db3b5524cfb3e66011c69c152Alex Vakulenko ActionTraits<OutputObjectCollectorAction>::InputObjectType; 2970057daa5dd6adc2db3b5524cfb3e66011c69c152Alex Vakulenko using OutputObjectType = 2980057daa5dd6adc2db3b5524cfb3e66011c69c152Alex Vakulenko ActionTraits<OutputObjectCollectorAction>::OutputObjectType; 2996a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov bool has_input_object_; 3006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse omaha_response_; 3016a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 3026a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 303e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymobool OmahaRequestActionTest::TestUpdateCheck( 304e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams* request_params, 305e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo const string& http_response, 306e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo int fail_http_response_code, 307e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool ping_only, 308e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ErrorCode expected_code, 309e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo metrics::CheckResult expected_check_result, 310e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo metrics::CheckReaction expected_check_reaction, 311e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo metrics::DownloadErrorCode expected_download_error_code, 312e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaResponse* out_response, 3133f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob* out_post_data) { 3143f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::FakeMessageLoop loop(nullptr); 31560ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.SetAsCurrent(); 3160dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), 3174516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 31888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr); 319edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov if (fail_http_response_code >= 0) { 320edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov fetcher->FailTransfer(fail_http_response_code); 321edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov } 322e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo if (request_params) 323e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_request_params(request_params); 324e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestAction action(&fake_system_state_, 32588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 326c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo brillo::make_unique_ptr(fetcher), 327265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov ping_only); 3286a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate delegate; 329c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov delegate.expected_code_ = expected_code; 330a4a8a8ccc2d9e0285728ed247b43f09433e63323Darin Petkov 3316a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 3326a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 3336a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 3346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OutputObjectCollectorAction collector_action; 3366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov BondActions(&action, &collector_action); 3376a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&collector_action); 3386a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 339e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_CALL(*fake_system_state_.mock_metrics_lib(), SendEnumToUMA(_, _, _)) 34033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 341e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_CALL(*fake_system_state_.mock_metrics_lib(), 34233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SendEnumToUMA(metrics::kMetricCheckResult, 34333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(expected_check_result), 34433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(metrics::CheckResult::kNumConstants) - 1)) 34533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(expected_check_result == metrics::CheckResult::kUnset ? 0 : 1); 346e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_CALL(*fake_system_state_.mock_metrics_lib(), 34733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen SendEnumToUMA(metrics::kMetricCheckReaction, 34833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(expected_check_reaction), 34933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<int>(metrics::CheckReaction::kNumConstants) - 1)) 35033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(expected_check_reaction == metrics::CheckReaction::kUnset ? 0 : 1); 351e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_CALL(*fake_system_state_.mock_metrics_lib(), 352c0dd0210d01406df4b88086ea1349a75b8fe0584David Zeuthen SendSparseToUMA(metrics::kMetricCheckDownloadErrorCode, 353c0dd0210d01406df4b88086ea1349a75b8fe0584David Zeuthen static_cast<int>(expected_download_error_code))) 35433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(expected_download_error_code == metrics::DownloadErrorCode::kUnset 35533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen ? 0 : 1); 35633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen 35760ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.PostTask(base::Bind([&processor] { processor.StartProcessing(); })); 35860ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo LOG(INFO) << "loop.PendingTasks() = " << loop.PendingTasks(); 35960ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.Run(); 36060ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo LOG(INFO) << "loop.PendingTasks() = " << loop.PendingTasks(); 36160ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo EXPECT_FALSE(loop.PendingTasks()); 3626a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (collector_action.has_input_object_ && out_response) 3636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov *out_response = collector_action.omaha_response_; 3646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (out_post_data) 3656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov *out_post_data = fetcher->post_data(); 3666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return collector_action.has_input_object_; 3676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3690dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// Tests Event requests -- they should always succeed. |out_post_data| 3700dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// may be null; if non-null, the post-data received by the mock 3710dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// HttpFetcher is returned. 372480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasanvoid TestEvent(OmahaRequestParams params, 3730dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaEvent* event, 3740dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov const string& http_response, 3753f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob* out_post_data) { 3763f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::FakeMessageLoop loop(nullptr); 37760ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.SetAsCurrent(); 3780dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), 3794516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 38088b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr); 3815bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 3825bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold fake_system_state.set_request_params(¶ms); 383c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo OmahaRequestAction action(&fake_system_state, 384c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo event, 385c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo brillo::make_unique_ptr(fetcher), 386c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo false); 3870dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestActionTestProcessorDelegate delegate; 3880dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ActionProcessor processor; 3890dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov processor.set_delegate(&delegate); 3900dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov processor.EnqueueAction(&action); 3910dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 39260ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.PostTask(base::Bind([&processor] { processor.StartProcessing(); })); 39360ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.Run(); 39460ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo 39560ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo // This test should schedule a callback to notify the crash reporter if 39660ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo // the passed event is an error. 39760ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo EXPECT_EQ(event->result == OmahaEvent::kResultError, loop.PendingTasks()); 39860ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo 3990dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov if (out_post_data) 4000dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov *out_post_data = fetcher->post_data(); 4010dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 4020dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 403e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, RejectEntities) { 404f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen OmahaResponse response; 4058e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.include_entity = true; 406f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen ASSERT_FALSE( 407e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 4088e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetNoUpdateResponse(), 409f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen -1, 410f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen false, // ping_only 411f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen ErrorCode::kOmahaRequestXMLHasEntityDecl, 412f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen metrics::CheckResult::kParsingError, 413f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen metrics::CheckReaction::kUnset, 414f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen metrics::DownloadErrorCode::kUnset, 415f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen &response, 41688b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 417f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen EXPECT_FALSE(response.update_exists); 418f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen} 419f3e2801f18bae14e41099e007de7c9a019735556David Zeuthen 420e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, NoUpdateTest) { 4216a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 4226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 423e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 4248e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetNoUpdateResponse(), 425edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 426265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 427d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 42833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 42933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 43033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 4310dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 43288b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 4336a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 4346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 4356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4368e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo// Test that all the values in the response are parsed in a normal update 4378e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo// response. 438e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, ValidUpdateTest) { 4396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 4408e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.deadline = "20101020"; 4416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 442e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 4438e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 444edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 445265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 446d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 44733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 44833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 44933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 4500dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 45188b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 4526a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.update_exists); 45334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan EXPECT_TRUE(response.update_exists); 4548e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.version, response.version); 4558e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.GetPayloadUrl(), response.payload_urls[0]); 4568e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.more_info_url, response.more_info_url); 4578e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.hash, response.hash); 4588e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.size, response.size); 4598e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.prompt == "true", response.prompt); 4608e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.deadline, response.deadline); 4618e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo // Omaha cohort attribets are not set in the response, so they should not be 4628e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo // persisted. 4638e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_FALSE(fake_prefs_.Exists(kPrefsOmahaCohort)); 4648e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_FALSE(fake_prefs_.Exists(kPrefsOmahaCohortHint)); 4658e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_FALSE(fake_prefs_.Exists(kPrefsOmahaCohortName)); 4666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 4676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 468e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, ValidUpdateBlockedByConnection) { 46977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa OmahaResponse response; 47077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa // Set up a connection manager that doesn't allow a valid update over 47177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa // the current ethernet connection. 472f6ee0163504eaf1a7cc136ba2c075d77ae2b4dd5Alex Deymo MockConnectionManager mock_cm; 473e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_connection_manager(&mock_cm); 474e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 475305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo EXPECT_CALL(mock_cm, GetConnectionProperties(_, _)) 476305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo .WillRepeatedly( 477305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo DoAll(SetArgumentPointee<0>(NetworkConnectionType::kEthernet), 478305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo SetArgumentPointee<1>(NetworkTethering::kUnknown), 479305345001d85ca2282112c2a30fe75c7a4773491Alex Deymo Return(true))); 48075eac7e523f825afdb88508922d7dc65fa366b19Alex Deymo EXPECT_CALL(mock_cm, IsUpdateAllowedOver(NetworkConnectionType::kEthernet, _)) 48177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa .WillRepeatedly(Return(false)); 48277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 48377f79e876a77796fc248d099b6574f05bd23c954Chris Sosa ASSERT_FALSE( 484e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 4858e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 48677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa -1, 48777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa false, // ping_only 488d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateIgnoredPerPolicy, 48977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::CheckResult::kUpdateAvailable, 49077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::CheckReaction::kIgnored, 49177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::DownloadErrorCode::kUnset, 49277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa &response, 49388b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 49477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa EXPECT_FALSE(response.update_exists); 49577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa} 49677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 497e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, ValidUpdateBlockedByRollback) { 49877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa string rollback_version = "1234.0.0"; 49977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa OmahaResponse response; 50077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 50177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa MockPayloadState mock_payload_state; 502e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_payload_state(&mock_payload_state); 503e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 50477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa EXPECT_CALL(mock_payload_state, GetRollbackVersion()) 50577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa .WillRepeatedly(Return(rollback_version)); 50677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 5078e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.version = rollback_version; 50877f79e876a77796fc248d099b6574f05bd23c954Chris Sosa ASSERT_FALSE( 509e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 5108e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 51177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa -1, 51277f79e876a77796fc248d099b6574f05bd23c954Chris Sosa false, // ping_only 513d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateIgnoredPerPolicy, 51477f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::CheckResult::kUpdateAvailable, 51577f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::CheckReaction::kIgnored, 51677f79e876a77796fc248d099b6574f05bd23c954Chris Sosa metrics::DownloadErrorCode::kUnset, 51777f79e876a77796fc248d099b6574f05bd23c954Chris Sosa &response, 51888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 51977f79e876a77796fc248d099b6574f05bd23c954Chris Sosa EXPECT_FALSE(response.update_exists); 52077f79e876a77796fc248d099b6574f05bd23c954Chris Sosa} 52177f79e876a77796fc248d099b6574f05bd23c954Chris Sosa 522e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, WallClockBasedWaitAloneCausesScattering) { 523480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 524e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 525ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 526ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(false); 527ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta::FromDays(2)); 528480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 529480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_FALSE( 530e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(¶ms, 5318e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 532480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 533480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 534d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateDeferredPerPolicy, 53533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 53633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 53733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 538480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 53988b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 540480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_FALSE(response.update_exists); 541968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 542968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 543968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 544968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 545e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(¶ms, 5468e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 547968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 548968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 549d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 55033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 55133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 55233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 553968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 55488b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 555968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 556480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 557480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 558e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, NoWallClockBasedWaitCausesNoScattering) { 559480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 560e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 561ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(false); 562ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta::FromDays(2)); 563480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 564ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 565ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 566ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 567480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 568480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE( 569e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(¶ms, 5708e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 571480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 572480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 573d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 57433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 57533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 57633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 577480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 57888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 579480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_TRUE(response.update_exists); 580480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 581480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 582e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, ZeroMaxDaysToScatterCausesNoScattering) { 583480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 584e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 585ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 586ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta::FromDays(2)); 587480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 588ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 589ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 590ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 591480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 5928e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.max_days_to_scatter = "0"; 593480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE( 594e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(¶ms, 5958e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 596480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 597480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 598d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 59933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 60033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 60133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 602480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 60388b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 604480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_TRUE(response.update_exists); 605480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 606480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 607480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 608e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, ZeroUpdateCheckCountCausesNoScattering) { 609480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 610e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 611ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 612ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta()); 613480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 614ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 615ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(0); 616ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(0); 617480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 618480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_TRUE(TestUpdateCheck( 619d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 6208e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 621480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 622480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 623d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 62433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 62533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 62633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 627480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 62888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 629480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 6309abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t count; 631e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_TRUE(fake_prefs_.GetInt64(kPrefsUpdateCheckCount, &count)); 632d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ASSERT_EQ(count, 0); 633480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_TRUE(response.update_exists); 634480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 635480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 636e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, NonZeroUpdateCheckCountCausesScattering) { 637480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 638e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 639ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 640ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta()); 641480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 642ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 643ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 644ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 645480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 646480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_FALSE(TestUpdateCheck( 647d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 6488e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 649480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 650480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 651d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateDeferredPerPolicy, 65233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 65333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 65433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 655480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 65688b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 657480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 6589abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t count; 659e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_TRUE(fake_prefs_.GetInt64(kPrefsUpdateCheckCount, &count)); 660d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ASSERT_GT(count, 0); 661480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_FALSE(response.update_exists); 662968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 663968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 664968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 665968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 666e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(¶ms, 6678e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 668968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 669968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 670d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 67133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 67233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 67333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 674968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 67588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 676968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 677480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 678480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 679e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, ExistingUpdateCheckCountCausesScattering) { 680480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan OmahaResponse response; 681e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 682ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 683ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta()); 684480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 685ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(true); 686ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_min_update_checks_needed(1); 687ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_max_update_checks_allowed(8); 688480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 689e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_TRUE(fake_prefs_.SetInt64(kPrefsUpdateCheckCount, 5)); 690480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 691480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan ASSERT_FALSE(TestUpdateCheck( 692d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 6938e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 694480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan -1, 695480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan false, // ping_only 696d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateDeferredPerPolicy, 69733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 69833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 69933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 700480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan &response, 70188b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 702480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan 7039abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t count; 704e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_TRUE(fake_prefs_.GetInt64(kPrefsUpdateCheckCount, &count)); 705480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan // count remains the same, as the decrementing happens in update_attempter 706480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan // which this test doesn't exercise. 707d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ASSERT_EQ(count, 5); 708480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan EXPECT_FALSE(response.update_exists); 709968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 710968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 711968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 712968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 713e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(¶ms, 7148e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 715968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 716968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 717d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 71833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 71933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 72033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 721968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 72288b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 723968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 724480ddfa079ebd01ed87e495332dec121d9ae781fJay Srinivasan} 7250a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 7268e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex DeymoTEST_F(OmahaRequestActionTest, CohortsArePersisted) { 7278e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo OmahaResponse response; 7288e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo OmahaRequestParams params = request_params_; 7298e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.include_cohorts = true; 7308e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.cohort = "s/154454/8479665"; 7318e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.cohorthint = "please-put-me-on-beta"; 7328e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.cohortname = "stable"; 7338e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7348e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo ASSERT_TRUE(TestUpdateCheck(¶ms, 7358e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 7368e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo -1, 7378e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo false, // ping_only 7388e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo ErrorCode::kSuccess, 7398e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo metrics::CheckResult::kUpdateAvailable, 7408e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo metrics::CheckReaction::kUpdating, 7418e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo metrics::DownloadErrorCode::kUnset, 7428e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo &response, 7438e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo nullptr)); 7448e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7458e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string value; 7468e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsOmahaCohort, &value)); 7478e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.cohort, value); 7488e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7498e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsOmahaCohortHint, &value)); 7508e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.cohorthint, value); 7518e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7528e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsOmahaCohortName, &value)); 7538e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.cohortname, value); 7548e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo} 7558e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7568e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex DeymoTEST_F(OmahaRequestActionTest, CohortsAreUpdated) { 7578e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo OmahaResponse response; 7588e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo OmahaRequestParams params = request_params_; 7598e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.SetString(kPrefsOmahaCohort, "old_value")); 7608e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.SetString(kPrefsOmahaCohortHint, "old_hint")); 7618e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.SetString(kPrefsOmahaCohortName, "old_name")); 7628e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.include_cohorts = true; 7638e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.cohort = "s/154454/8479665"; 7648e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.cohorthint = "please-put-me-on-beta"; 7658e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.cohortname = ""; 7668e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7678e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo ASSERT_TRUE(TestUpdateCheck(¶ms, 7688e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 7698e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo -1, 7708e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo false, // ping_only 7718e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo ErrorCode::kSuccess, 7728e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo metrics::CheckResult::kUpdateAvailable, 7738e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo metrics::CheckReaction::kUpdating, 7748e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo metrics::DownloadErrorCode::kUnset, 7758e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo &response, 7768e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo nullptr)); 7778e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7788e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string value; 7798e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsOmahaCohort, &value)); 7808e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.cohort, value); 7818e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7828e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsOmahaCohortHint, &value)); 7838e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(fake_update_response_.cohorthint, value); 7848e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7858e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_FALSE(fake_prefs_.GetString(kPrefsOmahaCohortName, &value)); 7868e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo} 7878e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7888e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex DeymoTEST_F(OmahaRequestActionTest, CohortsAreNotModifiedWhenMissing) { 7898e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo OmahaResponse response; 7908e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo OmahaRequestParams params = request_params_; 7918e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.SetString(kPrefsOmahaCohort, "old_value")); 7928e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 7938e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo ASSERT_TRUE(TestUpdateCheck(¶ms, 7948e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 7958e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo -1, 7968e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo false, // ping_only 7978e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo ErrorCode::kSuccess, 7988e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo metrics::CheckResult::kUpdateAvailable, 7998e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo metrics::CheckReaction::kUpdating, 8008e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo metrics::DownloadErrorCode::kUnset, 8018e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo &response, 8028e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo nullptr)); 8038e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 8048e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo string value; 8058e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsOmahaCohort, &value)); 8068e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ("old_value", value); 8078e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 8088e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_FALSE(fake_prefs_.GetString(kPrefsOmahaCohortHint, &value)); 8098e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_FALSE(fake_prefs_.GetString(kPrefsOmahaCohortName, &value)); 8108e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo} 8118e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo 81200d79acf5b081e80978fb0e07caeae77b99f0372Alex DeymoTEST_F(OmahaRequestActionTest, CohortsArePersistedWhenNoUpdate) { 81300d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo OmahaResponse response; 81400d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo OmahaRequestParams params = request_params_; 81500d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo fake_update_response_.include_cohorts = true; 81600d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo fake_update_response_.cohort = "s/154454/8479665"; 81700d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo fake_update_response_.cohorthint = "please-put-me-on-beta"; 81800d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo fake_update_response_.cohortname = "stable"; 81900d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo 82000d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo ASSERT_TRUE(TestUpdateCheck(¶ms, 82100d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo fake_update_response_.GetNoUpdateResponse(), 82200d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo -1, 82300d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo false, // ping_only 82400d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo ErrorCode::kSuccess, 82500d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo metrics::CheckResult::kNoUpdateAvailable, 82600d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo metrics::CheckReaction::kUnset, 82700d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo metrics::DownloadErrorCode::kUnset, 82800d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo &response, 82900d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo nullptr)); 83000d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo 83100d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo string value; 83200d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsOmahaCohort, &value)); 83300d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo EXPECT_EQ(fake_update_response_.cohort, value); 83400d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo 83500d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsOmahaCohortHint, &value)); 83600d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo EXPECT_EQ(fake_update_response_.cohorthint, value); 83700d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo 83800d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsOmahaCohortName, &value)); 83900d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo EXPECT_EQ(fake_update_response_.cohortname, value); 84000d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo} 84100d79acf5b081e80978fb0e07caeae77b99f0372Alex Deymo 842e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, NoOutputPipeTest) { 8438e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo const string http_response(fake_update_response_.GetNoUpdateResponse()); 8446a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 8453f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::FakeMessageLoop loop(nullptr); 84660ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.SetAsCurrent(); 8476a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 848e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 849e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_request_params(¶ms); 850e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestAction action(&fake_system_state_, nullptr, 851c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo brillo::make_unique_ptr( 852c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo new MockHttpFetcher(http_response.data(), 853c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo http_response.size(), 854c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo nullptr)), 855116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 8566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate delegate; 8576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 8586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 8596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 8606a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 86160ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.PostTask(base::Bind([&processor] { processor.StartProcessing(); })); 86260ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.Run(); 86360ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo EXPECT_FALSE(loop.PendingTasks()); 8646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(processor.IsRunning()); 8656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 8666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 867e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, InvalidXmlTest) { 8686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 8696a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_FALSE( 870e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 8710dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 872edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 873265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 874d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 87533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 87633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 87733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 878edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 87988b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 880edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 881edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 882edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 883e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, EmptyResponseTest) { 884edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 885edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 886e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 887edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 888edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 889265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 890d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestEmptyResponseError, 89133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 89233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 89333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 8940dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 89588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 8966a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 8976a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 8986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 899e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, MissingStatusTest) { 9006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 9010dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 902e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo nullptr, // request_params 90323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 90423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 90523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"foo\" status=\"ok\">" 90623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/>" 90723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck/></app></response>", 908edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 909265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 910d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaResponseInvalid, 91133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 91233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 91333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 9146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 91588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 9166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 9176a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 9186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 919e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, InvalidStatusTest) { 9206a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 9210dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 922e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo nullptr, // request_params 92323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 92423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 92523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"foo\" status=\"ok\">" 92623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/>" 92723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"InvalidStatusTest\"/></app></response>", 928edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 929265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 930d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaResponseInvalid, 93133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 93233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 93333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 9346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 93588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 9366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 9376a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 9386a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 939e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, MissingNodesetTest) { 9406a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 9410dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 942e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo nullptr, // request_params 94323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 94423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 94523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"foo\" status=\"ok\">" 94623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<ping status=\"ok\"/>" 94723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "</app></response>", 948edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 949265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 950d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaResponseInvalid, 95133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 95233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 95333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 9546a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 95588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 9566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 9576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 9586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 959e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, MissingFieldTest) { 96023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan string input_response = 96123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response protocol=\"3.0\">" 96223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<daystart elapsed_seconds=\"100\"/>" 96323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<app appid=\"xyz\" status=\"ok\">" 96423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"ok\">" 96523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<urls><url codebase=\"http://missing/field/test/\"/></urls>" 9663b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa "<manifest version=\"10.2.3.4\">" 96723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<packages><package hash=\"not-used\" name=\"f\" " 96823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "size=\"587\"/></packages>" 96923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<actions><action event=\"postinstall\" " 97023b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "ChromeOSVersion=\"10.2.3.4\" " 97123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "Prompt=\"false\" " 97223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "IsDelta=\"true\" " 973d671e97c8cc87c71a01ee3e4a889753ea9bec35fJay Srinivasan "IsDeltaPayload=\"false\" " 97423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "sha256=\"lkq34j5345\" " 97523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "needsadmin=\"true\" " 97623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "/></actions></manifest></updatecheck></app></response>"; 97723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan LOG(INFO) << "Input Response = " << input_response; 97823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan 9796a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 980e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_TRUE(TestUpdateCheck(nullptr, // request_params 98123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan input_response, 982edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 983265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 984d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 98533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 98633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 98733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 9880dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 98988b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 9906a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.update_exists); 9913b74843840fda8e6954986bdd6a9fccc835d5580Chris Sosa EXPECT_EQ("10.2.3.4", response.version); 9926f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan EXPECT_EQ("http://missing/field/test/f", response.payload_urls[0]); 9936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("", response.more_info_url); 99423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ("lkq34j5345", response.hash); 99523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(587, response.size); 9966a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.prompt); 9976c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_TRUE(response.deadline.empty()); 9986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 9996a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace { 10016a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass TerminateEarlyTestProcessorDelegate : public ActionProcessorDelegate { 10026a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 10036a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void ProcessingStopped(const ActionProcessor* processor) { 10043f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::MessageLoop::current()->BreakLoop(); 10056a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 10066a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 10076a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 100860ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymovoid TerminateTransferTestStarter(ActionProcessor* processor) { 10096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StartProcessing(); 10106a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov CHECK(processor->IsRunning()); 10116a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StopProcessing(); 10126a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 1013d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko} // namespace 10146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1015e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, TerminateTransferTest) { 10163f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::FakeMessageLoop loop(nullptr); 101760ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.SetAsCurrent(); 10186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 101960ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo string http_response("doesn't matter"); 1020e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestAction action(&fake_system_state_, nullptr, 1021c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo brillo::make_unique_ptr( 1022c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo new MockHttpFetcher(http_response.data(), 1023c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo http_response.size(), 1024c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo nullptr)), 1025116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 10266a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov TerminateEarlyTestProcessorDelegate delegate; 10276a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 10286a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 10296a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 10306a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 103160ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.PostTask(base::Bind(&TerminateTransferTestStarter, &processor)); 103260ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo loop.Run(); 103360ca1a7bca7cc804ec80b510483081ef894de4cdAlex Deymo EXPECT_FALSE(loop.PendingTasks()); 10346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 10356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1036e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, XmlEncodeTest) { 1037b0d74eb91183eef5955974c515e40c994098372fAlex Deymo string output; 1038b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_TRUE(XmlEncode("ab", &output)); 1039b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_EQ("ab", output); 1040b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_TRUE(XmlEncode("a<b", &output)); 1041b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_EQ("a<b", output); 1042cc4578542d44889453db197672c97d8c3d3d9a1eAlex Deymo EXPECT_TRUE(XmlEncode("<&>\"\'\\", &output)); 1043cc4578542d44889453db197672c97d8c3d3d9a1eAlex Deymo EXPECT_EQ("<&>"'\\", output); 1044b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_TRUE(XmlEncode("<&>", &output)); 1045b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_EQ("&lt;&amp;&gt;", output); 1046cc4578542d44889453db197672c97d8c3d3d9a1eAlex Deymo // Check that unterminated UTF-8 strings are handled properly. 1047b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_FALSE(XmlEncode("\xc2", &output)); 1048b0d74eb91183eef5955974c515e40c994098372fAlex Deymo // Fail with invalid ASCII-7 chars. 1049b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_FALSE(XmlEncode("This is an 'n' with a tilde: \xc3\xb1", &output)); 1050b0d74eb91183eef5955974c515e40c994098372fAlex Deymo} 1051b0d74eb91183eef5955974c515e40c994098372fAlex Deymo 1052b0d74eb91183eef5955974c515e40c994098372fAlex DeymoTEST_F(OmahaRequestActionTest, XmlEncodeWithDefaultTest) { 1053b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_EQ("<&>", XmlEncodeWithDefault("<&>", "something else")); 1054b0d74eb91183eef5955974c515e40c994098372fAlex Deymo EXPECT_EQ("<not escaped>", XmlEncodeWithDefault("\xc2", "<not escaped>")); 1055b0d74eb91183eef5955974c515e40c994098372fAlex Deymo} 10566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1057b0d74eb91183eef5955974c515e40c994098372fAlex DeymoTEST_F(OmahaRequestActionTest, XmlEncodeIsUsedForParams) { 10583f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 10596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 10606a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Make sure XML Encode is being called on the params 1061e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params(&fake_system_state_, 1062ac41a82e4be1be43913292d13d58b5eb2c572f53Alex Deymo constants::kOmahaPlatformName, 10636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestParams::kOsVersion, 10646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "testtheservice_pack>", 10651cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "x86 generic<id", 1066856166594771c61973856f563e622ccb7dd48aa1Alex Deymo kTestAppId, 10676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "0.1.0.0", 10686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "en-US", 10691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "unittest_track<", 1070fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "<OEM MODEL>", 1071c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 1072c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "EC100", 1073d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // delta okay 1074d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // interactive 10750a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://url", 107674b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold ""); // target_version_prefix 10778e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_prefs_.SetString(kPrefsOmahaCohort, "evil\nstring"); 10788e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_prefs_.SetString(kPrefsOmahaCohortHint, "evil&string\\"); 10798e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_prefs_.SetString(kPrefsOmahaCohortName, 10800103c36caa2e38e034e0d22185736b9ccfb35c58Alex Vakulenko base::JoinString( 10810103c36caa2e38e034e0d22185736b9ccfb35c58Alex Vakulenko vector<string>(100, "My spoon is too big."), " ")); 10826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 10836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_FALSE( 1084e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(¶ms, 10850dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 1086edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1087265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1088d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 108933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 109033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 109133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 10920dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 10930dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &post_data)); 10946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // convert post_data to string 1095f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 10968e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_NE(string::npos, post_str.find("testtheservice_pack>")); 10978e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(string::npos, post_str.find("testtheservice_pack>")); 10988e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_NE(string::npos, post_str.find("x86 generic<id")); 10998e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(string::npos, post_str.find("x86 generic<id")); 11008e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_NE(string::npos, post_str.find("unittest_track&lt;")); 11018e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(string::npos, post_str.find("unittest_track<")); 11028e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_NE(string::npos, post_str.find("<OEM MODEL>")); 11038e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(string::npos, post_str.find("<OEM MODEL>")); 11048e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_NE(string::npos, post_str.find("cohort=\"evil\nstring\"")); 11058e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(string::npos, post_str.find("cohorthint=\"evil&string\\\"")); 11068e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_NE(string::npos, post_str.find("cohorthint=\"evil&string\\\"")); 11078e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo // Values from Prefs that are too big are removed from the XML instead of 11088e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo // encoded. 11098e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo EXPECT_EQ(string::npos, post_str.find("cohortname=")); 11106a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 11116a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1112e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, XmlDecodeTest) { 11136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 11148e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.deadline = "<20110101"; 11158e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.more_info_url = "testthe<url"; 11168e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.codebase = "testthe&codebase/"; 11176a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 1118e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 11198e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 1120edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1121265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1122d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 112333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 112433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 112533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 11260dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 112788b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 11286a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11296a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(response.more_info_url, "testthe<url"); 11306f6ea00aa8c4cf54b6842be32ca1226854c24f78Jay Srinivasan EXPECT_EQ(response.payload_urls[0], "testthe&codebase/file.signed"); 11316c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_EQ(response.deadline, "<20110101"); 11326a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 11336a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1134e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, ParseIntTest) { 11356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 11368e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo // overflows int32_t: 11378e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.size = 123123123123123ll; 11386a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 1139e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 11408e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 1141edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1142265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1143d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 114433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 114533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 114633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 11470dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 114888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 11496a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 11506a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(response.size, 123123123123123ll); 11516a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 11526a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1153e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, FormatUpdateCheckOutputTest) { 11543f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 11558427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1156e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 1157e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 115895508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_CALL(prefs, GetString(kPrefsPreviousVersion, _)) 115995508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(string("")), Return(true))); 1160efb9d8394c58054cc8ebe1efd0fd2c5e7b4b344aAlex Deymo // An existing but empty previous version means that we didn't reboot to a new 1161efb9d8394c58054cc8ebe1efd0fd2c5e7b4b344aAlex Deymo // update, therefore, no need to update the previous version. 1162efb9d8394c58054cc8ebe1efd0fd2c5e7b4b344aAlex Deymo EXPECT_CALL(prefs, SetString(kPrefsPreviousVersion, _)).Times(0); 1163e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_FALSE(TestUpdateCheck(nullptr, // request_params 11640dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 1165edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1166265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1167d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 116833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 116933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 117033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 117188b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, // response 11720dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &post_data)); 11730dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov // convert post_data to string 1174f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 1175116fda3221ff3df037ea1feb271883c87644c839Thieu Le EXPECT_NE(post_str.find( 117623b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <ping active=\"1\" a=\"-1\" r=\"-1\"></ping>\n" 1177ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan " <updatecheck targetversionprefix=\"\"></updatecheck>\n"), 11780a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan string::npos); 1179fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_NE(post_str.find("hardware_class=\"OEM MODEL 09235 7471\""), 1180fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov string::npos); 1181c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("fw_version=\"ChromeOSFirmware.1.0\""), 1182c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 1183c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa EXPECT_NE(post_str.find("ec_version=\"0X0A1\""), 1184c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa string::npos); 1185efb9d8394c58054cc8ebe1efd0fd2c5e7b4b344aAlex Deymo // No <event> tag should be sent if we didn't reboot to an update. 1186efb9d8394c58054cc8ebe1efd0fd2c5e7b4b344aAlex Deymo EXPECT_EQ(post_str.find("<event"), string::npos); 11870dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 11880dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 11890a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan 1190e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, FormatSuccessEventOutputTest) { 11913f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 1192e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestEvent(request_params_, 1193e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeUpdateDownloadStarted), 1194e17f86bae4299882232d3e6858ada68692e80501Darin Petkov "invalid xml>", 1195e17f86bae4299882232d3e6858ada68692e80501Darin Petkov &post_data); 1196e17f86bae4299882232d3e6858ada68692e80501Darin Petkov // convert post_data to string 1197f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 119875039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko string expected_event = base::StringPrintf( 119923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <event eventtype=\"%d\" eventresult=\"%d\"></event>\n", 1200e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kTypeUpdateDownloadStarted, 1201e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultSuccess); 1202e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_NE(post_str.find(expected_event), string::npos); 120323b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("ping"), string::npos); 120423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("updatecheck"), string::npos); 1205e17f86bae4299882232d3e6858ada68692e80501Darin Petkov} 1206e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1207e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, FormatErrorEventOutputTest) { 12083f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 1209e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestEvent(request_params_, 1210e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeDownloadComplete, 1211e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 1212d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kError), 1213e17f86bae4299882232d3e6858ada68692e80501Darin Petkov "invalid xml>", 1214e17f86bae4299882232d3e6858ada68692e80501Darin Petkov &post_data); 1215e17f86bae4299882232d3e6858ada68692e80501Darin Petkov // convert post_data to string 1216f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 121775039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko string expected_event = base::StringPrintf( 121823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan " <event eventtype=\"%d\" eventresult=\"%d\" " 121923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "errorcode=\"%d\"></event>\n", 1220e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kTypeDownloadComplete, 1221e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 1222d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<int>(ErrorCode::kError)); 12230dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_NE(post_str.find(expected_event), string::npos); 122423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("updatecheck"), string::npos); 12250dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 12260dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 1227e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, IsEventTest) { 12280dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string http_response("doesn't matter"); 1229e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // Create a copy of the OmahaRequestParams to reuse it later. 1230e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 1231e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_request_params(¶ms); 12320dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestAction update_check_action( 1233e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo &fake_system_state_, 123488b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 1235c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo brillo::make_unique_ptr( 1236c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo new MockHttpFetcher(http_response.data(), 1237c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo http_response.size(), 1238c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo nullptr)), 1239116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 12400dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_FALSE(update_check_action.IsEvent()); 12410dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 1242e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo params = request_params_; 1243e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_request_params(¶ms); 12440dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestAction event_action( 1245e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo &fake_system_state_, 1246e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeUpdateComplete), 1247c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo brillo::make_unique_ptr( 1248c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo new MockHttpFetcher(http_response.data(), 1249c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo http_response.size(), 1250c1c17b4ed6a3896b6343e737fd89682fa0c8436bAlex Deymo nullptr)), 1251116fda3221ff3df037ea1feb271883c87644c839Thieu Le false); 12520dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_TRUE(event_action.IsEvent()); 12530dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 12540dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 1255e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, FormatDeltaOkayOutputTest) { 12563f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes for (int i = 0; i < 2; i++) { 12573f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes bool delta_okay = i == 1; 12583f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes const char* delta_okay_str = delta_okay ? "true" : "false"; 12593f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 1260e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params(&fake_system_state_, 1261ac41a82e4be1be43913292d13d58b5eb2c572f53Alex Deymo constants::kOmahaPlatformName, 12623f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes OmahaRequestParams::kOsVersion, 12633f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "service_pack", 12643f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "x86-generic", 1265856166594771c61973856f563e622ccb7dd48aa1Alex Deymo kTestAppId, 12663f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "0.1.0.0", 12673f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "en-US", 12683f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "unittest_track", 1269fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "OEM MODEL REV 1234", 1270c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 1271c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "EC100", 12723f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes delta_okay, 1273bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold false, // interactive 12740a70874c61118a2b276edc731ad890c6826be2beJay Srinivasan "http://url", 127574b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold ""); // target_version_prefix 1276e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_FALSE(TestUpdateCheck(¶ms, 12773f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "invalid xml>", 1278edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1279265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1280d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 128133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 128233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 128333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 128488b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 12853f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes &post_data)); 12863f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes // convert post_data to string 1287f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 128875039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko EXPECT_NE(post_str.find(base::StringPrintf(" delta_okay=\"%s\"", 128975039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko delta_okay_str)), 12903f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes string::npos) 12913f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes << "i = " << i; 12923f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes } 12933f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes} 12943f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes 1295e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, FormatInteractiveOutputTest) { 1296bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold for (int i = 0; i < 2; i++) { 1297bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold bool interactive = i == 1; 12988a659d80dc1912c664ef16f0bc66acaa01bd8b73Gilad Arnold const char* interactive_str = interactive ? "ondemandupdate" : "scheduler"; 12993f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 13005bb4c90b8bdf931426d1926b21b0316a86b4b4e4Gilad Arnold FakeSystemState fake_system_state; 1301e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params(&fake_system_state_, 1302ac41a82e4be1be43913292d13d58b5eb2c572f53Alex Deymo constants::kOmahaPlatformName, 1303bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold OmahaRequestParams::kOsVersion, 1304bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "service_pack", 1305bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "x86-generic", 1306856166594771c61973856f563e622ccb7dd48aa1Alex Deymo kTestAppId, 1307bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "0.1.0.0", 1308bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "en-US", 1309bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "unittest_track", 1310bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "OEM MODEL REV 1234", 1311c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "ChromeOSFirmware.1.0", 1312c1972483fa3446852b42ce97d1ea43b9caaaf56fChris Sosa "EC100", 13138f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen true, // delta_okay 1314bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold interactive, 1315bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "http://url", 131674b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold ""); // target_version_prefix 1317e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_FALSE(TestUpdateCheck(¶ms, 1318bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold "invalid xml>", 1319bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold -1, 1320bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold false, // ping_only 1321d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 132233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 132333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 132433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 132588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 1326bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold &post_data)); 1327bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold // convert post_data to string 1328f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 132975039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko EXPECT_NE(post_str.find(base::StringPrintf("installsource=\"%s\"", 133075039d7397f03dff77bdf4e26398049ff88edc4cAlex Vakulenko interactive_str)), 1331bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold string::npos) 1332bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold << "i = " << i; 1333bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold } 1334bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold} 1335bbdd4909bcd20448ad89aa1e02c936e42aedf548Gilad Arnold 1336e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, OmahaEventTest) { 1337e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent default_event; 1338e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUnknown, default_event.type); 1339e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultError, default_event.result); 1340d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold EXPECT_EQ(ErrorCode::kError, default_event.error_code); 1341e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1342e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent success_event(OmahaEvent::kTypeUpdateDownloadStarted); 1343e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUpdateDownloadStarted, success_event.type); 1344e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultSuccess, success_event.result); 1345d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold EXPECT_EQ(ErrorCode::kSuccess, success_event.error_code); 1346e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1347e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent error_event(OmahaEvent::kTypeUpdateDownloadFinished, 1348e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 1349d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kError); 1350e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUpdateDownloadFinished, error_event.type); 1351e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultError, error_event.result); 1352d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold EXPECT_EQ(ErrorCode::kError, error_event.error_code); 1353e17f86bae4299882232d3e6858ada68692e80501Darin Petkov} 1354e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 1355e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymovoid OmahaRequestActionTest::PingTest(bool ping_only) { 13568427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1357e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 1358e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 1359e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo .Times(AnyNumber()); 1360e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 1361e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // Add a few hours to the day difference to test no rounding, etc. 1362e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo int64_t five_days_ago = 1363e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo (Time::Now() - TimeDelta::FromHours(5 * 24 + 13)).ToInternalValue(); 1364e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo int64_t six_days_ago = 1365e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo (Time::Now() - TimeDelta::FromHours(6 * 24 + 11)).ToInternalValue(); 1366e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1367e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 1368e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 1369e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo .WillOnce(DoAll(SetArgumentPointee<1>(six_days_ago), Return(true))); 1370e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 1371e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo .WillOnce(DoAll(SetArgumentPointee<1>(five_days_ago), Return(true))); 13723f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 1373e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_TRUE( 1374e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 13758e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetNoUpdateResponse(), 1376e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo -1, 1377e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ping_only, 1378e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ErrorCode::kSuccess, 1379e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo metrics::CheckResult::kUnset, 1380e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo metrics::CheckReaction::kUnset, 1381e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo metrics::DownloadErrorCode::kUnset, 1382e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo nullptr, 1383e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo &post_data)); 1384f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 1385e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_NE(post_str.find("<ping active=\"1\" a=\"6\" r=\"5\"></ping>"), 1386e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo string::npos); 1387e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo if (ping_only) { 1388e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(post_str.find("updatecheck"), string::npos); 1389e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(post_str.find("previousversion"), string::npos); 1390e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo } else { 1391e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_NE(post_str.find("updatecheck"), string::npos); 1392e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_NE(post_str.find("previousversion"), string::npos); 1393265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov } 13941cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 13951cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1396e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, PingTestSendOnlyAPing) { 1397e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo PingTest(true /* ping_only */); 1398e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo} 1399e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 1400e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, PingTestSendAlsoAnUpdateCheck) { 1401e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo PingTest(false /* ping_only */); 1402e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo} 1403e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 1404e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, ActivePingTest) { 14058427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1406e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 140733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 140833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 140933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 14101cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t three_days_ago = 14111cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(3 * 24 + 12)).ToInternalValue(); 14121cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t now = Time::Now().ToInternalValue(); 1413639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1414639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 14151cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 14161cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(three_days_ago), Return(true))); 14171cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 14181cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 14193f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 14201cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 1421e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 14228e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetNoUpdateResponse(), 1423edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1424265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1425d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 142633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 142733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 142833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 142988b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 14301cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 1431f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 143223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("<ping active=\"1\" a=\"3\"></ping>"), 1433116fda3221ff3df037ea1feb271883c87644c839Thieu Le string::npos); 14341cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 14351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1436e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, RollCallPingTest) { 14378427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1438e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 143933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 144033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 144133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 14421cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t four_days_ago = 14431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(4 * 24)).ToInternalValue(); 14441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t now = Time::Now().ToInternalValue(); 1445639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1446639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 14471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 14481cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 14491cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 14501cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(four_days_ago), Return(true))); 14513f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 14521cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 1453e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 14548e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetNoUpdateResponse(), 1455edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1456265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1457d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 145833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 145933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 146033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 146188b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 14621cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 1463f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 146423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_NE(post_str.find("<ping active=\"1\" r=\"4\"></ping>\n"), 1465116fda3221ff3df037ea1feb271883c87644c839Thieu Le string::npos); 14661cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 14671cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1468e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, NoPingTest) { 14698427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1470e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 147133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 147233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 147333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 14741cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t one_hour_ago = 14751cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(1)).ToInternalValue(); 1476639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1477639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 14781cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 14791cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); 14801cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 14811cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); 1482ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // LastActivePingDay and PrefsLastRollCallPingDay are set even if we didn't 1483ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // send a ping. 1484ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)) 1485ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo .WillOnce(Return(true)); 1486ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)) 1487ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo .WillOnce(Return(true)); 14883f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 14891cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 1490e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 14918e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetNoUpdateResponse(), 1492edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1493265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1494d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 149533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 149633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 149733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 149888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 14991cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 1500f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 150123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("ping"), string::npos); 15021cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 15031cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1504e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, IgnoreEmptyPingTest) { 1505b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le // This test ensures that we ignore empty ping only requests. 15068427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1507e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 1508b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le int64_t now = Time::Now().ToInternalValue(); 1509b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 1510b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 1511b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 1512b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 1513b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 1514b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 15153f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 1516b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le EXPECT_TRUE( 1517e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 15188e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetNoUpdateResponse(), 1519b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le -1, 1520b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le true, // ping_only 1521d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 152233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUnset, 152333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 152433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 152588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 1526b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le &post_data)); 152780f70ff45f8ea9a679c0c3ed0dc143dd2fe2b63eAlex Deymo EXPECT_EQ(0U, post_data.size()); 1528b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le} 1529b44e9e8fcfdac6432ba45867fce0ec8557860734Thieu Le 1530e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, BackInTimePingTest) { 15318427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1532e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 153333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsMetricsCheckLastReportingTime, _)) 153433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen .Times(AnyNumber()); 153533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 15361cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t future = 15371cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() + TimeDelta::FromHours(3 * 24 + 4)).ToInternalValue(); 1538639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_CALL(prefs, GetInt64(kPrefsInstallDateDays, _)) 1539639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen .WillOnce(DoAll(SetArgumentPointee<1>(0), Return(true))); 15401cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 15411cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); 15421cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 15431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); 15441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)) 15451cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 15461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)) 15471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 15483f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 15491cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 1550e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 155123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 155223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart elapsed_seconds=\"100\"/>" 15531cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 155423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1555edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1556265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1557d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 155833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 155933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 156033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 156188b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 15621cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 1563f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 156423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan EXPECT_EQ(post_str.find("ping"), string::npos); 15651cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 15661cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1567e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, LastPingDayUpdateTest) { 15681cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // This test checks that the action updates the last ping day to now 156984c763cffce6778711792944387fadb760c55c8dDarin Petkov // minus 200 seconds with a slack of 5 seconds. Therefore, the test 15701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // may fail if it runs for longer than 5 seconds. It shouldn't run 15711cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // that long though. 15721cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t midnight = 15731cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromSeconds(200)).ToInternalValue(); 15741cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t midnight_slack = 15751cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromSeconds(195)).ToInternalValue(); 15768427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1577e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 157833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(_, _)).Times(AnyNumber()); 157933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 15801cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, 15811cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov AllOf(Ge(midnight), Le(midnight_slack)))) 15821cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 15831cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, 15841cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov AllOf(Ge(midnight), Le(midnight_slack)))) 15851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 15861cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 1587e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 158823b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 158923b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart elapsed_seconds=\"200\"/>" 15901cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 159123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1592edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1593265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1594d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 159533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 159633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 159733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 159888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 159988b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 16001cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 16011cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1602e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, NoElapsedSecondsTest) { 16038427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1604e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 160533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(_, _)).Times(AnyNumber()); 160633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 16071cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 16081cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 16091cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 1610e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 161123b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 161223b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart blah=\"200\"/>" 16131cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 161423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1615edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1616265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1617d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 161833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 161933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 162033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 162188b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 162288b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 16231cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 16241cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1625e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, BadElapsedSecondsTest) { 16268427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1627e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 162833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, GetInt64(_, _)).Times(AnyNumber()); 162933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen EXPECT_CALL(prefs, SetInt64(_, _)).Times(AnyNumber()); 16301cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 16311cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 16321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 1633e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 163423b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response " 163523b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "protocol=\"3.0\"><daystart elapsed_seconds=\"x\"/>" 16361cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 163723b92a52e8781d68c451d6cd5e67aab1e5f82264Jay Srinivasan "<updatecheck status=\"noupdate\"/></app></response>", 1638edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1639265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1640d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 164133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kNoUpdateAvailable, 164233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 164333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 164488b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, 164588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 16461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 16471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 1648e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, NoUniqueIDTest) { 16493f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 1650e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_FALSE(TestUpdateCheck(nullptr, // request_params 165184c763cffce6778711792944387fadb760c55c8dDarin Petkov "invalid xml>", 1652edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 1653265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1654d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 165533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 165633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 165733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 165888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, // response 165984c763cffce6778711792944387fadb760c55c8dDarin Petkov &post_data)); 166084c763cffce6778711792944387fadb760c55c8dDarin Petkov // convert post_data to string 1661f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 166284c763cffce6778711792944387fadb760c55c8dDarin Petkov EXPECT_EQ(post_str.find("machineid="), string::npos); 166384c763cffce6778711792944387fadb760c55c8dDarin Petkov EXPECT_EQ(post_str.find("userid="), string::npos); 166484c763cffce6778711792944387fadb760c55c8dDarin Petkov} 166584c763cffce6778711792944387fadb760c55c8dDarin Petkov 1666e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, NetworkFailureTest) { 1667edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 1668d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold const int http_error_code = 1669d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<int>(ErrorCode::kOmahaRequestHTTPResponseBase) + 501; 1670edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 1671e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 1672edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 1673edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 501, 1674265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1675d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<ErrorCode>(http_error_code), 167633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kDownloadError, 167733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 167833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen static_cast<metrics::DownloadErrorCode>(501), 1679edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 168088b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 1681edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 1682edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 1683edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 1684e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, NetworkFailureBadHTTPCodeTest) { 1685edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 1686d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold const int http_error_code = 1687d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<int>(ErrorCode::kOmahaRequestHTTPResponseBase) + 999; 1688edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 1689e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 1690edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 1691edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 1500, 1692265f290d2be0a68b6266d5962f7c23290c0ced5fDarin Petkov false, // ping_only 1693d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold static_cast<ErrorCode>(http_error_code), 169433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kDownloadError, 169533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 169633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kHttpStatusOther, 1697edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 169888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 1699edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 1700edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 1701edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 1702e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, TestUpdateFirstSeenAtGetsPersistedFirstTime) { 170334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaResponse response; 1704e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 1705ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 1706ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta().FromDays(1)); 1707ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(false); 170834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 170934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_FALSE(TestUpdateCheck( 1710d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 17118e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 171234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan -1, 171334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan false, // ping_only 1714d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaUpdateDeferredPerPolicy, 171533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 171633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kDeferring, 171733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 171834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &response, 171988b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 172034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 17219abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t timestamp = 0; 1722e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_TRUE(fake_prefs_.GetInt64(kPrefsUpdateFirstSeenAt, ×tamp)); 1723d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ASSERT_GT(timestamp, 0); 172434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan EXPECT_FALSE(response.update_exists); 1725968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa 1726968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa // Verify if we are interactive check we don't defer. 1727968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa params.set_interactive(true); 1728968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa ASSERT_TRUE( 1729e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(¶ms, 17308e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 1731968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa -1, 1732968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa false, // ping_only 1733d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 173433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 173533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 173633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 1737968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa &response, 173888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 1739968d057f7a37bc981e2a732fb07521cfc8dcb16aChris Sosa EXPECT_TRUE(response.update_exists); 174034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan} 174134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 1742e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, TestUpdateFirstSeenAtGetsUsedIfAlreadyPresent) { 174334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan OmahaResponse response; 1744e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 1745ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_wall_clock_based_wait_enabled(true); 1746ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_waiting_period(TimeDelta().FromDays(1)); 1747ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.set_update_check_count_wait_enabled(false); 174834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 174934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan // Set the timestamp to a very old value such that it exceeds the 175034b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan // waiting period set above. 175134b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Time t1; 175234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan Time::FromString("1/1/2012", &t1); 1753e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_TRUE(fake_prefs_.SetInt64( 1754e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo kPrefsUpdateFirstSeenAt, t1.ToInternalValue())); 175534b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(TestUpdateCheck( 1756d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ¶ms, 17578e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 175834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan -1, 175934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan false, // ping_only 1760d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 176133bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 176233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 176333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 176434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan &response, 176588b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 176634b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 176734b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan EXPECT_TRUE(response.update_exists); 176834b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 176934b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan // Make sure the timestamp t1 is unchanged showing that it was reused. 17709abb763fa3840d69cc1098c0233162557a7f99eaBen Chan int64_t timestamp = 0; 1771e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_TRUE(fake_prefs_.GetInt64(kPrefsUpdateFirstSeenAt, ×tamp)); 177234b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan ASSERT_TRUE(timestamp == t1.ToInternalValue()); 177334b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan} 177434b5d86d057d450325dd06d35ae182ac6da306e4Jay Srinivasan 1775e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, TestChangingToMoreStableChannel) { 1776eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold // Create a uniquely named test directory. 1777eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold string test_dir; 1778eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::MakeTempDirectory( 1779eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold "omaha_request_action-test-XXXXXX", &test_dir)); 1780eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 1781eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc")); 1782eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + 1783be45bef9e283188b00e7def8967f81843669a7f1Chris Sosa kStatefulPartition + "/etc")); 17843f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 17858427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1786e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 1787ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 1788eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + "/etc/lsb-release", 1789ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_APPID={11111111-1111-1111-1111-111111111111}\n" 1790ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_BOARD_APPID={22222222-2222-2222-2222-222222222222}\n" 1791ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=canary-channel\n")); 1792ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 1793eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + kStatefulPartition + "/etc/lsb-release", 1794ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_IS_POWERWASH_ALLOWED=true\n" 1795ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=stable-channel\n")); 1796e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 1797d04f8e24716d5acca6a7d116b63851adc1506845Gilad Arnold params.set_root(test_dir); 1798ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.Init("1.2.3.4", "", 0); 1799ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("canary-channel", params.current_channel()); 1800ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("stable-channel", params.target_channel()); 1801ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params.to_more_stable_channel()); 1802ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_TRUE(params.is_powerwash_allowed()); 1803e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_FALSE(TestUpdateCheck(¶ms, 1804ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "invalid xml>", 1805ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan -1, 1806ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan false, // ping_only 1807d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 180833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 180933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 181033bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 181188b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, // response 1812ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan &post_data)); 1813ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // convert post_data to string 1814f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 1815ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_NE(string::npos, post_str.find( 1816ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "appid=\"{22222222-2222-2222-2222-222222222222}\" " 1817ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "version=\"0.0.0.0\" from_version=\"1.2.3.4\" " 1818ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "track=\"stable-channel\" from_track=\"canary-channel\" ")); 1819eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 1820110e030ba1a37787635e229bd36b42e33b9a9208Alex Deymo ASSERT_TRUE(base::DeleteFile(base::FilePath(test_dir), true)); 1821ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan} 1822ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 1823e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, TestChangingToLessStableChannel) { 1824eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold // Create a uniquely named test directory. 1825eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold string test_dir; 1826eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_TRUE(utils::MakeTempDirectory( 1827eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold "omaha_request_action-test-XXXXXX", &test_dir)); 1828eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold 1829eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + "/etc")); 1830eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold ASSERT_EQ(0, System(string("mkdir -p ") + test_dir + 1831be45bef9e283188b00e7def8967f81843669a7f1Chris Sosa kStatefulPartition + "/etc")); 18323f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 18338427b4a6d0e6e02beedbb53798272f8ddc39386fAlex Deymo NiceMock<MockPrefs> prefs; 1834e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_prefs(&prefs); 1835ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 1836eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + "/etc/lsb-release", 1837ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_APPID={11111111-1111-1111-1111-111111111111}\n" 1838ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_BOARD_APPID={22222222-2222-2222-2222-222222222222}\n" 1839ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=stable-channel\n")); 1840ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan ASSERT_TRUE(WriteFileString( 1841eff87cc42e9d3777a6dcf01bddcdfec152674aceGilad Arnold test_dir + kStatefulPartition + "/etc/lsb-release", 1842ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "CHROMEOS_RELEASE_TRACK=canary-channel\n")); 1843e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams params = request_params_; 1844d04f8e24716d5acca6a7d116b63851adc1506845Gilad Arnold params.set_root(test_dir); 1845ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan params.Init("5.6.7.8", "", 0); 1846ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("stable-channel", params.current_channel()); 1847ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_EQ("canary-channel", params.target_channel()); 1848ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params.to_more_stable_channel()); 1849ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_FALSE(params.is_powerwash_allowed()); 1850e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo ASSERT_FALSE(TestUpdateCheck(¶ms, 1851ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "invalid xml>", 1852ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan -1, 1853ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan false, // ping_only 1854d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kOmahaRequestXMLParseError, 185533bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kParsingError, 185633bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUnset, 185733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 185888b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr, // response 1859ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan &post_data)); 1860ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan // convert post_data to string 1861f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 1862ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan EXPECT_NE(string::npos, post_str.find( 1863ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "appid=\"{11111111-1111-1111-1111-111111111111}\" " 1864ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "version=\"5.6.7.8\" " 1865ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan "track=\"canary-channel\" from_track=\"stable-channel\"")); 1866d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko EXPECT_EQ(string::npos, post_str.find("from_version")); 1867ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan} 1868ae4697c073b84b260990a141acd53c6806da0708Jay Srinivasan 1869ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo// Checks that the initial ping with a=-1 r=-1 is not send when the device 1870ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo// was powerwashed. 1871ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex DeymoTEST_F(OmahaRequestActionTest, PingWhenPowerwashed) { 1872ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo fake_prefs_.SetString(kPrefsPreviousVersion, ""); 1873ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo 1874ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // Flag that the device was powerwashed in the past. 1875ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo fake_system_state_.fake_hardware()->SetPowerwashCount(1); 1876ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo 18773f39d5cc753905874d8d93bef94f857b8808f19eAlex Vakulenko brillo::Blob post_data; 1878ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo ASSERT_TRUE( 1879ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo TestUpdateCheck(nullptr, // request_params 18808e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetNoUpdateResponse(), 1881ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo -1, 1882ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo false, // ping_only 1883ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo ErrorCode::kSuccess, 1884ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo metrics::CheckResult::kNoUpdateAvailable, 1885ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo metrics::CheckReaction::kUnset, 1886ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo metrics::DownloadErrorCode::kUnset, 1887ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo nullptr, 1888ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo &post_data)); 1889ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo // We shouldn't send a ping in this case since powerwash > 0. 1890f68bbbc952aa9a71898e4939b5f36187fa564a50Alex Vakulenko string post_str(post_data.begin(), post_data.end()); 1891ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo EXPECT_EQ(string::npos, post_str.find("<ping")); 1892ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo} 1893ebbe7ef75279183ba3cf055158dbbb3b3b605e0eAlex Deymo 18949fded1eee295295d33da477f00d9c9a240623e91Alex Deymo// Checks that the event 54 is sent on a reboot to a new update. 18959fded1eee295295d33da477f00d9c9a240623e91Alex DeymoTEST_F(OmahaRequestActionTest, RebootAfterUpdateEvent) { 18969fded1eee295295d33da477f00d9c9a240623e91Alex Deymo // Flag that the device was updated in a previous boot. 18979fded1eee295295d33da477f00d9c9a240623e91Alex Deymo fake_prefs_.SetString(kPrefsPreviousVersion, "1.2.3.4"); 18989fded1eee295295d33da477f00d9c9a240623e91Alex Deymo 18999fded1eee295295d33da477f00d9c9a240623e91Alex Deymo brillo::Blob post_data; 19009fded1eee295295d33da477f00d9c9a240623e91Alex Deymo ASSERT_TRUE( 19019fded1eee295295d33da477f00d9c9a240623e91Alex Deymo TestUpdateCheck(nullptr, // request_params 19029fded1eee295295d33da477f00d9c9a240623e91Alex Deymo fake_update_response_.GetNoUpdateResponse(), 19039fded1eee295295d33da477f00d9c9a240623e91Alex Deymo -1, 19049fded1eee295295d33da477f00d9c9a240623e91Alex Deymo false, // ping_only 19059fded1eee295295d33da477f00d9c9a240623e91Alex Deymo ErrorCode::kSuccess, 19069fded1eee295295d33da477f00d9c9a240623e91Alex Deymo metrics::CheckResult::kNoUpdateAvailable, 19079fded1eee295295d33da477f00d9c9a240623e91Alex Deymo metrics::CheckReaction::kUnset, 19089fded1eee295295d33da477f00d9c9a240623e91Alex Deymo metrics::DownloadErrorCode::kUnset, 19099fded1eee295295d33da477f00d9c9a240623e91Alex Deymo nullptr, 19109fded1eee295295d33da477f00d9c9a240623e91Alex Deymo &post_data)); 19119fded1eee295295d33da477f00d9c9a240623e91Alex Deymo string post_str(post_data.begin(), post_data.end()); 19129fded1eee295295d33da477f00d9c9a240623e91Alex Deymo 19139fded1eee295295d33da477f00d9c9a240623e91Alex Deymo // An event 54 is included and has the right version. 19149fded1eee295295d33da477f00d9c9a240623e91Alex Deymo EXPECT_NE(string::npos, 19159fded1eee295295d33da477f00d9c9a240623e91Alex Deymo post_str.find(base::StringPrintf( 19169fded1eee295295d33da477f00d9c9a240623e91Alex Deymo "<event eventtype=\"%d\"", 19179fded1eee295295d33da477f00d9c9a240623e91Alex Deymo OmahaEvent::kTypeRebootedAfterUpdate))); 19189fded1eee295295d33da477f00d9c9a240623e91Alex Deymo EXPECT_NE(string::npos, 19199fded1eee295295d33da477f00d9c9a240623e91Alex Deymo post_str.find("previousversion=\"1.2.3.4\"></event>")); 19209fded1eee295295d33da477f00d9c9a240623e91Alex Deymo 19219fded1eee295295d33da477f00d9c9a240623e91Alex Deymo // The previous version flag should have been removed. 19229fded1eee295295d33da477f00d9c9a240623e91Alex Deymo EXPECT_TRUE(fake_prefs_.Exists(kPrefsPreviousVersion)); 19239fded1eee295295d33da477f00d9c9a240623e91Alex Deymo string prev_version; 19249fded1eee295295d33da477f00d9c9a240623e91Alex Deymo EXPECT_TRUE(fake_prefs_.GetString(kPrefsPreviousVersion, &prev_version)); 19259fded1eee295295d33da477f00d9c9a240623e91Alex Deymo EXPECT_TRUE(prev_version.empty()); 19269fded1eee295295d33da477f00d9c9a240623e91Alex Deymo} 19279fded1eee295295d33da477f00d9c9a240623e91Alex Deymo 1928e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymovoid OmahaRequestActionTest::P2PTest( 1929e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool initial_allow_p2p_for_downloading, 1930e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool initial_allow_p2p_for_sharing, 1931e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool omaha_disable_p2p_for_downloading, 1932e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool omaha_disable_p2p_for_sharing, 1933e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool payload_state_allow_p2p_attempt, 1934e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool expect_p2p_client_lookup, 1935e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo const string& p2p_client_result_url, 1936e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool expected_allow_p2p_for_downloading, 1937e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo bool expected_allow_p2p_for_sharing, 1938e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo const string& expected_p2p_url) { 19398f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen OmahaResponse response; 1940e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo OmahaRequestParams request_params = request_params_; 194174b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold bool actual_allow_p2p_for_downloading = initial_allow_p2p_for_downloading; 194274b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold bool actual_allow_p2p_for_sharing = initial_allow_p2p_for_sharing; 194374b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold string actual_p2p_url; 19448f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 19458f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen MockPayloadState mock_payload_state; 1946e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_payload_state(&mock_payload_state); 19478f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_CALL(mock_payload_state, P2PAttemptAllowed()) 19488f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen .WillRepeatedly(Return(payload_state_allow_p2p_attempt)); 194974b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_CALL(mock_payload_state, GetUsingP2PForDownloading()) 195074b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold .WillRepeatedly(ReturnPointee(&actual_allow_p2p_for_downloading)); 195174b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_CALL(mock_payload_state, GetUsingP2PForSharing()) 195274b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold .WillRepeatedly(ReturnPointee(&actual_allow_p2p_for_sharing)); 195374b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_CALL(mock_payload_state, SetUsingP2PForDownloading(_)) 195474b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold .WillRepeatedly(SaveArg<0>(&actual_allow_p2p_for_downloading)); 195574b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_CALL(mock_payload_state, SetUsingP2PForSharing(_)) 195674b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold .WillRepeatedly(SaveArg<0>(&actual_allow_p2p_for_sharing)); 195774b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_CALL(mock_payload_state, SetP2PUrl(_)) 195874b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold .WillRepeatedly(SaveArg<0>(&actual_p2p_url)); 195974b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold 19608f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen MockP2PManager mock_p2p_manager; 1961e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.set_p2p_manager(&mock_p2p_manager); 19628f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen mock_p2p_manager.fake().SetLookupUrlForFileResult(p2p_client_result_url); 19638f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 19644cc5ed215180d19598d8b99f0a8a15cc24b831fcDavid Zeuthen TimeDelta timeout = TimeDelta::FromSeconds(kMaxP2PNetworkWaitTimeSeconds); 19654cc5ed215180d19598d8b99f0a8a15cc24b831fcDavid Zeuthen EXPECT_CALL(mock_p2p_manager, LookupUrlForFile(_, _, timeout, _)) 19668f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen .Times(expect_p2p_client_lookup ? 1 : 0); 19678f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 19688e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.disable_p2p_for_downloading = 19698e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo omaha_disable_p2p_for_downloading; 19708e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.disable_p2p_for_sharing = omaha_disable_p2p_for_sharing; 19718f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen ASSERT_TRUE( 1972e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(&request_params, 19738e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 19748f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen -1, 19758f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen false, // ping_only 1976d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 197733bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 197833bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 197933bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 19808f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen &response, 198188b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr)); 19828f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen EXPECT_TRUE(response.update_exists); 19838f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 198474b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_EQ(omaha_disable_p2p_for_downloading, 198574b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold response.disable_p2p_for_downloading); 198674b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_EQ(omaha_disable_p2p_for_sharing, 198774b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold response.disable_p2p_for_sharing); 19888f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 198974b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_EQ(expected_allow_p2p_for_downloading, 199074b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold actual_allow_p2p_for_downloading); 199174b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_EQ(expected_allow_p2p_for_sharing, actual_allow_p2p_for_sharing); 199274b5f55e6ff608857664fe151f54d78bfe0b75bbGilad Arnold EXPECT_EQ(expected_p2p_url, actual_p2p_url); 19938f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 19948f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 1995e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, P2PWithPeer) { 1996d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 1997d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 1998d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_downloading 1999d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_sharing 2000d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2001d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expect_p2p_client_lookup 2002d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "http://1.3.5.7/p2p", // p2p_client_result_url 2003d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_downloading 2004d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_sharing 2005d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "http://1.3.5.7/p2p"); // expected_p2p_url 20068f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 20078f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 2008e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, P2PWithoutPeer) { 2009d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 2010d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2011d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_downloading 2012d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_sharing 2013d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2014d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expect_p2p_client_lookup 2015d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "", // p2p_client_result_url 2016d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_downloading 2017d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_sharing 2018d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ""); // expected_p2p_url 20198f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 20208f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 2021e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, P2PDownloadNotAllowed) { 2022d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(false, // initial_allow_p2p_for_downloading 2023d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2024d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_downloading 2025d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_sharing 2026d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2027d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expect_p2p_client_lookup 2028d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "unset", // p2p_client_result_url 2029d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_downloading 2030d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_sharing 2031d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ""); // expected_p2p_url 20328f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 20338f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 2034e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, P2PWithPeerDownloadDisabledByOmaha) { 2035d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 2036d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2037d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // omaha_disable_p2p_for_downloading 2038d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_sharing 2039d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2040d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expect_p2p_client_lookup 2041d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "unset", // p2p_client_result_url 2042d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_downloading 2043d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_sharing 2044d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ""); // expected_p2p_url 20458f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 20468f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 2047e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, P2PWithPeerSharingDisabledByOmaha) { 2048d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 2049d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2050d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // omaha_disable_p2p_for_downloading 2051d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // omaha_disable_p2p_for_sharing 2052d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2053d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expect_p2p_client_lookup 2054d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "http://1.3.5.7/p2p", // p2p_client_result_url 2055d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // expected_allow_p2p_for_downloading 2056d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_sharing 2057d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "http://1.3.5.7/p2p"); // expected_p2p_url 20588f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 20598f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 2060e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, P2PWithPeerBothDisabledByOmaha) { 2061d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko P2PTest(true, // initial_allow_p2p_for_downloading 2062d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // initial_allow_p2p_for_sharing 2063d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // omaha_disable_p2p_for_downloading 2064d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // omaha_disable_p2p_for_sharing 2065d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko true, // payload_state_allow_p2p_attempt 2066d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expect_p2p_client_lookup 2067d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko "unset", // p2p_client_result_url 2068d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_downloading 2069d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko false, // expected_allow_p2p_for_sharing 2070d2779df63aaad8b65fc5d4badee7dbc9bed7f2b6Alex Vakulenko ""); // expected_p2p_url 20718f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen} 20728f191b22a1a1ab2b803d65ee488729206e648695David Zeuthen 2073f329b933db41d26644a97afef928eb1b319d6d99Alex Deymobool OmahaRequestActionTest::InstallDateParseHelper(const string &elapsed_days, 2074f329b933db41d26644a97afef928eb1b319d6d99Alex Deymo OmahaResponse *response) { 20758e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.elapsed_days = elapsed_days; 2076639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen return 2077e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo TestUpdateCheck(nullptr, // request_params 20788e18f931f634d7c3b3a5fcbfc057e79fa9d6fb80Alex Deymo fake_update_response_.GetUpdateResponse(), 2079639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen -1, 2080639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen false, // ping_only 2081d1c4d2dd3daed1d507038046c0355fbafb85260cGilad Arnold ErrorCode::kSuccess, 208233bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckResult::kUpdateAvailable, 208333bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::CheckReaction::kUpdating, 208433bae491eded4ef4f1eb4f4ef0f01ef0e5463f3aDavid Zeuthen metrics::DownloadErrorCode::kUnset, 2085639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen response, 208688b591f24cb3f94f982d7024c2e8ed25c2cc26a2Alex Vakulenko nullptr); 2087639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen} 2088639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2089e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, ParseInstallDateFromResponse) { 2090639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen OmahaResponse response; 2091639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2092639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Check that we parse elapsed_days in the Omaha Response correctly. 2093639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // and that the kPrefsInstallDateDays value is written to. 2094e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_FALSE(fake_prefs_.Exists(kPrefsInstallDateDays)); 2095e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(InstallDateParseHelper("42", &response)); 2096639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2097639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(42, response.install_date_days); 2098e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.Exists(kPrefsInstallDateDays)); 2099639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen int64_t prefs_days; 2100e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2101639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 42); 2102639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2103639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // If there already is a value set, we shouldn't do anything. 2104e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(InstallDateParseHelper("7", &response)); 2105639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2106639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(7, response.install_date_days); 2107e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2108639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 42); 2109639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2110639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Note that elapsed_days is not necessarily divisible by 7 so check 2111639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // that we round down correctly when populating kPrefsInstallDateDays. 2112e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.Delete(kPrefsInstallDateDays)); 2113e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(InstallDateParseHelper("23", &response)); 2114639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2115639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(23, response.install_date_days); 2116e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2117639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(prefs_days, 21); 2118639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2119639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // Check that we correctly handle elapsed_days not being included in 2120639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen // the Omaha Response. 2121e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(InstallDateParseHelper("", &response)); 2122639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_TRUE(response.update_exists); 2123639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen EXPECT_EQ(-1, response.install_date_days); 2124639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen} 2125639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2126e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// If there is no prefs and OOBE is not complete, we should not 2127e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// report anything to Omaha. 2128e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, GetInstallDateWhenNoPrefsNorOOBE) { 2129e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(OmahaRequestAction::GetInstallDate(&fake_system_state_), -1); 2130e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_FALSE(fake_prefs_.Exists(kPrefsInstallDateDays)); 2131e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo} 2132639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2133e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// If OOBE is complete and happened on a valid date (e.g. after Jan 2134e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// 1 2007 0:00 PST), that date should be used and written to 2135e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// prefs. However, first try with an invalid date and check we do 2136e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// nothing. 2137e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, GetInstallDateWhenOOBECompletedWithInvalidDate) { 2138e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo Time oobe_date = Time::FromTimeT(42); // Dec 31, 1969 16:00:42 PST. 2139e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.fake_hardware()->SetIsOOBEComplete(oobe_date); 2140e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(OmahaRequestAction::GetInstallDate(&fake_system_state_), -1); 2141e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_FALSE(fake_prefs_.Exists(kPrefsInstallDateDays)); 2142e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo} 2143639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2144e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// Then check with a valid date. The date Jan 20, 2007 0:00 PST 2145e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// should yield an InstallDate of 14. 2146e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, GetInstallDateWhenOOBECompletedWithValidDate) { 2147e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo Time oobe_date = Time::FromTimeT(1169280000); // Jan 20, 2007 0:00 PST. 2148e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.fake_hardware()->SetIsOOBEComplete(oobe_date); 2149e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(OmahaRequestAction::GetInstallDate(&fake_system_state_), 14); 2150e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.Exists(kPrefsInstallDateDays)); 2151639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2152e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo int64_t prefs_days; 2153e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2154e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(prefs_days, 14); 2155e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo} 2156639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2157e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// Now that we have a valid date in prefs, check that we keep using 2158e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// that even if OOBE date reports something else. The date Jan 30, 2159e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// 2007 0:00 PST should yield an InstallDate of 28... but since 2160e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo// there's a prefs file, we should still get 14. 2161e1e3afe30a214b3661a36474c1448f520662f33cAlex DeymoTEST_F(OmahaRequestActionTest, GetInstallDateWhenOOBECompletedDateChanges) { 2162e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // Set a valid date in the prefs first. 2163e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.SetInt64(kPrefsInstallDateDays, 14)); 2164639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2165e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo Time oobe_date = Time::FromTimeT(1170144000); // Jan 30, 2007 0:00 PST. 2166e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo fake_system_state_.fake_hardware()->SetIsOOBEComplete(oobe_date); 2167e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(OmahaRequestAction::GetInstallDate(&fake_system_state_), 14); 2168639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 2169e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo int64_t prefs_days; 2170e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2171e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(prefs_days, 14); 2172e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo 2173e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo // If we delete the prefs file, we should get 28 days. 2174e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.Delete(kPrefsInstallDateDays)); 2175e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(OmahaRequestAction::GetInstallDate(&fake_system_state_), 28); 2176e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_TRUE(fake_prefs_.GetInt64(kPrefsInstallDateDays, &prefs_days)); 2177e1e3afe30a214b3661a36474c1448f520662f33cAlex Deymo EXPECT_EQ(prefs_days, 28); 2178639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen} 2179639aa36fc7e27ba400402cd7a32b091f555783a6David Zeuthen 21806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} // namespace chromeos_update_engine 2181