Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / components / domain_reliability / context_unittest.cc
index c54322b..7979aad 100644 (file)
@@ -39,7 +39,8 @@ DomainReliabilityBeacon MakeBeacon(MockableTime* time) {
 class DomainReliabilityContextTest : public testing::Test {
  protected:
   DomainReliabilityContextTest()
-      : dispatcher_(&time_),
+      : last_network_change_time_(time_.NowTicks()),
+        dispatcher_(&time_),
         params_(MakeTestSchedulerParams()),
         uploader_(base::Bind(&DomainReliabilityContextTest::OnUploadRequest,
                              base::Unretained(this))),
@@ -47,10 +48,16 @@ class DomainReliabilityContextTest : public testing::Test {
         context_(&time_,
                  params_,
                  upload_reporter_string_,
+                 &last_network_change_time_,
                  &dispatcher_,
                  &uploader_,
                  MakeTestConfig().Pass()),
-        upload_pending_(false) {}
+        upload_pending_(false) {
+    // Make sure that the last network change does not overlap requests
+    // made in test cases, which start 250ms in the past (see |MakeBeacon|).
+    last_network_change_time_ = time_.NowTicks();
+    time_.Advance(base::TimeDelta::FromSeconds(1));
+  }
 
   TimeDelta min_delay() const { return params_.minimum_upload_delay; }
   TimeDelta max_delay() const { return params_.maximum_upload_delay; }
@@ -90,6 +97,7 @@ class DomainReliabilityContextTest : public testing::Test {
   }
 
   MockTime time_;
+  base::TimeTicks last_network_change_time_;
   DomainReliabilityDispatcher dispatcher_;
   DomainReliabilityScheduler::Params params_;
   MockUploader uploader_;
@@ -167,10 +175,10 @@ TEST_F(DomainReliabilityContextTest, ReportUpload) {
   const char* kExpectedReport = "{"
       "\"config_version\":\"1\","
       "\"entries\":[{\"domain\":\"localhost\","
-          "\"http_response_code\":200,\"protocol\":\"HTTP\","
-          "\"request_age_ms\":300250,\"request_elapsed_ms\":250,"
-          "\"resource\":\"always_report\",\"server_ip\":\"127.0.0.1\","
-          "\"status\":\"ok\"}],"
+          "\"http_response_code\":200,\"network_changed\":false,"
+          "\"protocol\":\"HTTP\",\"request_age_ms\":300250,"
+          "\"request_elapsed_ms\":250,\"resource\":\"always_report\","
+          "\"server_ip\":\"127.0.0.1\",\"status\":\"ok\"}],"
       "\"reporter\":\"test-reporter\","
       "\"resources\":[{\"failed_requests\":0,\"name\":\"always_report\","
           "\"successful_requests\":1}]}";
@@ -186,5 +194,42 @@ TEST_F(DomainReliabilityContextTest, ReportUpload) {
   EXPECT_TRUE(CheckCounts(1, 0, 0));
 }
 
+TEST_F(DomainReliabilityContextTest, ReportUpload_NetworkChanged) {
+  GURL url("http://example/always_report");
+  DomainReliabilityBeacon beacon = MakeBeacon(&time_);
+  context_.OnBeacon(url, beacon);
+
+  BeaconVector beacons;
+  context_.GetQueuedBeaconsForTesting(&beacons);
+  EXPECT_EQ(1u, beacons.size());
+  EXPECT_TRUE(CheckCounts(0, 1, 0));
+  EXPECT_TRUE(CheckCounts(1, 0, 0));
+
+  // N.B.: Assumes max_delay is 5 minutes.
+  const char* kExpectedReport = "{"
+      "\"config_version\":\"1\","
+      "\"entries\":[{\"domain\":\"localhost\","
+          "\"http_response_code\":200,\"network_changed\":true,"
+          "\"protocol\":\"HTTP\",\"request_age_ms\":300250,"
+          "\"request_elapsed_ms\":250,\"resource\":\"always_report\","
+          "\"server_ip\":\"127.0.0.1\",\"status\":\"ok\"}],"
+      "\"reporter\":\"test-reporter\","
+      "\"resources\":[{\"failed_requests\":0,\"name\":\"always_report\","
+          "\"successful_requests\":1}]}";
+
+  // Simulate a network change after the request but before the upload.
+  last_network_change_time_ = time_.NowTicks();
+  time_.Advance(max_delay());
+
+  EXPECT_TRUE(upload_pending());
+  EXPECT_EQ(kExpectedReport, upload_report());
+  EXPECT_EQ(GURL("https://exampleuploader/upload"), upload_url());
+  CallUploadCallback(true);
+
+  EXPECT_TRUE(CheckNoBeacons());
+  EXPECT_TRUE(CheckCounts(0, 0, 0));
+  EXPECT_TRUE(CheckCounts(1, 0, 0));
+}
+
 }  // namespace
 }  // namespace domain_reliability