Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / components / component_updater / test / component_updater_ping_manager_unittest.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/memory/scoped_ptr.h"
6 #include "base/message_loop/message_loop.h"
7 #include "base/run_loop.h"
8 #include "base/version.h"
9 #include "components/component_updater/component_updater_ping_manager.h"
10 #include "components/component_updater/crx_update_item.h"
11 #include "components/component_updater/test/test_configurator.h"
12 #include "components/component_updater/test/url_request_post_interceptor.h"
13 #include "net/url_request/url_request_test_util.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace component_updater {
17
18 class ComponentUpdaterPingManagerTest : public testing::Test {
19  public:
20   ComponentUpdaterPingManagerTest();
21   virtual ~ComponentUpdaterPingManagerTest() {}
22
23   void RunThreadsUntilIdle();
24
25   // Overrides from testing::Test.
26   virtual void SetUp() OVERRIDE;
27   virtual void TearDown() OVERRIDE;
28
29  protected:
30   scoped_ptr<TestConfigurator> config_;
31   scoped_ptr<PingManager> ping_manager_;
32
33  private:
34   base::MessageLoopForIO loop_;
35 };
36
37 ComponentUpdaterPingManagerTest::ComponentUpdaterPingManagerTest()
38     : config_(new TestConfigurator(base::MessageLoopProxy::current(),
39                                    base::MessageLoopProxy::current())) {
40 }
41
42 void ComponentUpdaterPingManagerTest::SetUp() {
43   ping_manager_.reset(new PingManager(*config_));
44 }
45
46 void ComponentUpdaterPingManagerTest::TearDown() {
47   ping_manager_.reset();
48   config_.reset();
49 }
50
51 void ComponentUpdaterPingManagerTest::RunThreadsUntilIdle() {
52   base::RunLoop().RunUntilIdle();
53 }
54
55 // Test is flaky: http://crbug.com/349547
56 TEST_F(ComponentUpdaterPingManagerTest, DISABLED_PingManagerTest) {
57   scoped_ptr<InterceptorFactory> interceptor_factory(
58       new InterceptorFactory(base::MessageLoopProxy::current()));
59   URLRequestPostInterceptor* interceptor =
60       interceptor_factory->CreateInterceptor();
61   EXPECT_TRUE(interceptor);
62
63   // Test eventresult="1" is sent for successful updates.
64   CrxUpdateItem item;
65   item.id = "abc";
66   item.status = CrxUpdateItem::kUpdated;
67   item.previous_version = base::Version("1.0");
68   item.next_version = base::Version("2.0");
69
70   ping_manager_->OnUpdateComplete(&item);
71   base::RunLoop().RunUntilIdle();
72
73   EXPECT_EQ(1, interceptor->GetCount()) << interceptor->GetRequestsAsString();
74   EXPECT_NE(string::npos,
75             interceptor->GetRequests()[0].find(
76                 "<app appid=\"abc\" version=\"1.0\" nextversion=\"2.0\">"
77                 "<event eventtype=\"3\" eventresult=\"1\"/></app>"))
78       << interceptor->GetRequestsAsString();
79   interceptor->Reset();
80
81   // Test eventresult="0" is sent for failed updates.
82   item = CrxUpdateItem();
83   item.id = "abc";
84   item.status = CrxUpdateItem::kNoUpdate;
85   item.previous_version = base::Version("1.0");
86   item.next_version = base::Version("2.0");
87
88   ping_manager_->OnUpdateComplete(&item);
89   base::RunLoop().RunUntilIdle();
90
91   EXPECT_EQ(1, interceptor->GetCount()) << interceptor->GetRequestsAsString();
92   EXPECT_NE(string::npos,
93             interceptor->GetRequests()[0].find(
94                 "<app appid=\"abc\" version=\"1.0\" nextversion=\"2.0\">"
95                 "<event eventtype=\"3\" eventresult=\"0\"/></app>"))
96       << interceptor->GetRequestsAsString();
97   interceptor->Reset();
98
99   // Test the error values and the fingerprints.
100   item = CrxUpdateItem();
101   item.id = "abc";
102   item.status = CrxUpdateItem::kNoUpdate;
103   item.previous_version = base::Version("1.0");
104   item.next_version = base::Version("2.0");
105   item.previous_fp = "prev fp";
106   item.next_fp = "next fp";
107   item.error_category = 1;
108   item.error_code = 2;
109   item.extra_code1 = -1;
110   item.diff_error_category = 10;
111   item.diff_error_code = 20;
112   item.diff_extra_code1 = -10;
113   item.diff_update_failed = true;
114   item.crx_diffurls.push_back(GURL("http://host/path"));
115
116   ping_manager_->OnUpdateComplete(&item);
117   base::RunLoop().RunUntilIdle();
118
119   EXPECT_EQ(1, interceptor->GetCount()) << interceptor->GetRequestsAsString();
120   EXPECT_NE(string::npos,
121             interceptor->GetRequests()[0].find(
122                 "<app appid=\"abc\" version=\"1.0\" nextversion=\"2.0\">"
123                 "<event eventtype=\"3\" eventresult=\"0\" errorcat=\"1\" "
124                 "errorcode=\"2\" extracode1=\"-1\" diffresult=\"0\" "
125                 "differrorcat=\"10\" "
126                 "differrorcode=\"20\" diffextracode1=\"-10\" "
127                 "previousfp=\"prev fp\" nextfp=\"next fp\"/></app>"))
128       << interceptor->GetRequestsAsString();
129   interceptor->Reset();
130
131   // Test the download metrics.
132   item = CrxUpdateItem();
133   item.id = "abc";
134   item.status = CrxUpdateItem::kUpdated;
135   item.previous_version = base::Version("1.0");
136   item.next_version = base::Version("2.0");
137
138   CrxDownloader::DownloadMetrics download_metrics;
139   download_metrics.url = GURL("http://host1/path1");
140   download_metrics.downloader = CrxDownloader::DownloadMetrics::kUrlFetcher;
141   download_metrics.error = -1;
142   download_metrics.downloaded_bytes = 123;
143   download_metrics.total_bytes = 456;
144   download_metrics.download_time_ms = 987;
145   item.download_metrics.push_back(download_metrics);
146
147   download_metrics = CrxDownloader::DownloadMetrics();
148   download_metrics.url = GURL("http://host2/path2");
149   download_metrics.downloader = CrxDownloader::DownloadMetrics::kBits;
150   download_metrics.error = 0;
151   download_metrics.downloaded_bytes = 1230;
152   download_metrics.total_bytes = 4560;
153   download_metrics.download_time_ms = 9870;
154   item.download_metrics.push_back(download_metrics);
155
156   ping_manager_->OnUpdateComplete(&item);
157   base::RunLoop().RunUntilIdle();
158
159   EXPECT_EQ(1, interceptor->GetCount()) << interceptor->GetRequestsAsString();
160   EXPECT_NE(
161       string::npos,
162       interceptor->GetRequests()[0].find(
163           "<app appid=\"abc\" version=\"1.0\" nextversion=\"2.0\">"
164           "<event eventtype=\"3\" eventresult=\"1\"/>"
165           "<event eventtype=\"14\" eventresult=\"0\" downloader=\"direct\" "
166           "errorcode=\"-1\" url=\"http://host1/path1\" downloaded=\"123\" "
167           "total=\"456\" download_time_ms=\"987\"/>"
168           "<event eventtype=\"14\" eventresult=\"1\" downloader=\"bits\" "
169           "url=\"http://host2/path2\" downloaded=\"1230\" total=\"4560\" "
170           "download_time_ms=\"9870\"/></app>"))
171       << interceptor->GetRequestsAsString();
172   interceptor->Reset();
173 }
174
175 }  // namespace component_updater