Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(139)

Side by Side Diff: chrome/common/metrics/metrics_log_manager_unittest.cc

Issue 9396001: Begin to separate the MetricsService logic for creating vs uploading logs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/metrics/metrics_log_base.h" 5 #include "chrome/common/metrics/metrics_log_base.h"
6 #include "chrome/common/metrics/metrics_log_manager.h" 6 #include "chrome/common/metrics/metrics_log_manager.h"
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 29 matching lines...) Expand all
40 TEST(MetricsLogManagerTest, StandardFlow) { 40 TEST(MetricsLogManagerTest, StandardFlow) {
41 MetricsLogManager log_manager; 41 MetricsLogManager log_manager;
42 42
43 // Make sure a new manager has a clean slate. 43 // Make sure a new manager has a clean slate.
44 EXPECT_EQ(NULL, log_manager.current_log()); 44 EXPECT_EQ(NULL, log_manager.current_log());
45 EXPECT_FALSE(log_manager.has_staged_log()); 45 EXPECT_FALSE(log_manager.has_staged_log());
46 EXPECT_FALSE(log_manager.has_unsent_logs()); 46 EXPECT_FALSE(log_manager.has_unsent_logs());
47 47
48 // Check that the normal flow works. 48 // Check that the normal flow works.
49 MetricsLogBase* initial_log = new MetricsLogBase("id", 0, "version"); 49 MetricsLogBase* initial_log = new MetricsLogBase("id", 0, "version");
50 log_manager.BeginLoggingWithLog(initial_log); 50 log_manager.BeginLoggingWithLog(initial_log, MetricsLogManager::INITIAL_LOG);
51 EXPECT_EQ(initial_log, log_manager.current_log()); 51 EXPECT_EQ(initial_log, log_manager.current_log());
52 EXPECT_FALSE(log_manager.has_staged_log()); 52 EXPECT_FALSE(log_manager.has_staged_log());
53 53
54 log_manager.StageCurrentLogForUpload(); 54 log_manager.FinishCurrentLog();
55 EXPECT_EQ(NULL, log_manager.current_log()); 55 EXPECT_EQ(NULL, log_manager.current_log());
56 EXPECT_TRUE(log_manager.has_unsent_logs());
57 EXPECT_FALSE(log_manager.has_staged_log());
58
59 MetricsLogBase* second_log = new MetricsLogBase("id", 0, "version");
60 log_manager.BeginLoggingWithLog(second_log, MetricsLogManager::ONGOING_LOG);
61 EXPECT_EQ(second_log, log_manager.current_log());
62
63 log_manager.StageNextLogForUpload();
56 EXPECT_TRUE(log_manager.has_staged_log()); 64 EXPECT_TRUE(log_manager.has_staged_log());
57 EXPECT_FALSE(log_manager.staged_log_text().empty()); 65 EXPECT_FALSE(log_manager.staged_log_text().empty());
58 66
59 MetricsLogBase* second_log = new MetricsLogBase("id", 0, "version");
60 log_manager.BeginLoggingWithLog(second_log);
61 EXPECT_EQ(second_log, log_manager.current_log());
62 EXPECT_TRUE(log_manager.has_staged_log());
63
64 log_manager.DiscardStagedLog(); 67 log_manager.DiscardStagedLog();
65 EXPECT_EQ(second_log, log_manager.current_log()); 68 EXPECT_EQ(second_log, log_manager.current_log());
66 EXPECT_FALSE(log_manager.has_staged_log()); 69 EXPECT_FALSE(log_manager.has_staged_log());
70 EXPECT_FALSE(log_manager.has_unsent_logs());
67 EXPECT_TRUE(log_manager.staged_log_text().empty()); 71 EXPECT_TRUE(log_manager.staged_log_text().empty());
68 72
69 EXPECT_FALSE(log_manager.has_unsent_logs()); 73 EXPECT_FALSE(log_manager.has_unsent_logs());
70 } 74 }
71 75
72 TEST(MetricsLogManagerTest, AbandonedLog) { 76 TEST(MetricsLogManagerTest, AbandonedLog) {
73 MetricsLogManager log_manager; 77 MetricsLogManager log_manager;
74 78
75 MetricsLogBase* dummy_log = new MetricsLogBase("id", 0, "version"); 79 MetricsLogBase* dummy_log = new MetricsLogBase("id", 0, "version");
76 log_manager.BeginLoggingWithLog(dummy_log); 80 log_manager.BeginLoggingWithLog(dummy_log, MetricsLogManager::INITIAL_LOG);
77 EXPECT_EQ(dummy_log, log_manager.current_log()); 81 EXPECT_EQ(dummy_log, log_manager.current_log());
78 82
79 log_manager.DiscardCurrentLog(); 83 log_manager.DiscardCurrentLog();
80 EXPECT_EQ(NULL, log_manager.current_log()); 84 EXPECT_EQ(NULL, log_manager.current_log());
81 EXPECT_FALSE(log_manager.has_staged_log()); 85 EXPECT_FALSE(log_manager.has_staged_log());
82 } 86 }
83 87
84 TEST(MetricsLogManagerTest, InterjectedLog) { 88 TEST(MetricsLogManagerTest, InterjectedLog) {
85 MetricsLogManager log_manager; 89 MetricsLogManager log_manager;
86 90
87 MetricsLogBase* ongoing_log = new MetricsLogBase("id", 0, "version"); 91 MetricsLogBase* ongoing_log = new MetricsLogBase("id", 0, "version");
88 MetricsLogBase* temp_log = new MetricsLogBase("id", 0, "version"); 92 MetricsLogBase* temp_log = new MetricsLogBase("id", 0, "version");
89 93
90 log_manager.BeginLoggingWithLog(ongoing_log); 94 log_manager.BeginLoggingWithLog(ongoing_log, MetricsLogManager::ONGOING_LOG);
91 EXPECT_EQ(ongoing_log, log_manager.current_log()); 95 EXPECT_EQ(ongoing_log, log_manager.current_log());
92 96
93 log_manager.PauseCurrentLog(); 97 log_manager.PauseCurrentLog();
94 EXPECT_EQ(NULL, log_manager.current_log()); 98 EXPECT_EQ(NULL, log_manager.current_log());
95 99
96 log_manager.BeginLoggingWithLog(temp_log); 100 log_manager.BeginLoggingWithLog(temp_log, MetricsLogManager::INITIAL_LOG);
97 EXPECT_EQ(temp_log, log_manager.current_log()); 101 EXPECT_EQ(temp_log, log_manager.current_log());
98 log_manager.StageCurrentLogForUpload(); 102 log_manager.FinishCurrentLog();
99 EXPECT_TRUE(log_manager.has_staged_log());
100 log_manager.DiscardStagedLog();
101 EXPECT_EQ(NULL, log_manager.current_log()); 103 EXPECT_EQ(NULL, log_manager.current_log());
102 EXPECT_FALSE(log_manager.has_staged_log());
103 104
104 log_manager.ResumePausedLog(); 105 log_manager.ResumePausedLog();
105 EXPECT_EQ(ongoing_log, log_manager.current_log()); 106 EXPECT_EQ(ongoing_log, log_manager.current_log());
107
106 EXPECT_FALSE(log_manager.has_staged_log()); 108 EXPECT_FALSE(log_manager.has_staged_log());
107 109 log_manager.StageNextLogForUpload();
110 log_manager.DiscardStagedLog();
108 EXPECT_FALSE(log_manager.has_unsent_logs()); 111 EXPECT_FALSE(log_manager.has_unsent_logs());
109 } 112 }
110 113
111 TEST(MetricsLogManagerTest, StoreAndLoad) { 114 TEST(MetricsLogManagerTest, StoreAndLoad) {
112 std::vector<std::string> initial_logs; 115 std::vector<std::string> initial_logs;
113 std::vector<std::string> ongoing_logs; 116 std::vector<std::string> ongoing_logs;
114 117
115 // Set up some in-progress logging in a scoped log manager simulating the 118 // Set up some in-progress logging in a scoped log manager simulating the
116 // leadup to quitting, then persist as would be done on quit. 119 // leadup to quitting, then persist as would be done on quit.
117 { 120 {
118 MetricsLogManager log_manager; 121 MetricsLogManager log_manager;
119 DummyLogSerializer* serializer = new DummyLogSerializer; 122 DummyLogSerializer* serializer = new DummyLogSerializer;
120 log_manager.set_log_serializer(serializer); 123 log_manager.set_log_serializer(serializer);
121 // Simulate a log having already been unsent from a previous session. 124 // Simulate a log having already been unsent from a previous session.
122 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG].push_back("a"); 125 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG].push_back("a");
123 EXPECT_FALSE(log_manager.has_unsent_logs()); 126 EXPECT_FALSE(log_manager.has_unsent_logs());
124 log_manager.LoadPersistedUnsentLogs(); 127 log_manager.LoadPersistedUnsentLogs();
125 EXPECT_TRUE(log_manager.has_unsent_logs()); 128 EXPECT_TRUE(log_manager.has_unsent_logs());
126 129
127 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version"); 130 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version");
128 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version"); 131 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version");
129 log_manager.BeginLoggingWithLog(log1); 132 log_manager.BeginLoggingWithLog(log1, MetricsLogManager::INITIAL_LOG);
130 log_manager.StageCurrentLogForUpload(); 133 log_manager.FinishCurrentLog();
131 log_manager.BeginLoggingWithLog(log2); 134 log_manager.BeginLoggingWithLog(log2, MetricsLogManager::ONGOING_LOG);
132 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::INITIAL_LOG); 135 log_manager.StageNextLogForUpload();
133 log_manager.StageCurrentLogForUpload(); 136 log_manager.StoreStagedLogAsUnsent();
134 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::ONGOING_LOG); 137 log_manager.FinishCurrentLog();
135 138
136 // Nothing should be written out until PersistUnsentLogs is called. 139 // Nothing should be written out until PersistUnsentLogs is called.
137 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); 140 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG));
138 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); 141 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG));
139 log_manager.PersistUnsentLogs(); 142 log_manager.PersistUnsentLogs();
140 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); 143 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG));
141 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); 144 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG));
142 145
143 // Save the logs to transfer over to a new serializer (since log_manager 146 // Save the logs to transfer over to a new serializer (since log_manager
144 // owns |serializer|, so it's about to go away. 147 // owns |serializer|, so it's about to go away.
145 initial_logs = serializer->persisted_logs_[MetricsLogManager::INITIAL_LOG]; 148 initial_logs = serializer->persisted_logs_[MetricsLogManager::INITIAL_LOG];
146 ongoing_logs = serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG]; 149 ongoing_logs = serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG];
147 } 150 }
148 151
149 // Now simulate the relaunch, ensure that the log manager restores 152 // Now simulate the relaunch, ensure that the log manager restores
150 // everything correctly, and verify that once the are handled they are not 153 // everything correctly, and verify that once the are handled they are not
151 // re-persisted. 154 // re-persisted.
152 { 155 {
153 MetricsLogManager log_manager; 156 MetricsLogManager log_manager;
154 157
155 DummyLogSerializer* serializer = new DummyLogSerializer; 158 DummyLogSerializer* serializer = new DummyLogSerializer;
156 serializer->persisted_logs_[MetricsLogManager::INITIAL_LOG] = initial_logs; 159 serializer->persisted_logs_[MetricsLogManager::INITIAL_LOG] = initial_logs;
157 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG] = ongoing_logs; 160 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG] = ongoing_logs;
158 161
159 log_manager.set_log_serializer(serializer); 162 log_manager.set_log_serializer(serializer);
160 log_manager.LoadPersistedUnsentLogs(); 163 log_manager.LoadPersistedUnsentLogs();
161 EXPECT_TRUE(log_manager.has_unsent_logs()); 164 EXPECT_TRUE(log_manager.has_unsent_logs());
162 165
163 log_manager.StageNextStoredLogForUpload(); 166 log_manager.StageNextLogForUpload();
164 log_manager.DiscardStagedLog(); 167 log_manager.DiscardStagedLog();
165 // The initial log should be sent first; update the persisted storage to 168 // The initial log should be sent first; update the persisted storage to
166 // verify. 169 // verify.
167 log_manager.PersistUnsentLogs(); 170 log_manager.PersistUnsentLogs();
168 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); 171 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG));
169 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); 172 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG));
170 173
171 // Handle the first ongoing log. 174 // Handle the first ongoing log.
172 log_manager.StageNextStoredLogForUpload(); 175 log_manager.StageNextLogForUpload();
173 log_manager.DiscardStagedLog(); 176 log_manager.DiscardStagedLog();
174 EXPECT_TRUE(log_manager.has_unsent_logs()); 177 EXPECT_TRUE(log_manager.has_unsent_logs());
175 178
176 // Handle the last log. 179 // Handle the last log.
177 log_manager.StageNextStoredLogForUpload(); 180 log_manager.StageNextLogForUpload();
178 log_manager.DiscardStagedLog(); 181 log_manager.DiscardStagedLog();
179 EXPECT_FALSE(log_manager.has_unsent_logs()); 182 EXPECT_FALSE(log_manager.has_unsent_logs());
180 183
181 // Nothing should have changed "on disk" since PersistUnsentLogs hasn't been 184 // Nothing should have changed "on disk" since PersistUnsentLogs hasn't been
182 // called again. 185 // called again.
183 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); 186 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG));
184 // Persist, and make sure nothing is left. 187 // Persist, and make sure nothing is left.
185 log_manager.PersistUnsentLogs(); 188 log_manager.PersistUnsentLogs();
186 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); 189 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG));
187 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); 190 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG));
188 } 191 }
189 } 192 }
190 193
191 TEST(MetricsLogManagerTest, LargeLogDiscarding) { 194 TEST(MetricsLogManagerTest, LargeLogDiscarding) {
192 MetricsLogManager log_manager; 195 MetricsLogManager log_manager;
193 DummyLogSerializer* serializer = new DummyLogSerializer; 196 DummyLogSerializer* serializer = new DummyLogSerializer;
194 log_manager.set_log_serializer(serializer); 197 log_manager.set_log_serializer(serializer);
195 // Set the size threshold very low, to verify that it's honored. 198 // Set the size threshold very low, to verify that it's honored.
196 log_manager.set_max_ongoing_log_store_size(1); 199 log_manager.set_max_ongoing_log_store_size(1);
197 200
198 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version"); 201 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version");
199 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version"); 202 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version");
200 log_manager.BeginLoggingWithLog(log1); 203 log_manager.BeginLoggingWithLog(log1, MetricsLogManager::INITIAL_LOG);
201 log_manager.StageCurrentLogForUpload(); 204 log_manager.FinishCurrentLog();
202 log_manager.BeginLoggingWithLog(log2); 205 log_manager.BeginLoggingWithLog(log2, MetricsLogManager::ONGOING_LOG);
203 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::INITIAL_LOG); 206 log_manager.FinishCurrentLog();
204 log_manager.StageCurrentLogForUpload();
205 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::ONGOING_LOG);
206 207
207 // Only the ongoing log should be written out, due to the threshold. 208 // Only the ongoing log should be written out, due to the threshold.
208 log_manager.PersistUnsentLogs(); 209 log_manager.PersistUnsentLogs();
209 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); 210 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG));
210 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); 211 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG));
211 } 212 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698