| Index: omaha_request_action_unittest.cc
|
| diff --git a/omaha_request_action_unittest.cc b/omaha_request_action_unittest.cc
|
| index 778f408e268f2a7e46ca6e01e1c4539eca3f13c4..0e06439ad92e8d868091c5e0ace2ffd2a04bfc4e 100644
|
| --- a/omaha_request_action_unittest.cc
|
| +++ b/omaha_request_action_unittest.cc
|
| @@ -4,8 +4,11 @@
|
|
|
| #include <string>
|
| #include <vector>
|
| +
|
| #include <glib.h>
|
| -#include <gtest/gtest.h>
|
| +
|
| +#include "base/string_util.h"
|
| +#include "gtest/gtest.h"
|
| #include "update_engine/action_pipe.h"
|
| #include "update_engine/mock_http_fetcher.h"
|
| #include "update_engine/omaha_hash_calculator.h"
|
| @@ -118,16 +121,16 @@ class OutputObjectCollectorAction : public Action<OutputObjectCollectorAction> {
|
| // OmahaRequestAction. out_response may be NULL.
|
| // out_post_data may be null; if non-null, the post-data received by the
|
| // mock HttpFetcher is returned.
|
| -bool TestOmahaRequestAction(const OmahaRequestParams& params,
|
| - const string& http_response,
|
| - bool expected_success,
|
| - OmahaResponse* out_response,
|
| - vector<char> *out_post_data) {
|
| - GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE);
|
| - MockHttpFetcher *fetcher = new MockHttpFetcher(http_response.data(),
|
| +bool TestUpdateCheck(const OmahaRequestParams& params,
|
| + const string& http_response,
|
| + bool expected_success,
|
| + OmahaResponse* out_response,
|
| + vector<char>* out_post_data) {
|
| + GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE);
|
| + MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(),
|
| http_response.size());
|
| ObjectFeederAction<OmahaRequestParams> feeder_action;
|
| - OmahaRequestAction action(fetcher); // takes ownership of fetcher
|
| + OmahaRequestAction action(NULL, fetcher); // takes ownership of fetcher
|
| OmahaRequestActionTestProcessorDelegate delegate;
|
| delegate.loop_ = loop;
|
| delegate.expected_success_ = expected_success;
|
| @@ -153,6 +156,35 @@ bool TestOmahaRequestAction(const OmahaRequestParams& params,
|
| return collector_action.has_input_object_;
|
| }
|
|
|
| +// Tests Event requests -- they should always succeed. |out_post_data|
|
| +// may be null; if non-null, the post-data received by the mock
|
| +// HttpFetcher is returned.
|
| +void TestEvent(const OmahaRequestParams& params,
|
| + OmahaEvent* event,
|
| + const string& http_response,
|
| + vector<char>* out_post_data) {
|
| + GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE);
|
| + MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(),
|
| + http_response.size());
|
| + ObjectFeederAction<OmahaRequestParams> feeder_action;
|
| + OmahaRequestAction action(event, fetcher); // takes ownership of fetcher
|
| + OmahaRequestActionTestProcessorDelegate delegate;
|
| + delegate.loop_ = loop;
|
| + ActionProcessor processor;
|
| + feeder_action.set_obj(params);
|
| + processor.set_delegate(&delegate);
|
| + processor.EnqueueAction(&feeder_action);
|
| + processor.EnqueueAction(&action);
|
| +
|
| + BondActions(&feeder_action, &action);
|
| +
|
| + g_timeout_add(0, &StartProcessorInRunLoop, &processor);
|
| + g_main_loop_run(loop);
|
| + g_main_loop_unref(loop);
|
| + if (out_post_data)
|
| + *out_post_data = fetcher->post_data();
|
| +}
|
| +
|
| TEST(OmahaRequestActionTest, NoUpdateTest) {
|
| OmahaRequestParams params("", // machine_id
|
| "", // user_id
|
| @@ -167,11 +199,11 @@ TEST(OmahaRequestActionTest, NoUpdateTest) {
|
| ""); // url
|
| OmahaResponse response;
|
| ASSERT_TRUE(
|
| - TestOmahaRequestAction(params,
|
| - GetNoUpdateResponse(OmahaRequestParams::kAppId),
|
| - true,
|
| - &response,
|
| - NULL));
|
| + TestUpdateCheck(params,
|
| + GetNoUpdateResponse(OmahaRequestParams::kAppId),
|
| + true,
|
| + &response,
|
| + NULL));
|
| EXPECT_FALSE(response.update_exists);
|
| }
|
|
|
| @@ -189,18 +221,18 @@ TEST(OmahaRequestActionTest, ValidUpdateTest) {
|
| ""); // url
|
| OmahaResponse response;
|
| ASSERT_TRUE(
|
| - TestOmahaRequestAction(params,
|
| - GetUpdateResponse(OmahaRequestParams::kAppId,
|
| - "1.2.3.4", // version
|
| - "http://more/info",
|
| - "true", // prompt
|
| - "http://code/base", // dl url
|
| - "HASH1234=", // checksum
|
| - "false", // needs admin
|
| - "123"), // size
|
| - true,
|
| - &response,
|
| - NULL));
|
| + TestUpdateCheck(params,
|
| + GetUpdateResponse(OmahaRequestParams::kAppId,
|
| + "1.2.3.4", // version
|
| + "http://more/info",
|
| + "true", // prompt
|
| + "http://code/base", // dl url
|
| + "HASH1234=", // checksum
|
| + "false", // needs admin
|
| + "123"), // size
|
| + true,
|
| + &response,
|
| + NULL));
|
| EXPECT_TRUE(response.update_exists);
|
| EXPECT_EQ("1.2.3.4", response.display_version);
|
| EXPECT_EQ("http://code/base", response.codebase);
|
| @@ -229,7 +261,8 @@ TEST(OmahaRequestActionTest, NoOutputPipeTest) {
|
|
|
| ObjectFeederAction<OmahaRequestParams> feeder_action;
|
| feeder_action.set_obj(params);
|
| - OmahaRequestAction action(new MockHttpFetcher(http_response.data(),
|
| + OmahaRequestAction action(NULL,
|
| + new MockHttpFetcher(http_response.data(),
|
| http_response.size()));
|
| OmahaRequestActionTestProcessorDelegate delegate;
|
| delegate.loop_ = loop;
|
| @@ -259,11 +292,11 @@ TEST(OmahaRequestActionTest, InvalidXmlTest) {
|
| "http://url");
|
| OmahaResponse response;
|
| ASSERT_FALSE(
|
| - TestOmahaRequestAction(params,
|
| - "invalid xml>",
|
| - false,
|
| - &response,
|
| - NULL));
|
| + TestUpdateCheck(params,
|
| + "invalid xml>",
|
| + false,
|
| + &response,
|
| + NULL));
|
| EXPECT_FALSE(response.update_exists);
|
| }
|
|
|
| @@ -280,7 +313,7 @@ TEST(OmahaRequestActionTest, MissingStatusTest) {
|
| "unittest_track",
|
| "http://url");
|
| OmahaResponse response;
|
| - ASSERT_FALSE(TestOmahaRequestAction(
|
| + ASSERT_FALSE(TestUpdateCheck(
|
| params,
|
| "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate "
|
| "xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app "
|
| @@ -305,7 +338,7 @@ TEST(OmahaRequestActionTest, InvalidStatusTest) {
|
| "unittest_track",
|
| "http://url");
|
| OmahaResponse response;
|
| - ASSERT_FALSE(TestOmahaRequestAction(
|
| + ASSERT_FALSE(TestUpdateCheck(
|
| params,
|
| "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate "
|
| "xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app "
|
| @@ -330,7 +363,7 @@ TEST(OmahaRequestActionTest, MissingNodesetTest) {
|
| "unittest_track",
|
| "http://url");
|
| OmahaResponse response;
|
| - ASSERT_FALSE(TestOmahaRequestAction(
|
| + ASSERT_FALSE(TestUpdateCheck(
|
| params,
|
| "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate "
|
| "xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app "
|
| @@ -355,24 +388,24 @@ TEST(OmahaRequestActionTest, MissingFieldTest) {
|
| "unittest_track",
|
| "http://url");
|
| OmahaResponse response;
|
| - ASSERT_TRUE(TestOmahaRequestAction(params,
|
| - string("<?xml version=\"1.0\" "
|
| - "encoding=\"UTF-8\"?><gupdate "
|
| - "xmlns=\"http://www.google.com/"
|
| - "update2/response\" "
|
| - "protocol=\"2.0\"><app appid=\"") +
|
| - OmahaRequestParams::kAppId
|
| - + "\" status=\"ok\"><ping "
|
| - "status=\"ok\"/><updatecheck "
|
| - "DisplayVersion=\"1.2.3.4\" "
|
| - "Prompt=\"false\" "
|
| - "codebase=\"http://code/base\" "
|
| - "hash=\"HASH1234=\" needsadmin=\"true\" "
|
| - "size=\"123\" "
|
| - "status=\"ok\"/></app></gupdate>",
|
| - true,
|
| - &response,
|
| - NULL));
|
| + ASSERT_TRUE(TestUpdateCheck(params,
|
| + string("<?xml version=\"1.0\" "
|
| + "encoding=\"UTF-8\"?><gupdate "
|
| + "xmlns=\"http://www.google.com/"
|
| + "update2/response\" "
|
| + "protocol=\"2.0\"><app appid=\"") +
|
| + OmahaRequestParams::kAppId
|
| + + "\" status=\"ok\"><ping "
|
| + "status=\"ok\"/><updatecheck "
|
| + "DisplayVersion=\"1.2.3.4\" "
|
| + "Prompt=\"false\" "
|
| + "codebase=\"http://code/base\" "
|
| + "hash=\"HASH1234=\" needsadmin=\"true\" "
|
| + "size=\"123\" "
|
| + "status=\"ok\"/></app></gupdate>",
|
| + true,
|
| + &response,
|
| + NULL));
|
| EXPECT_TRUE(response.update_exists);
|
| EXPECT_EQ("1.2.3.4", response.display_version);
|
| EXPECT_EQ("http://code/base", response.codebase);
|
| @@ -419,7 +452,8 @@ TEST(OmahaRequestActionTest, TerminateTransferTest) {
|
|
|
| ObjectFeederAction<OmahaRequestParams> feeder_action;
|
| feeder_action.set_obj(params);
|
| - OmahaRequestAction action(new MockHttpFetcher(http_response.data(),
|
| + OmahaRequestAction action(NULL,
|
| + new MockHttpFetcher(http_response.data(),
|
| http_response.size()));
|
| TerminateEarlyTestProcessorDelegate delegate;
|
| delegate.loop_ = loop;
|
| @@ -457,11 +491,11 @@ TEST(OmahaRequestActionTest, XmlEncodeTest) {
|
| "http://url");
|
| OmahaResponse response;
|
| ASSERT_FALSE(
|
| - TestOmahaRequestAction(params,
|
| - "invalid xml>",
|
| - false,
|
| - &response,
|
| - &post_data));
|
| + TestUpdateCheck(params,
|
| + "invalid xml>",
|
| + false,
|
| + &response,
|
| + &post_data));
|
| // convert post_data to string
|
| string post_str(&post_data[0], post_data.size());
|
| EXPECT_NE(post_str.find("testthemachine<id"), string::npos);
|
| @@ -487,21 +521,21 @@ TEST(OmahaRequestActionTest, XmlDecodeTest) {
|
| "http://url");
|
| OmahaResponse response;
|
| ASSERT_TRUE(
|
| - TestOmahaRequestAction(params,
|
| - GetUpdateResponse(OmahaRequestParams::kAppId,
|
| - "1.2.3.4", // version
|
| - "testthe<url", // more info
|
| - "true", // prompt
|
| - "testthe&code", // dl url
|
| - "HASH1234=", // checksum
|
| - "false", // needs admin
|
| - "123"), // size
|
| - true,
|
| - &response,
|
| - NULL));
|
| + TestUpdateCheck(params,
|
| + GetUpdateResponse(OmahaRequestParams::kAppId,
|
| + "1.2.3.4", // version
|
| + "testthe<url", // more info
|
| + "true", // prompt
|
| + "testthe&codebase", // dl url
|
| + "HASH1234=", // checksum
|
| + "false", // needs admin
|
| + "123"), // size
|
| + true,
|
| + &response,
|
| + NULL));
|
|
|
| EXPECT_EQ(response.more_info_url, "testthe<url");
|
| - EXPECT_EQ(response.codebase, "testthe&code");
|
| + EXPECT_EQ(response.codebase, "testthe&codebase");
|
| }
|
|
|
| TEST(OmahaRequestActionTest, ParseIntTest) {
|
| @@ -518,21 +552,97 @@ TEST(OmahaRequestActionTest, ParseIntTest) {
|
| "http://url");
|
| OmahaResponse response;
|
| ASSERT_TRUE(
|
| - TestOmahaRequestAction(params,
|
| - GetUpdateResponse(OmahaRequestParams::kAppId,
|
| - "1.2.3.4", // version
|
| - "theurl", // more info
|
| - "true", // prompt
|
| - "thecodebase", // dl url
|
| - "HASH1234=", // checksum
|
| - "false", // needs admin
|
| - // overflows int32:
|
| - "123123123123123"), // size
|
| - true,
|
| - &response,
|
| - NULL));
|
| + TestUpdateCheck(params,
|
| + GetUpdateResponse(OmahaRequestParams::kAppId,
|
| + "1.2.3.4", // version
|
| + "theurl", // more info
|
| + "true", // prompt
|
| + "thecodebase", // dl url
|
| + "HASH1234=", // checksum
|
| + "false", // needs admin
|
| + // overflows int32:
|
| + "123123123123123"), // size
|
| + true,
|
| + &response,
|
| + NULL));
|
|
|
| EXPECT_EQ(response.size, 123123123123123ll);
|
| }
|
|
|
| +TEST(OmahaRequestActionTest, FormatUpdateCheckOutputTest) {
|
| + vector<char> post_data;
|
| + OmahaRequestParams params("machine_id",
|
| + "user_id",
|
| + OmahaRequestParams::kOsPlatform,
|
| + OmahaRequestParams::kOsVersion,
|
| + "service_pack",
|
| + "x86-generic",
|
| + OmahaRequestParams::kAppId,
|
| + "0.1.0.0",
|
| + "en-US",
|
| + "unittest_track",
|
| + "http://url");
|
| + OmahaResponse response;
|
| + ASSERT_FALSE(TestUpdateCheck(params,
|
| + "invalid xml>",
|
| + false,
|
| + &response,
|
| + &post_data));
|
| + // convert post_data to string
|
| + string post_str(&post_data[0], post_data.size());
|
| + EXPECT_NE(post_str.find(" <o:ping active=\"0\"></o:ping>\n"
|
| + " <o:updatecheck></o:updatecheck>\n"),
|
| + string::npos);
|
| + EXPECT_EQ(post_str.find("o:event"), string::npos);
|
| +}
|
| +
|
| +TEST(OmahaRequestActionTest, FormatEventOutputTest) {
|
| + vector<char> post_data;
|
| + OmahaRequestParams params("machine_id",
|
| + "user_id",
|
| + OmahaRequestParams::kOsPlatform,
|
| + OmahaRequestParams::kOsVersion,
|
| + "service_pack",
|
| + "x86-generic",
|
| + OmahaRequestParams::kAppId,
|
| + "0.1.0.0",
|
| + "en-US",
|
| + "unittest_track",
|
| + "http://url");
|
| + TestEvent(params,
|
| + new OmahaEvent(OmahaEvent::kTypeDownloadComplete,
|
| + OmahaEvent::kResultError,
|
| + 5),
|
| + "invalid xml>",
|
| + &post_data);
|
| + // convert post_data to string
|
| + string post_str(&post_data[0], post_data.size());
|
| + string expected_event = StringPrintf(
|
| + " <o:event eventtype=\"%d\" eventresult=\"%d\" "
|
| + "errorcode=\"%d\"></o:event>\n",
|
| + OmahaEvent::kTypeDownloadComplete,
|
| + OmahaEvent::kResultError,
|
| + 5);
|
| + EXPECT_NE(post_str.find(expected_event), string::npos);
|
| + EXPECT_EQ(post_str.find("o:updatecheck"), string::npos);
|
| +}
|
| +
|
| +TEST(OmahaRequestActionTest, IsEventTest) {
|
| + string http_response("doesn't matter");
|
| +
|
| + OmahaRequestAction update_check_action(
|
| + NULL,
|
| + new MockHttpFetcher(http_response.data(),
|
| + http_response.size()));
|
| + EXPECT_FALSE(update_check_action.IsEvent());
|
| +
|
| + OmahaRequestAction event_action(
|
| + new OmahaEvent(OmahaEvent::kTypeInstallComplete,
|
| + OmahaEvent::kResultError,
|
| + 0),
|
| + new MockHttpFetcher(http_response.data(),
|
| + http_response.size()));
|
| + EXPECT_TRUE(event_action.IsEvent());
|
| +}
|
| +
|
| } // namespace chromeos_update_engine
|
|
|