Index: omaha_request_action_unittest.cc |
diff --git a/omaha_request_action_unittest.cc b/omaha_request_action_unittest.cc |
index a4ecb2917d4ce997973a75a6e152ccadc7261ead..5ac0811b9f5e12c563cda594eefae00097799c1a 100755 |
--- a/omaha_request_action_unittest.cc |
+++ b/omaha_request_action_unittest.cc |
@@ -8,22 +8,46 @@ |
#include <glib.h> |
#include "base/string_util.h" |
+#include "base/time.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" |
#include "update_engine/omaha_request_action.h" |
#include "update_engine/omaha_request_params.h" |
+#include "update_engine/prefs_mock.h" |
#include "update_engine/test_utils.h" |
+using base::Time; |
+using base::TimeDelta; |
using std::string; |
using std::vector; |
+using testing::_; |
+using testing::AllOf; |
+using testing::Ge; |
+using testing::Le; |
+using testing::Return; |
+using testing::SetArgumentPointee; |
namespace chromeos_update_engine { |
class OmahaRequestActionTest : public ::testing::Test { }; |
namespace { |
+const OmahaRequestParams kDefaultTestParams( |
+ "machine_id", |
+ "user_id", |
+ OmahaRequestParams::kOsPlatform, |
+ OmahaRequestParams::kOsVersion, |
+ "service_pack", |
+ "x86-generic", |
+ OmahaRequestParams::kAppId, |
+ "0.1.0.0", |
+ "en-US", |
+ "unittest", |
+ false, // delta okay |
+ "http://url"); |
+ |
string GetNoUpdateResponse(const string& app_id) { |
return string( |
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " |
@@ -83,7 +107,6 @@ gboolean StartProcessorInRunLoop(gpointer data) { |
processor->StartProcessing(); |
return FALSE; |
} |
- |
} // namespace {} |
class OutputObjectCollectorAction; |
@@ -120,11 +143,13 @@ class OutputObjectCollectorAction : public Action<OutputObjectCollectorAction> { |
OmahaResponse omaha_response_; |
}; |
-// returns true iff an output response was obtained from the |
-// 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 TestUpdateCheck(const OmahaRequestParams& params, |
+// Returns true iff an output response was obtained from the |
+// OmahaRequestAction. |prefs| may be NULL, in which case a local |
+// PrefsMock is used. 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 TestUpdateCheck(PrefsInterface* prefs, |
+ const OmahaRequestParams& params, |
const string& http_response, |
ActionExitCode expected_code, |
OmahaResponse* out_response, |
@@ -132,7 +157,11 @@ bool TestUpdateCheck(const OmahaRequestParams& params, |
GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); |
MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), |
http_response.size()); |
- OmahaRequestAction action(params, NULL, fetcher); |
+ PrefsMock local_prefs; |
+ OmahaRequestAction action(prefs ? prefs : &local_prefs, |
+ params, |
+ NULL, |
+ fetcher); |
OmahaRequestActionTestProcessorDelegate delegate; |
delegate.loop_ = loop; |
delegate.expected_code_ = expected_code; |
@@ -165,7 +194,8 @@ void TestEvent(const OmahaRequestParams& params, |
GMainLoop* loop = g_main_loop_new(g_main_context_default(), FALSE); |
MockHttpFetcher* fetcher = new MockHttpFetcher(http_response.data(), |
http_response.size()); |
- OmahaRequestAction action(params, event, fetcher); |
+ PrefsMock prefs; |
+ OmahaRequestAction action(&prefs, params, event, fetcher); |
OmahaRequestActionTestProcessorDelegate delegate; |
delegate.loop_ = loop; |
ActionProcessor processor; |
@@ -180,21 +210,10 @@ void TestEvent(const OmahaRequestParams& params, |
} |
TEST(OmahaRequestActionTest, NoUpdateTest) { |
- OmahaRequestParams params("", // machine_id |
- "", // user_id |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "", // os_sp |
- "x86-generic", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest", |
- false, // delta okay |
- ""); // url |
OmahaResponse response; |
ASSERT_TRUE( |
- TestUpdateCheck(params, |
+ TestUpdateCheck(NULL, // prefs |
+ kDefaultTestParams, |
GetNoUpdateResponse(OmahaRequestParams::kAppId), |
kActionCodeSuccess, |
&response, |
@@ -203,21 +222,10 @@ TEST(OmahaRequestActionTest, NoUpdateTest) { |
} |
TEST(OmahaRequestActionTest, ValidUpdateTest) { |
- OmahaRequestParams params("machine_id", |
- "user_id", |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "service_pack", |
- "arm-generic", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest_track", |
- false, // delta okay |
- ""); // url |
OmahaResponse response; |
ASSERT_TRUE( |
- TestUpdateCheck(params, |
+ TestUpdateCheck(NULL, // prefs |
+ kDefaultTestParams, |
GetUpdateResponse(OmahaRequestParams::kAppId, |
"1.2.3.4", // version |
"http://more/info", |
@@ -241,23 +249,12 @@ TEST(OmahaRequestActionTest, ValidUpdateTest) { |
} |
TEST(OmahaRequestActionTest, NoOutputPipeTest) { |
- OmahaRequestParams params("", // machine_id |
- "", // usr_id |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "", // os_sp |
- "", // os_board |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest", |
- false, // delta okay |
- ""); // url |
const string http_response(GetNoUpdateResponse(OmahaRequestParams::kAppId)); |
GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); |
- OmahaRequestAction action(params, NULL, |
+ PrefsMock prefs; |
+ OmahaRequestAction action(&prefs, kDefaultTestParams, NULL, |
new MockHttpFetcher(http_response.data(), |
http_response.size())); |
OmahaRequestActionTestProcessorDelegate delegate; |
@@ -273,21 +270,10 @@ TEST(OmahaRequestActionTest, NoOutputPipeTest) { |
} |
TEST(OmahaRequestActionTest, InvalidXmlTest) { |
- OmahaRequestParams params("machine_id", |
- "user_id", |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "service_pack", |
- "x86-generic", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest_track", |
- false, // delta okay |
- "http://url"); |
OmahaResponse response; |
ASSERT_FALSE( |
- TestUpdateCheck(params, |
+ TestUpdateCheck(NULL, // prefs |
+ kDefaultTestParams, |
"invalid xml>", |
kActionCodeError, |
&response, |
@@ -296,21 +282,10 @@ TEST(OmahaRequestActionTest, InvalidXmlTest) { |
} |
TEST(OmahaRequestActionTest, MissingStatusTest) { |
- OmahaRequestParams params("machine_id", |
- "user_id", |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "service_pack", |
- "x86-generic", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest_track", |
- false, // delta okay |
- "http://url"); |
OmahaResponse response; |
ASSERT_FALSE(TestUpdateCheck( |
- params, |
+ NULL, // prefs |
+ kDefaultTestParams, |
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " |
"xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app " |
"appid=\"foo\" status=\"ok\"><ping " |
@@ -322,21 +297,10 @@ TEST(OmahaRequestActionTest, MissingStatusTest) { |
} |
TEST(OmahaRequestActionTest, InvalidStatusTest) { |
- OmahaRequestParams params("machine_id", |
- "user_id", |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "service_pack", |
- "x86-generic", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest_track", |
- false, // delta okay |
- "http://url"); |
OmahaResponse response; |
ASSERT_FALSE(TestUpdateCheck( |
- params, |
+ NULL, // prefs |
+ kDefaultTestParams, |
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " |
"xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app " |
"appid=\"foo\" status=\"ok\"><ping " |
@@ -348,21 +312,10 @@ TEST(OmahaRequestActionTest, InvalidStatusTest) { |
} |
TEST(OmahaRequestActionTest, MissingNodesetTest) { |
- OmahaRequestParams params("machine_id", |
- "user_id", |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "service_pack", |
- "x86-generic", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest_track", |
- false, // delta okay |
- "http://url"); |
OmahaResponse response; |
ASSERT_FALSE(TestUpdateCheck( |
- params, |
+ NULL, // prefs |
+ kDefaultTestParams, |
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " |
"xmlns=\"http://www.google.com/update2/response\" protocol=\"2.0\"><app " |
"appid=\"foo\" status=\"ok\"><ping " |
@@ -374,20 +327,9 @@ TEST(OmahaRequestActionTest, MissingNodesetTest) { |
} |
TEST(OmahaRequestActionTest, MissingFieldTest) { |
- OmahaRequestParams params("machine_id", |
- "user_id", |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "service_pack", |
- "x86-generic", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest_track", |
- false, // delta okay |
- "http://url"); |
OmahaResponse response; |
- ASSERT_TRUE(TestUpdateCheck(params, |
+ ASSERT_TRUE(TestUpdateCheck(NULL, // prefs |
+ kDefaultTestParams, |
string("<?xml version=\"1.0\" " |
"encoding=\"UTF-8\"?><gupdate " |
"xmlns=\"http://www.google.com/" |
@@ -436,22 +378,11 @@ gboolean TerminateTransferTestStarter(gpointer data) { |
} // namespace {} |
TEST(OmahaRequestActionTest, TerminateTransferTest) { |
- OmahaRequestParams params("", // machine_id |
- "", // usr_id |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "", // os_sp |
- "", // os_board |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest", |
- false, // delta okay |
- "http://url"); |
string http_response("doesn't matter"); |
GMainLoop *loop = g_main_loop_new(g_main_context_default(), FALSE); |
- OmahaRequestAction action(params, NULL, |
+ PrefsMock prefs; |
+ OmahaRequestAction action(&prefs, kDefaultTestParams, NULL, |
new MockHttpFetcher(http_response.data(), |
http_response.size())); |
TerminateEarlyTestProcessorDelegate delegate; |
@@ -480,47 +411,36 @@ TEST(OmahaRequestActionTest, XmlEncodeTest) { |
OmahaRequestParams::kOsPlatform, |
OmahaRequestParams::kOsVersion, |
"testtheservice_pack>", |
- "x86 generic", |
+ "x86 generic<id", |
OmahaRequestParams::kAppId, |
"0.1.0.0", |
"en-US", |
- "unittest_track", |
+ "unittest_track<", |
false, // delta okay |
"http://url"); |
OmahaResponse response; |
ASSERT_FALSE( |
- TestUpdateCheck(params, |
+ TestUpdateCheck(NULL, // prefs |
+ params, |
"invalid xml>", |
kActionCodeError, |
&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); |
- EXPECT_EQ(post_str.find("testthemachine<id"), string::npos); |
- EXPECT_NE(post_str.find("testtheuser_id&lt;"), string::npos); |
- EXPECT_EQ(post_str.find("testtheuser_id<"), string::npos); |
EXPECT_NE(post_str.find("testtheservice_pack>"), string::npos); |
EXPECT_EQ(post_str.find("testtheservice_pack>"), string::npos); |
- EXPECT_NE(post_str.find("x86 generic"), string::npos); |
+ EXPECT_NE(post_str.find("x86 generic<id"), string::npos); |
+ EXPECT_EQ(post_str.find("x86 generic<id"), string::npos); |
+ EXPECT_NE(post_str.find("unittest_track&lt;"), string::npos); |
+ EXPECT_EQ(post_str.find("unittest_track<"), string::npos); |
} |
TEST(OmahaRequestActionTest, XmlDecodeTest) { |
- OmahaRequestParams params("machine_id", |
- "user_id", |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "service_pack", |
- "x86-generic", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest_track", |
- false, // delta okay |
- "http://url"); |
OmahaResponse response; |
ASSERT_TRUE( |
- TestUpdateCheck(params, |
+ TestUpdateCheck(NULL, // prefs |
+ kDefaultTestParams, |
GetUpdateResponse(OmahaRequestParams::kAppId, |
"1.2.3.4", // version |
"testthe<url", // more info |
@@ -538,21 +458,10 @@ TEST(OmahaRequestActionTest, XmlDecodeTest) { |
} |
TEST(OmahaRequestActionTest, ParseIntTest) { |
- OmahaRequestParams params("machine_id", |
- "user_id", |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "service_pack", |
- "the_board", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest_track", |
- false, // delta okay |
- "http://url"); |
OmahaResponse response; |
ASSERT_TRUE( |
- TestUpdateCheck(params, |
+ TestUpdateCheck(NULL, // prefs |
+ kDefaultTestParams, |
GetUpdateResponse(OmahaRequestParams::kAppId, |
"1.2.3.4", // version |
"theurl", // more info |
@@ -571,27 +480,15 @@ TEST(OmahaRequestActionTest, ParseIntTest) { |
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", |
- false, // delta okay |
- "http://url"); |
- OmahaResponse response; |
- ASSERT_FALSE(TestUpdateCheck(params, |
+ ASSERT_FALSE(TestUpdateCheck(NULL, // prefs |
+ kDefaultTestParams, |
"invalid xml>", |
kActionCodeError, |
- &response, |
+ NULL, // 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" |
+ EXPECT_NE(post_str.find(" <o:ping a=\"-1\" r=\"-1\"></o:ping>\n" |
" <o:updatecheck></o:updatecheck>\n"), |
string::npos); |
EXPECT_EQ(post_str.find("o:event"), string::npos); |
@@ -599,19 +496,7 @@ TEST(OmahaRequestActionTest, FormatUpdateCheckOutputTest) { |
TEST(OmahaRequestActionTest, FormatSuccessEventOutputTest) { |
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", |
- false, // delta okay |
- "http://url"); |
- TestEvent(params, |
+ TestEvent(kDefaultTestParams, |
new OmahaEvent(OmahaEvent::kTypeUpdateDownloadStarted), |
"invalid xml>", |
&post_data); |
@@ -622,24 +507,13 @@ TEST(OmahaRequestActionTest, FormatSuccessEventOutputTest) { |
OmahaEvent::kTypeUpdateDownloadStarted, |
OmahaEvent::kResultSuccess); |
EXPECT_NE(post_str.find(expected_event), string::npos); |
+ EXPECT_EQ(post_str.find("o:ping"), string::npos); |
EXPECT_EQ(post_str.find("o:updatecheck"), string::npos); |
} |
TEST(OmahaRequestActionTest, FormatErrorEventOutputTest) { |
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", |
- false, // delta okay |
- "http://url"); |
- TestEvent(params, |
+ TestEvent(kDefaultTestParams, |
new OmahaEvent(OmahaEvent::kTypeDownloadComplete, |
OmahaEvent::kResultError, |
kActionCodeError), |
@@ -659,19 +533,7 @@ TEST(OmahaRequestActionTest, FormatErrorEventOutputTest) { |
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", |
- false, // delta okay |
- "http://url"); |
- TestEvent(params, |
+ TestEvent(kDefaultTestParams, |
new OmahaEvent(OmahaEvent::kTypeDownloadComplete, |
OmahaEvent::kResultError, |
kActionCodeError), |
@@ -691,28 +553,18 @@ TEST(OmahaRequestActionTest, FormatEventOutputTest) { |
TEST(OmahaRequestActionTest, IsEventTest) { |
string http_response("doesn't matter"); |
- OmahaRequestParams params("machine_id", |
- "user_id", |
- OmahaRequestParams::kOsPlatform, |
- OmahaRequestParams::kOsVersion, |
- "service_pack", |
- "x86-generic", |
- OmahaRequestParams::kAppId, |
- "0.1.0.0", |
- "en-US", |
- "unittest_track", |
- false, // delta okay |
- "http://url"); |
- |
+ PrefsMock prefs; |
OmahaRequestAction update_check_action( |
- params, |
+ &prefs, |
+ kDefaultTestParams, |
NULL, |
new MockHttpFetcher(http_response.data(), |
http_response.size())); |
EXPECT_FALSE(update_check_action.IsEvent()); |
OmahaRequestAction event_action( |
- params, |
+ &prefs, |
+ kDefaultTestParams, |
new OmahaEvent(OmahaEvent::kTypeUpdateComplete), |
new MockHttpFetcher(http_response.data(), |
http_response.size())); |
@@ -736,7 +588,8 @@ TEST(OmahaRequestActionTest, FormatDeltaOkayOutputTest) { |
"unittest_track", |
delta_okay, |
"http://url"); |
- ASSERT_FALSE(TestUpdateCheck(params, |
+ ASSERT_FALSE(TestUpdateCheck(NULL, // prefs |
+ params, |
"invalid xml>", |
kActionCodeError, |
NULL, |
@@ -768,4 +621,182 @@ TEST(OmahaRequestActionTest, OmahaEventTest) { |
EXPECT_EQ(kActionCodeError, error_event.error_code); |
} |
+TEST(OmahaRequestActionTest, PingTest) { |
+ PrefsMock prefs; |
+ // Add a few hours to the day difference to test no rounding, etc. |
+ int64_t five_days_ago = |
+ (Time::Now() - TimeDelta::FromHours(5 * 24 + 13)).ToInternalValue(); |
+ int64_t six_days_ago = |
+ (Time::Now() - TimeDelta::FromHours(6 * 24 + 11)).ToInternalValue(); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(six_days_ago), Return(true))); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(five_days_ago), Return(true))); |
+ vector<char> post_data; |
+ ASSERT_TRUE( |
+ TestUpdateCheck(&prefs, |
+ kDefaultTestParams, |
+ GetNoUpdateResponse(OmahaRequestParams::kAppId), |
+ kActionCodeSuccess, |
+ NULL, |
+ &post_data)); |
+ string post_str(&post_data[0], post_data.size()); |
+ EXPECT_NE(post_str.find("<o:ping a=\"6\" r=\"5\"></o:ping>"), string::npos); |
+} |
+ |
+TEST(OmahaRequestActionTest, ActivePingTest) { |
+ PrefsMock prefs; |
+ int64_t three_days_ago = |
+ (Time::Now() - TimeDelta::FromHours(3 * 24 + 12)).ToInternalValue(); |
+ int64_t now = Time::Now().ToInternalValue(); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(three_days_ago), Return(true))); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); |
+ vector<char> post_data; |
+ ASSERT_TRUE( |
+ TestUpdateCheck(&prefs, |
+ kDefaultTestParams, |
+ GetNoUpdateResponse(OmahaRequestParams::kAppId), |
+ kActionCodeSuccess, |
+ NULL, |
+ &post_data)); |
+ string post_str(&post_data[0], post_data.size()); |
+ EXPECT_NE(post_str.find("<o:ping a=\"3\"></o:ping>"), string::npos); |
+} |
+ |
+TEST(OmahaRequestActionTest, RollCallPingTest) { |
+ PrefsMock prefs; |
+ int64_t four_days_ago = |
+ (Time::Now() - TimeDelta::FromHours(4 * 24)).ToInternalValue(); |
+ int64_t now = Time::Now().ToInternalValue(); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(now), Return(true))); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(four_days_ago), Return(true))); |
+ vector<char> post_data; |
+ ASSERT_TRUE( |
+ TestUpdateCheck(&prefs, |
+ kDefaultTestParams, |
+ GetNoUpdateResponse(OmahaRequestParams::kAppId), |
+ kActionCodeSuccess, |
+ NULL, |
+ &post_data)); |
+ string post_str(&post_data[0], post_data.size()); |
+ EXPECT_NE(post_str.find("<o:ping r=\"4\"></o:ping>\n"), string::npos); |
+} |
+ |
+TEST(OmahaRequestActionTest, NoPingTest) { |
+ PrefsMock prefs; |
+ int64_t one_hour_ago = |
+ (Time::Now() - TimeDelta::FromHours(1)).ToInternalValue(); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(one_hour_ago), Return(true))); |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); |
+ vector<char> post_data; |
+ ASSERT_TRUE( |
+ TestUpdateCheck(&prefs, |
+ kDefaultTestParams, |
+ GetNoUpdateResponse(OmahaRequestParams::kAppId), |
+ kActionCodeSuccess, |
+ NULL, |
+ &post_data)); |
+ string post_str(&post_data[0], post_data.size()); |
+ EXPECT_EQ(post_str.find("o:ping"), string::npos); |
+} |
+ |
+TEST(OmahaRequestActionTest, BackInTimePingTest) { |
+ PrefsMock prefs; |
+ int64_t future = |
+ (Time::Now() + TimeDelta::FromHours(3 * 24 + 4)).ToInternalValue(); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastActivePingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); |
+ EXPECT_CALL(prefs, GetInt64(kPrefsLastRollCallPingDay, _)) |
+ .WillOnce(DoAll(SetArgumentPointee<1>(future), Return(true))); |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)) |
+ .WillOnce(Return(true)); |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)) |
+ .WillOnce(Return(true)); |
+ vector<char> post_data; |
+ ASSERT_TRUE( |
+ TestUpdateCheck(&prefs, |
+ kDefaultTestParams, |
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " |
+ "xmlns=\"http://www.google.com/update2/response\" " |
+ "protocol=\"2.0\"><daystart elapsed_seconds=\"100\"/>" |
+ "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" |
+ "<updatecheck status=\"noupdate\"/></app></gupdate>", |
+ kActionCodeSuccess, |
+ NULL, |
+ &post_data)); |
+ string post_str(&post_data[0], post_data.size()); |
+ EXPECT_EQ(post_str.find("o:ping"), string::npos); |
+} |
+ |
+TEST(OmahaRequestActionTest, LastPingDayUpdateTest) { |
+ // This test checks that the action updates the last ping day to now |
+ // minus 200 seconds with a slack for 5 seconds. Therefore, the test |
+ // may fail if it runs for longer than 5 seconds. It shouldn't run |
+ // that long though. |
+ int64_t midnight = |
+ (Time::Now() - TimeDelta::FromSeconds(200)).ToInternalValue(); |
+ int64_t midnight_slack = |
+ (Time::Now() - TimeDelta::FromSeconds(195)).ToInternalValue(); |
+ PrefsMock prefs; |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, |
+ AllOf(Ge(midnight), Le(midnight_slack)))) |
+ .WillOnce(Return(true)); |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, |
+ AllOf(Ge(midnight), Le(midnight_slack)))) |
+ .WillOnce(Return(true)); |
+ ASSERT_TRUE( |
+ TestUpdateCheck(&prefs, |
+ kDefaultTestParams, |
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " |
+ "xmlns=\"http://www.google.com/update2/response\" " |
+ "protocol=\"2.0\"><daystart elapsed_seconds=\"200\"/>" |
+ "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" |
+ "<updatecheck status=\"noupdate\"/></app></gupdate>", |
+ kActionCodeSuccess, |
+ NULL, |
+ NULL)); |
+} |
+ |
+TEST(OmahaRequestActionTest, NoElapsedSecondsTest) { |
+ PrefsMock prefs; |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); |
+ ASSERT_TRUE( |
+ TestUpdateCheck(&prefs, |
+ kDefaultTestParams, |
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " |
+ "xmlns=\"http://www.google.com/update2/response\" " |
+ "protocol=\"2.0\"><daystart blah=\"200\"/>" |
+ "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" |
+ "<updatecheck status=\"noupdate\"/></app></gupdate>", |
+ kActionCodeSuccess, |
+ NULL, |
+ NULL)); |
+} |
+ |
+TEST(OmahaRequestActionTest, BadElapsedSecondsTest) { |
+ PrefsMock prefs; |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastActivePingDay, _)).Times(0); |
+ EXPECT_CALL(prefs, SetInt64(kPrefsLastRollCallPingDay, _)).Times(0); |
+ ASSERT_TRUE( |
+ TestUpdateCheck(&prefs, |
+ kDefaultTestParams, |
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gupdate " |
+ "xmlns=\"http://www.google.com/update2/response\" " |
+ "protocol=\"2.0\"><daystart elapsed_seconds=\"x\"/>" |
+ "<app appid=\"foo\" status=\"ok\"><ping status=\"ok\"/>" |
+ "<updatecheck status=\"noupdate\"/></app></gupdate>", |
+ kActionCodeSuccess, |
+ NULL, |
+ NULL)); |
+} |
+ |
} // namespace chromeos_update_engine |