omaha_request_action_unittest.cc revision 95508da905b279a6b91aadfc7c4c72f57a5fa610
1a4a8a8ccc2d9e0285728ed247b43f09433e63323Darin Petkov// Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 26a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov// Use of this source code is governed by a BSD-style license that can be 36a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov// found in the LICENSE file. 46a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 56a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <string> 66a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <vector> 70dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 86a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include <glib.h> 90dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 100dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov#include "base/string_util.h" 111cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov#include "base/time.h" 120dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov#include "gtest/gtest.h" 136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/action_pipe.h" 146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/mock_http_fetcher.h" 156a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/omaha_hash_calculator.h" 166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/omaha_request_action.h" 17a4a8a8ccc2d9e0285728ed247b43f09433e63323Darin Petkov#include "update_engine/omaha_request_params.h" 181cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov#include "update_engine/prefs_mock.h" 196a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov#include "update_engine/test_utils.h" 206a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 211cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing base::Time; 221cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing base::TimeDelta; 236a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovusing std::string; 246a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovusing std::vector; 251cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::_; 261cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::AllOf; 271cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Ge; 281cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Le; 299c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkovusing testing::NiceMock; 301cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::Return; 311cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovusing testing::SetArgumentPointee; 326a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 336a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace chromeos_update_engine { 346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OmahaRequestActionTest : public ::testing::Test { }; 366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 376a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace { 381cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovconst OmahaRequestParams kDefaultTestParams( 391cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestParams::kOsPlatform, 401cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestParams::kOsVersion, 411cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "service_pack", 421cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "x86-generic", 431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestParams::kAppId, 441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "0.1.0.0", 451cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "en-US", 461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "unittest", 47fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "OEM MODEL 09235 7471", 481cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov false, // delta okay 491cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "http://url"); 501cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 516a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovstring GetNoUpdateResponse(const string& app_id) { 526a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return string( 536a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " 546a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app " 556a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "appid=\"") + app_id + "\" status=\"ok\"><ping " 566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "status=\"ok\"/><updatecheck status=\"noupdate\"/></app></gupdate>"; 576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovstring GetUpdateResponse(const string& app_id, 606a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov const string& display_version, 616a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov const string& more_info_url, 626a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov const string& prompt, 636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov const string& codebase, 646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov const string& hash, 656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov const string& needsadmin, 666c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov const string& size, 676c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov const string& deadline) { 686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return string("<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " 696a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "xmlns=\"http://www.google.com/update2/response\" " 706a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "protocol=\"2.0\"><app " 716a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "appid=\"") + app_id + "\" status=\"ok\"><ping " 726a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "status=\"ok\"/><updatecheck DisplayVersion=\"" + display_version + "\" " 736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "MoreInfo=\"" + more_info_url + "\" Prompt=\"" + prompt + "\" " 743270f7411f55b872db385d0edffdfed18a684121Andrew de los Reyes "IsDelta=\"true\" " 75d22cb29c911375cda5d8eb783e78a46680404ca8Darin Petkov "codebase=\"" + codebase + "\" hash=\"not-applicable\" " 76d22cb29c911375cda5d8eb783e78a46680404ca8Darin Petkov "sha256=\"" + hash + "\" needsadmin=\"" + needsadmin + "\" " 776c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "size=\"" + size + "\" deadline=\"" + deadline + 786c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "\" status=\"ok\"/></app></gupdate>"; 796a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OmahaRequestActionTestProcessorDelegate : public ActionProcessorDelegate { 826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate() 846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov : loop_(NULL), 85c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov expected_code_(kActionCodeSuccess) {} 866a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov virtual ~OmahaRequestActionTestProcessorDelegate() { 876a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 88c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov virtual void ProcessingDone(const ActionProcessor* processor, 89c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov ActionExitCode code) { 906a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE(loop_); 916a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_quit(loop_); 926a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov virtual void ActionCompleted(ActionProcessor* processor, 956a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov AbstractAction* action, 96c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov ActionExitCode code) { 976a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // make sure actions always succeed 986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (action->Type() == OmahaRequestAction::StaticType()) 99c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov EXPECT_EQ(expected_code_, code); 1006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov else 101c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov EXPECT_EQ(kActionCodeSuccess, code); 1026a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 1036a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop_; 104c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov ActionExitCode expected_code_; 1056a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 1066a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1076a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovgboolean StartProcessorInRunLoop(gpointer data) { 1086a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor *processor = reinterpret_cast<ActionProcessor*>(data); 1096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StartProcessing(); 1106a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return FALSE; 1116a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 1126a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} // namespace {} 1136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OutputObjectCollectorAction; 1156a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovtemplate<> 1176a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass ActionTraits<OutputObjectCollectorAction> { 1186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 1196a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Does not take an object for input 1206a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov typedef OmahaResponse InputObjectType; 1216a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // On success, puts the output path on output 1226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov typedef NoneType OutputObjectType; 1236a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 1246a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1256a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass OutputObjectCollectorAction : public Action<OutputObjectCollectorAction> { 1266a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 1276a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OutputObjectCollectorAction() : has_input_object_(false) {} 1286a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void PerformAction() { 1296a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // copy input object 1306a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov has_input_object_ = HasInputObject(); 1316a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (has_input_object_) 1326a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov omaha_response_ = GetInputObject(); 133c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov processor_->ActionComplete(this, kActionCodeSuccess); 1346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 1356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Should never be called 1366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void TerminateProcessing() { 1376a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov CHECK(false); 1386a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 1396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Debugging/logging 1406a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov static std::string StaticType() { 1416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return "OutputObjectCollectorAction"; 1426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 1436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov std::string Type() const { return StaticType(); } 1446a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov bool has_input_object_; 1456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse omaha_response_; 1466a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 1476a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1481cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov// Returns true iff an output response was obtained from the 149edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov// OmahaRequestAction. |prefs| may be NULL, in which case a local PrefsMock is 150edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov// used. out_response may be NULL. If |fail_http_response_code| is 151edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov// non-negative, the transfer will fail with that code. out_post_data may be 152edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov// null; if non-null, the post-data received by the mock HttpFetcher is 153edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov// returned. 1541cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkovbool TestUpdateCheck(PrefsInterface* prefs, 1551cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov const OmahaRequestParams& params, 1560dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov const string& http_response, 157edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov int fail_http_response_code, 158c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov ActionExitCode expected_code, 1590dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaResponse* out_response, 1600dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char>* out_post_data) { 1610dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); 1620dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), 1634516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 1644516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL); 165edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov if (fail_http_response_code >= 0) { 166edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov fetcher->FailTransfer(fail_http_response_code); 167edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov } 1689c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> local_prefs; 1691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestAction action(prefs ? prefs : &local_prefs, 1701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov params, 1711cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 1721cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov fetcher); 1736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate delegate; 1746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov delegate.loop_ = loop; 175c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov delegate.expected_code_ = expected_code; 176a4a8a8ccc2d9e0285728ed247b43f09433e63323Darin Petkov 1776a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 1786a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 1796a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 1806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OutputObjectCollectorAction collector_action; 1826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov BondActions(&action, &collector_action); 1836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&collector_action); 1846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_timeout_add(0, &StartProcessorInRunLoop, &processor); 1866a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_run(loop); 1876a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_unref(loop); 1886a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (collector_action.has_input_object_ && out_response) 1896a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov *out_response = collector_action.omaha_response_; 1906a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov if (out_post_data) 1916a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov *out_post_data = fetcher->post_data(); 1926a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return collector_action.has_input_object_; 1936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 1946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 1950dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// Tests Event requests -- they should always succeed. |out_post_data| 1960dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// may be null; if non-null, the post-data received by the mock 1970dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov// HttpFetcher is returned. 1980dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkovvoid TestEvent(const OmahaRequestParams& params, 1990dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaEvent* event, 2000dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov const string& http_response, 2010dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char>* out_post_data) { 2020dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); 2030dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), 2044516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 2054516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL); 2069c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 2071cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestAction action(&prefs, params, event, fetcher); 2080dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestActionTestProcessorDelegate delegate; 2090dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov delegate.loop_ = loop; 2100dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ActionProcessor processor; 2110dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov processor.set_delegate(&delegate); 2120dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov processor.EnqueueAction(&action); 2130dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 2140dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov g_timeout_add(0, &StartProcessorInRunLoop, &processor); 2150dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov g_main_loop_run(loop); 2160dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov g_main_loop_unref(loop); 2170dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov if (out_post_data) 2180dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov *out_post_data = fetcher->post_data(); 2190dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 2200dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 2216a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, NoUpdateTest) { 2226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 2236a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 2241cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 2251cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 2260dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 227edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 228c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov kActionCodeSuccess, 2290dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 2300dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 2316a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 2326a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 2336a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2346a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, ValidUpdateTest) { 2356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 2366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 2371cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 2381cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 2390dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetUpdateResponse(OmahaRequestParams::kAppId, 2400dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "1.2.3.4", // version 2410dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "http://more/info", 2420dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "true", // prompt 2430dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "http://code/base", // dl url 2440dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "HASH1234=", // checksum 2450dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "false", // needs admin 2466c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "123", // size 2476c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "20101020"), // deadline 248edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 249c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov kActionCodeSuccess, 2500dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 2510dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 2526a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.update_exists); 2536a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("1.2.3.4", response.display_version); 2546a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("http://code/base", response.codebase); 2556a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("http://more/info", response.more_info_url); 2563270f7411f55b872db385d0edffdfed18a684121Andrew de los Reyes EXPECT_TRUE(response.is_delta); 2576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("HASH1234=", response.hash); 2586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(123, response.size); 2596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.needs_admin); 2606a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.prompt); 2616c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_EQ("20101020", response.deadline); 2626a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 2636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2646a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, NoOutputPipeTest) { 2656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov const string http_response(GetNoUpdateResponse(OmahaRequestParams::kAppId)); 2666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2676a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); 2686a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2699c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 2701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestAction action(&prefs, kDefaultTestParams, NULL, 2710dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 2724516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 2734516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL)); 2746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestActionTestProcessorDelegate delegate; 2756a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov delegate.loop_ = loop; 2766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 2776a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 2786a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 2796a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2806a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_timeout_add(0, &StartProcessorInRunLoop, &processor); 2816a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_run(loop); 2826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_unref(loop); 2836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(processor.IsRunning()); 2846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 2856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 2866a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, InvalidXmlTest) { 2876a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 2886a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_FALSE( 2891cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 2901cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 2910dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 292edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 293edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestXMLParseError, 294edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 295edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov NULL)); 296edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 297edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 298edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 299edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin PetkovTEST(OmahaRequestActionTest, EmptyResponseTest) { 300edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 301edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 302edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov TestUpdateCheck(NULL, // prefs 303edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kDefaultTestParams, 304edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 305edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 306edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestEmptyResponseError, 3070dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 3080dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 3096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 3106a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3116a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3126a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, MissingStatusTest) { 3136a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 3140dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 3151cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // prefs 3161cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 3176a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " 3186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app " 3196a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "appid=\"foo\" status=\"ok\"><ping " 3206a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "status=\"ok\"/><updatecheck/></app></gupdate>", 321edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 322edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestNoUpdateCheckStatus, 3236a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 3246a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov NULL)); 3256a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 3266a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3276a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3286a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, InvalidStatusTest) { 3296a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 3300dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 3311cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // prefs 3321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 3336a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " 3346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app " 3356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "appid=\"foo\" status=\"ok\"><ping " 3366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "status=\"ok\"/><updatecheck status=\"foo\"/></app></gupdate>", 337edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 338edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestBadUpdateCheckStatus, 3396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 3406a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov NULL)); 3416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 3426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3436a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3446a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, MissingNodesetTest) { 3456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 3460dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov ASSERT_FALSE(TestUpdateCheck( 3471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // prefs 3481cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 3496a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " 3506a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app " 3516a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "appid=\"foo\" status=\"ok\"><ping " 3526a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "status=\"ok\"/></app></gupdate>", 353edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 354edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestNoUpdateCheckNode, 3556a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov &response, 3566a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov NULL)); 3576a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.update_exists); 3586a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3596a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3606a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, MissingFieldTest) { 3616a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 3621cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE(TestUpdateCheck(NULL, // prefs 3631cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 3640dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string("<?xml version=\"1.0\" " 3650dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "encoding=\"UTF-8\"?><gupdate " 3660dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "xmlns=\"http://www.google.com/" 3670dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "update2/response\" " 3680dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "protocol=\"2.0\"><app appid=\"") + 3690dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestParams::kAppId 3700dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov + "\" status=\"ok\"><ping " 3710dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "status=\"ok\"/><updatecheck " 3720dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "DisplayVersion=\"1.2.3.4\" " 3730dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "Prompt=\"false\" " 374d22cb29c911375cda5d8eb783e78a46680404ca8Darin Petkov "codebase=\"http://code/base\" hash=\"foo\" " 375d22cb29c911375cda5d8eb783e78a46680404ca8Darin Petkov "sha256=\"HASH1234=\" needsadmin=\"true\" " 3760dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "size=\"123\" " 3770dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "status=\"ok\"/></app></gupdate>", 378edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 379c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov kActionCodeSuccess, 3800dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 3810dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 3826a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.update_exists); 3836a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("1.2.3.4", response.display_version); 3846a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("http://code/base", response.codebase); 3856a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("", response.more_info_url); 3863270f7411f55b872db385d0edffdfed18a684121Andrew de los Reyes EXPECT_FALSE(response.is_delta); 3876a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("HASH1234=", response.hash); 3886a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(123, response.size); 3896a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_TRUE(response.needs_admin); 3906a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_FALSE(response.prompt); 3916c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_TRUE(response.deadline.empty()); 3926a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 3936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 3946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovnamespace { 3956a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovclass TerminateEarlyTestProcessorDelegate : public ActionProcessorDelegate { 3966a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov public: 3976a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov void ProcessingStopped(const ActionProcessor* processor) { 3986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE(loop_); 3996a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_quit(loop_); 4006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov } 4016a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop_; 4026a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov}; 4036a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4046a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkovgboolean TerminateTransferTestStarter(gpointer data) { 4056a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor *processor = reinterpret_cast<ActionProcessor*>(data); 4066a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StartProcessing(); 4076a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov CHECK(processor->IsRunning()); 4086a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor->StopProcessing(); 4096a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov return FALSE; 4106a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 4116a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} // namespace {} 4126a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4136a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, TerminateTransferTest) { 4146a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov string http_response("doesn't matter"); 4156a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); 4166a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4179c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 4181cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov OmahaRequestAction action(&prefs, kDefaultTestParams, NULL, 4190dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 4204516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 4214516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL)); 4226a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov TerminateEarlyTestProcessorDelegate delegate; 4236a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov delegate.loop_ = loop; 4246a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ActionProcessor processor; 4256a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.set_delegate(&delegate); 4266a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov processor.EnqueueAction(&action); 4276a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4286a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_timeout_add(0, &TerminateTransferTestStarter, &processor); 4296a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_run(loop); 4306a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov g_main_loop_unref(loop); 4316a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 4326a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4336a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, XmlEncodeTest) { 4346a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("ab", XmlEncode("ab")); 4356a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("a<b", XmlEncode("a<b")); 4366a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("foo-Ω", XmlEncode("foo-\xce\xa9")); 4376a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("<&>", XmlEncode("<&>")); 4386a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ("&lt;&amp;&gt;", XmlEncode("<&>")); 4396a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4406a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov vector<char> post_data; 4416a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4426a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // Make sure XML Encode is being called on the params 44384c763cffce6778711792944387fadb760c55c8dDarin Petkov OmahaRequestParams params(OmahaRequestParams::kOsPlatform, 4446a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestParams::kOsVersion, 4456a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "testtheservice_pack>", 4461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "x86 generic<id", 4476a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaRequestParams::kAppId, 4486a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "0.1.0.0", 4496a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "en-US", 4501cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "unittest_track<", 451fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "<OEM MODEL>", 4523f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes false, // delta okay 4536a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov "http://url"); 4546a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 4556a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_FALSE( 4561cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 4571cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov params, 4580dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 459edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 460edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestXMLParseError, 4610dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 4620dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &post_data)); 4636a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov // convert post_data to string 4646a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov string post_str(&post_data[0], post_data.size()); 4656a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_NE(post_str.find("testtheservice_pack>"), string::npos); 4666a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(post_str.find("testtheservice_pack>"), string::npos); 4671cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find("x86 generic<id"), string::npos); 4681cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_EQ(post_str.find("x86 generic<id"), string::npos); 4691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find("unittest_track&lt;"), string::npos); 4701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_EQ(post_str.find("unittest_track<"), string::npos); 471fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_NE(post_str.find("<OEM MODEL>"), string::npos); 472fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_EQ(post_str.find("<OEM MODEL>"), string::npos); 4736a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 4746a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4756a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, XmlDecodeTest) { 4766a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 4776a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 4781cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 4791cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 4800dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetUpdateResponse(OmahaRequestParams::kAppId, 4810dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "1.2.3.4", // version 4820dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "testthe<url", // more info 4830dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "true", // prompt 4840dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "testthe&codebase", // dl url 4850dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "HASH1234=", // checksum 4860dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "false", // needs admin 4876c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "123", // size 4886c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "<20110101"), // deadline 489edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 490c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov kActionCodeSuccess, 4910dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 4920dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 4936a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4946a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(response.more_info_url, "testthe<url"); 4950dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_EQ(response.codebase, "testthe&codebase"); 4966c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov EXPECT_EQ(response.deadline, "<20110101"); 4976a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 4986a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 4996a5b3229b44c1f81ee153829e9b501e547f29926Darin PetkovTEST(OmahaRequestActionTest, ParseIntTest) { 5006a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov OmahaResponse response; 5016a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov ASSERT_TRUE( 5021cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(NULL, // prefs 5031cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 5040dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov GetUpdateResponse(OmahaRequestParams::kAppId, 5050dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "1.2.3.4", // version 5060dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "theurl", // more info 5070dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "true", // prompt 5080dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "thecodebase", // dl url 5090dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "HASH1234=", // checksum 5100dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "false", // needs admin 5110dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov // overflows int32: 5126c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "123123123123123", // size 5136c11864907e9a92f8069c77c08650102e0b34e0dDarin Petkov "deadline"), 514edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 515c1a8b426be9542bc880923711ca508ea3f84000eDarin Petkov kActionCodeSuccess, 5160dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &response, 5170dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL)); 5186a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 5196a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov EXPECT_EQ(response.size, 123123123123123ll); 5206a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} 5216a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov 5220dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin PetkovTEST(OmahaRequestActionTest, FormatUpdateCheckOutputTest) { 5230dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char> post_data; 52495508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov NiceMock<PrefsMock> prefs; 52595508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_CALL(prefs, GetString(kPrefsPreviousVersion, _)) 52695508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(string("")), Return(true))); 52795508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_CALL(prefs, SetString(kPrefsPreviousVersion, _)).Times(0); 52895508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov ASSERT_FALSE(TestUpdateCheck(&prefs, 5291cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 5300dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 531edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 532edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestXMLParseError, 5331cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, // response 5340dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &post_data)); 5350dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov // convert post_data to string 5360dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string post_str(&post_data[0], post_data.size()); 5371cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find(" <o:ping a=\"-1\" r=\"-1\"></o:ping>\n" 5380dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov " <o:updatecheck></o:updatecheck>\n"), 5390dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string::npos); 540fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov EXPECT_NE(post_str.find("hardware_class=\"OEM MODEL 09235 7471\""), 541fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov string::npos); 5420dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_EQ(post_str.find("o:event"), string::npos); 5430dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 5440dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 54595508da905b279a6b91aadfc7c4c72f57a5fa610Darin PetkovTEST(OmahaRequestActionTest, FormatUpdateCheckPrevVersionOutputTest) { 54695508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov vector<char> post_data; 54795508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov NiceMock<PrefsMock> prefs; 54895508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_CALL(prefs, GetString(kPrefsPreviousVersion, _)) 54995508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(string("1.2.3.4")), Return(true))); 55095508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_CALL(prefs, SetString(kPrefsPreviousVersion, "")) 55195508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov .WillOnce(Return(true)); 55295508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov ASSERT_FALSE(TestUpdateCheck(&prefs, 55395508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov kDefaultTestParams, 55495508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov "invalid xml>", 55595508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov -1, 55695508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov kActionCodeOmahaRequestXMLParseError, 55795508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov NULL, // response 55895508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov &post_data)); 55995508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov // convert post_data to string 56095508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov string post_str(&post_data[0], post_data.size()); 56195508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_NE(post_str.find(" <o:ping a=\"-1\" r=\"-1\"></o:ping>\n" 56295508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov " <o:updatecheck></o:updatecheck>\n"), 56395508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov string::npos); 56495508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_NE(post_str.find("hardware_class=\"OEM MODEL 09235 7471\""), 56595508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov string::npos); 56695508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov string prev_version_event = StringPrintf( 56795508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov " <o:event eventtype=\"%d\" eventresult=\"%d\" " 56895508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov "previousversion=\"1.2.3.4\"></o:event>\n", 56995508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov OmahaEvent::kTypeUpdateComplete, 57095508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov OmahaEvent::kResultSuccessReboot); 57195508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov EXPECT_NE(post_str.find(prev_version_event), string::npos); 57295508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov} 57395508da905b279a6b91aadfc7c4c72f57a5fa610Darin Petkov 574e17f86bae4299882232d3e6858ada68692e80501Darin PetkovTEST(OmahaRequestActionTest, FormatSuccessEventOutputTest) { 575e17f86bae4299882232d3e6858ada68692e80501Darin Petkov vector<char> post_data; 5761cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestEvent(kDefaultTestParams, 577e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeUpdateDownloadStarted), 578e17f86bae4299882232d3e6858ada68692e80501Darin Petkov "invalid xml>", 579e17f86bae4299882232d3e6858ada68692e80501Darin Petkov &post_data); 580e17f86bae4299882232d3e6858ada68692e80501Darin Petkov // convert post_data to string 581e17f86bae4299882232d3e6858ada68692e80501Darin Petkov string post_str(&post_data[0], post_data.size()); 582e17f86bae4299882232d3e6858ada68692e80501Darin Petkov string expected_event = StringPrintf( 583e17f86bae4299882232d3e6858ada68692e80501Darin Petkov " <o:event eventtype=\"%d\" eventresult=\"%d\"></o:event>\n", 584e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kTypeUpdateDownloadStarted, 585e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultSuccess); 586e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_NE(post_str.find(expected_event), string::npos); 5871cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_EQ(post_str.find("o:ping"), string::npos); 588e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(post_str.find("o:updatecheck"), string::npos); 589e17f86bae4299882232d3e6858ada68692e80501Darin Petkov} 590e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 591e17f86bae4299882232d3e6858ada68692e80501Darin PetkovTEST(OmahaRequestActionTest, FormatErrorEventOutputTest) { 592e17f86bae4299882232d3e6858ada68692e80501Darin Petkov vector<char> post_data; 5931cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestEvent(kDefaultTestParams, 594e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeDownloadComplete, 595e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 596e17f86bae4299882232d3e6858ada68692e80501Darin Petkov kActionCodeError), 597e17f86bae4299882232d3e6858ada68692e80501Darin Petkov "invalid xml>", 598e17f86bae4299882232d3e6858ada68692e80501Darin Petkov &post_data); 599e17f86bae4299882232d3e6858ada68692e80501Darin Petkov // convert post_data to string 600e17f86bae4299882232d3e6858ada68692e80501Darin Petkov string post_str(&post_data[0], post_data.size()); 601e17f86bae4299882232d3e6858ada68692e80501Darin Petkov string expected_event = StringPrintf( 602e17f86bae4299882232d3e6858ada68692e80501Darin Petkov " <o:event eventtype=\"%d\" eventresult=\"%d\" " 603e17f86bae4299882232d3e6858ada68692e80501Darin Petkov "errorcode=\"%d\"></o:event>\n", 604e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kTypeDownloadComplete, 605e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 606e17f86bae4299882232d3e6858ada68692e80501Darin Petkov kActionCodeError); 607e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_NE(post_str.find(expected_event), string::npos); 608e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(post_str.find("o:updatecheck"), string::npos); 609e17f86bae4299882232d3e6858ada68692e80501Darin Petkov} 610e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 6110dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin PetkovTEST(OmahaRequestActionTest, FormatEventOutputTest) { 6120dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov vector<char> post_data; 6131cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestEvent(kDefaultTestParams, 6140dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new OmahaEvent(OmahaEvent::kTypeDownloadComplete, 6150dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaEvent::kResultError, 616e17f86bae4299882232d3e6858ada68692e80501Darin Petkov kActionCodeError), 6170dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "invalid xml>", 6180dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov &post_data); 6190dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov // convert post_data to string 6200dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string post_str(&post_data[0], post_data.size()); 6210dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string expected_event = StringPrintf( 6220dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov " <o:event eventtype=\"%d\" eventresult=\"%d\" " 6230dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov "errorcode=\"%d\"></o:event>\n", 6240dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaEvent::kTypeDownloadComplete, 6250dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaEvent::kResultError, 626e17f86bae4299882232d3e6858ada68692e80501Darin Petkov kActionCodeError); 6270dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_NE(post_str.find(expected_event), string::npos); 6280dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_EQ(post_str.find("o:updatecheck"), string::npos); 6290dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 6300dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 6310dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin PetkovTEST(OmahaRequestActionTest, IsEventTest) { 6320dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov string http_response("doesn't matter"); 6339c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 6340dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestAction update_check_action( 6351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &prefs, 6361cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 6370dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov NULL, 6380dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 6394516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 6404516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL)); 6410dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_FALSE(update_check_action.IsEvent()); 6420dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 6430dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov OmahaRequestAction event_action( 6441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &prefs, 6451cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 646e17f86bae4299882232d3e6858ada68692e80501Darin Petkov new OmahaEvent(OmahaEvent::kTypeUpdateComplete), 6470dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov new MockHttpFetcher(http_response.data(), 6484516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes http_response.size(), 6494516810fe41a39c0c55d2095679898787259ae38Andrew de los Reyes NULL)); 6500dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov EXPECT_TRUE(event_action.IsEvent()); 6510dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov} 6520dc8e9a73fc3179a67a72ab72ceb2bc6540949bfDarin Petkov 6533f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los ReyesTEST(OmahaRequestActionTest, FormatDeltaOkayOutputTest) { 6543f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes for (int i = 0; i < 2; i++) { 6553f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes bool delta_okay = i == 1; 6563f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes const char* delta_okay_str = delta_okay ? "true" : "false"; 6573f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes vector<char> post_data; 65884c763cffce6778711792944387fadb760c55c8dDarin Petkov OmahaRequestParams params(OmahaRequestParams::kOsPlatform, 6593f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes OmahaRequestParams::kOsVersion, 6603f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "service_pack", 6613f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "x86-generic", 6623f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes OmahaRequestParams::kAppId, 6633f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "0.1.0.0", 6643f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "en-US", 6653f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "unittest_track", 666fbb40098314ab45efa60667ad7ccae354c4f18daDarin Petkov "OEM MODEL REV 1234", 6673f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes delta_okay, 6683f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "http://url"); 6691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_FALSE(TestUpdateCheck(NULL, // prefs 6701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov params, 6713f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes "invalid xml>", 672edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 673edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestXMLParseError, 6743f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes NULL, 6753f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes &post_data)); 6763f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes // convert post_data to string 6773f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes string post_str(&post_data[0], post_data.size()); 6783f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes EXPECT_NE(post_str.find(StringPrintf(" delta_okay=\"%s\"", delta_okay_str)), 6793f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes string::npos) 6803f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes << "i = " << i; 6813f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes } 6823f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes} 6833f0303aa211e2de2d466cef063ff6f39fffe32ddAndrew de los Reyes 684e17f86bae4299882232d3e6858ada68692e80501Darin PetkovTEST(OmahaRequestActionTest, OmahaEventTest) { 685e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent default_event; 686e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUnknown, default_event.type); 687e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultError, default_event.result); 688e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(kActionCodeError, default_event.error_code); 689e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 690e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent success_event(OmahaEvent::kTypeUpdateDownloadStarted); 691e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUpdateDownloadStarted, success_event.type); 692e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultSuccess, success_event.result); 693e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(kActionCodeSuccess, success_event.error_code); 694e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 695e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent error_event(OmahaEvent::kTypeUpdateDownloadFinished, 696e17f86bae4299882232d3e6858ada68692e80501Darin Petkov OmahaEvent::kResultError, 697e17f86bae4299882232d3e6858ada68692e80501Darin Petkov kActionCodeError); 698e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kTypeUpdateDownloadFinished, error_event.type); 699e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(OmahaEvent::kResultError, error_event.result); 700e17f86bae4299882232d3e6858ada68692e80501Darin Petkov EXPECT_EQ(kActionCodeError, error_event.error_code); 701e17f86bae4299882232d3e6858ada68692e80501Darin Petkov} 702e17f86bae4299882232d3e6858ada68692e80501Darin Petkov 7031cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, PingTest) { 7049c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 7051cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // Add a few hours to the day difference to test no rounding, etc. 7061cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t five_days_ago = 7071cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(5 * 24 + 13)).ToInternalValue(); 7081cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t six_days_ago = 7091cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(6 * 24 + 11)).ToInternalValue(); 7101cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 7111cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(six_days_ago), Return(true))); 7121cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 7131cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(five_days_ago), Return(true))); 7141cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 7151cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 7161cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 7171cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 7181cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 719edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 7201cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kActionCodeSuccess, 7211cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 7221cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 7231cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 7241cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find("<o:ping a=\"6\" r=\"5\"></o:ping>"), string::npos); 7251cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 7261cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 7271cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, ActivePingTest) { 7289c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 7291cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t three_days_ago = 7301cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(3 * 24 + 12)).ToInternalValue(); 7311cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t now = Time::Now().ToInternalValue(); 7321cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 7331cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(three_days_ago), Return(true))); 7341cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 7351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 7361cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 7371cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 7381cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 7391cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 7401cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 741edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 7421cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kActionCodeSuccess, 7431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 7441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 7451cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 7461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find("<o:ping a=\"3\"></o:ping>"), string::npos); 7471cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 7481cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 7491cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, RollCallPingTest) { 7509c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 7511cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t four_days_ago = 7521cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(4 * 24)).ToInternalValue(); 7531cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t now = Time::Now().ToInternalValue(); 7541cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 7551cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); 7561cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 7571cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(four_days_ago), Return(true))); 7581cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 7591cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 7601cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 7611cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 7621cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 763edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 7641cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kActionCodeSuccess, 7651cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 7661cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 7671cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 7681cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_NE(post_str.find("<o:ping r=\"4\"></o:ping>\n"), string::npos); 7691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 7701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 7711cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, NoPingTest) { 7729c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 7731cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t one_hour_ago = 7741cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromHours(1)).ToInternalValue(); 7751cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 7761cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); 7771cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 7781cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); 7791cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 7801cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 7811cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 7821cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 7831cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 7841cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 7851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov GetNoUpdateResponse(OmahaRequestParams::kAppId), 786edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 7871cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kActionCodeSuccess, 7881cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 7891cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 7901cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 7911cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_EQ(post_str.find("o:ping"), string::npos); 7921cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 7931cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 7941cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, BackInTimePingTest) { 7959c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 7961cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t future = 7971cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() + TimeDelta::FromHours(3 * 24 + 4)).ToInternalValue(); 7981cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) 7991cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); 8001cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) 8011cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); 8021cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)) 8031cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 8041cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)) 8051cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 8061cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov vector<char> post_data; 8071cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 8081cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 8091cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 8101cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " 8111cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "xmlns=\"http://www.google.com/update2/response\" " 8121cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "protocol=\"2.0\"><daystart elapsed_seconds=\"100\"/>" 8131cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 8141cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<updatecheck status=\"noupdate\"/></app></gupdate>", 815edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 8161cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kActionCodeSuccess, 8171cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 8181cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov &post_data)); 8191cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov string post_str(&post_data[0], post_data.size()); 8201cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_EQ(post_str.find("o:ping"), string::npos); 8211cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 8221cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 8231cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, LastPingDayUpdateTest) { 8241cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // This test checks that the action updates the last ping day to now 82584c763cffce6778711792944387fadb760c55c8dDarin Petkov // minus 200 seconds with a slack of 5 seconds. Therefore, the test 8261cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // may fail if it runs for longer than 5 seconds. It shouldn't run 8271cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov // that long though. 8281cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t midnight = 8291cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromSeconds(200)).ToInternalValue(); 8301cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov int64_t midnight_slack = 8311cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov (Time::Now() - TimeDelta::FromSeconds(195)).ToInternalValue(); 8329c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 8331cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, 8341cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov AllOf(Ge(midnight), Le(midnight_slack)))) 8351cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 8361cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, 8371cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov AllOf(Ge(midnight), Le(midnight_slack)))) 8381cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov .WillOnce(Return(true)); 8391cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 8401cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 8411cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 8421cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " 8431cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "xmlns=\"http://www.google.com/update2/response\" " 8441cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "protocol=\"2.0\"><daystart elapsed_seconds=\"200\"/>" 8451cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 8461cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<updatecheck status=\"noupdate\"/></app></gupdate>", 847edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 8481cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kActionCodeSuccess, 8491cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 8501cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL)); 8511cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 8521cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 8531cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, NoElapsedSecondsTest) { 8549c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 8551cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 8561cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 8571cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 8581cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 8591cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 8601cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " 8611cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "xmlns=\"http://www.google.com/update2/response\" " 8621cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "protocol=\"2.0\"><daystart blah=\"200\"/>" 8631cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 8641cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<updatecheck status=\"noupdate\"/></app></gupdate>", 865edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 8661cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kActionCodeSuccess, 8671cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 8681cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL)); 8691cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 8701cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 8711cbd78ffe68039a5781c3434816e03e64033dc0bDarin PetkovTEST(OmahaRequestActionTest, BadElapsedSecondsTest) { 8729c096d6691414d32dee22e083ac8e2e8d24b0880Darin Petkov NiceMock<PrefsMock> prefs; 8731cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); 8741cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); 8751cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov ASSERT_TRUE( 8761cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov TestUpdateCheck(&prefs, 8771cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kDefaultTestParams, 8781cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " 8791cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "xmlns=\"http://www.google.com/update2/response\" " 8801cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "protocol=\"2.0\"><daystart elapsed_seconds=\"x\"/>" 8811cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" 8821cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov "<updatecheck status=\"noupdate\"/></app></gupdate>", 883edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 8841cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov kActionCodeSuccess, 8851cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL, 8861cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov NULL)); 8871cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov} 8881cbd78ffe68039a5781c3434816e03e64033dc0bDarin Petkov 88984c763cffce6778711792944387fadb760c55c8dDarin PetkovTEST(OmahaRequestActionTest, NoUniqueIDTest) { 89084c763cffce6778711792944387fadb760c55c8dDarin Petkov vector<char> post_data; 89184c763cffce6778711792944387fadb760c55c8dDarin Petkov ASSERT_FALSE(TestUpdateCheck(NULL, // prefs 89284c763cffce6778711792944387fadb760c55c8dDarin Petkov kDefaultTestParams, 89384c763cffce6778711792944387fadb760c55c8dDarin Petkov "invalid xml>", 894edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov -1, 895edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestXMLParseError, 89684c763cffce6778711792944387fadb760c55c8dDarin Petkov NULL, // response 89784c763cffce6778711792944387fadb760c55c8dDarin Petkov &post_data)); 89884c763cffce6778711792944387fadb760c55c8dDarin Petkov // convert post_data to string 89984c763cffce6778711792944387fadb760c55c8dDarin Petkov string post_str(&post_data[0], post_data.size()); 90084c763cffce6778711792944387fadb760c55c8dDarin Petkov EXPECT_EQ(post_str.find("machineid="), string::npos); 90184c763cffce6778711792944387fadb760c55c8dDarin Petkov EXPECT_EQ(post_str.find("userid="), string::npos); 90284c763cffce6778711792944387fadb760c55c8dDarin Petkov} 90384c763cffce6778711792944387fadb760c55c8dDarin Petkov 904edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin PetkovTEST(OmahaRequestActionTest, NetworkFailureTest) { 905edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 906edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 907edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov TestUpdateCheck(NULL, // prefs 908edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kDefaultTestParams, 909edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 910edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 501, 911edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov static_cast<ActionExitCode>( 912edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestHTTPResponseBase + 501), 913edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 914edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov NULL)); 915edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 916edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 917edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 918edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin PetkovTEST(OmahaRequestActionTest, NetworkFailureBadHTTPCodeTest) { 919edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov OmahaResponse response; 920edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov ASSERT_FALSE( 921edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov TestUpdateCheck(NULL, // prefs 922edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kDefaultTestParams, 923edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov "", 924edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 1500, 925edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov static_cast<ActionExitCode>( 926edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov kActionCodeOmahaRequestHTTPResponseBase + 999), 927edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov &response, 928edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov NULL)); 929edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov EXPECT_FALSE(response.update_exists); 930edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov} 931edc522e7e5c0c14c3f8a55fd2a0d23d8a6032917Darin Petkov 9326a5b3229b44c1f81ee153829e9b501e547f29926Darin Petkov} // namespace chromeos_update_engine 933