Index: sync/engine/traffic_recorder_unittest.cc |
diff --git a/sync/engine/traffic_recorder_unittest.cc b/sync/engine/traffic_recorder_unittest.cc |
index cf821f5e408402e86662115a16099f596ce6e15a..bc55496585545e3762529168988d5ebdc71b3035 100644 |
--- a/sync/engine/traffic_recorder_unittest.cc |
+++ b/sync/engine/traffic_recorder_unittest.cc |
@@ -4,7 +4,10 @@ |
#include "sync/engine/traffic_recorder.h" |
+#include "base/time.h" |
+#include "base/values.h" |
#include "sync/protocol/sync.pb.h" |
+#include "sync/util/time.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace syncer { |
@@ -39,4 +42,79 @@ TEST(TrafficRecorderTest, MaxMessageSizeTest) { |
EXPECT_TRUE(record.message.empty()); |
} |
+// Test implementation of TrafficRecorder. |
+class TestTrafficRecorder : public TrafficRecorder { |
+ public: |
+ TestTrafficRecorder(unsigned int max_messages, unsigned int max_message_size) |
+ : TrafficRecorder(max_messages, max_message_size) { |
+ set_time(0); |
+ } |
+ virtual ~TestTrafficRecorder() {} |
+ |
+ virtual base::Time GetTime() OVERRIDE { |
+ return time_; |
+ } |
+ |
+ void set_time(int64 time) { |
+ time_ = ProtoTimeToTime(time); |
+ } |
+ |
+ void set_time(base::Time time) { |
+ time_ = time; |
+ } |
+ |
+ private: |
+ base::Time time_; |
+}; |
+ |
+// Ensure that timestamp is recorded correctly in traffic record. |
+TEST(TrafficRecorderTest, TimestampTest) { |
+ sync_pb::ClientToServerResponse response; |
+ |
+ TestTrafficRecorder recorder(kMaxMessages, kMaxMessageSize); |
+ recorder.set_time(3); |
+ recorder.RecordClientToServerResponse(response); |
+ |
+ base::Time expect_time = ProtoTimeToTime(3); |
+ TrafficRecorder::TrafficRecord record = recorder.records().front(); |
+ EXPECT_EQ(expect_time, record.timestamp); |
+} |
+ |
+// Ensure that timestamps are recorded correctly in traffic records. |
+TEST(TrafficRecorderTest, MultipleTimestampTest) { |
+ sync_pb::ClientToServerResponse response; |
+ base::Time sample_time_1 = ProtoTimeToTime(1359484676659324); |
Lei Zhang
2013/02/01 05:19:11
These big numbers need GG_INT64_C.
|
+ base::Time sample_time_2 = ProtoTimeToTime(1359484676659324 * 2); |
+ |
+ TestTrafficRecorder recorder(kMaxMessages, kMaxMessageSize); |
+ recorder.set_time(sample_time_1); |
+ recorder.RecordClientToServerResponse(response); |
+ recorder.set_time(sample_time_2); |
+ recorder.RecordClientToServerResponse(response); |
+ |
+ TrafficRecorder::TrafficRecord record_1 = recorder.records().front(); |
+ TrafficRecorder::TrafficRecord record_2 = recorder.records().back(); |
+ EXPECT_EQ(sample_time_1, record_1.timestamp); |
+ EXPECT_EQ(sample_time_2, record_2.timestamp); |
+} |
+ |
+// Ensure that timestamp is added to ListValue of DictionaryValues in ToValue(). |
+TEST(TrafficRecorderTest, ToValueTimestampTest) { |
+ sync_pb::ClientToServerResponse response; |
+ base::Time sample_time = ProtoTimeToTime(1359484676659324); |
+ std::string expect_time_str = GetTimeDebugString(sample_time); |
+ |
+ TestTrafficRecorder recorder(kMaxMessages, kMaxMessageSize); |
+ recorder.set_time(sample_time); |
+ recorder.RecordClientToServerResponse(response); |
+ |
+ ListValue* value = recorder.ToValue(); |
+ DictionaryValue* record_value; |
+ std::string time_str; |
+ |
+ ASSERT_TRUE(value->GetDictionary(0, &record_value)); |
+ EXPECT_TRUE(record_value->GetString("timestamp", &time_str)); |
+ EXPECT_EQ(expect_time_str, time_str); |
+} |
+ |
} // namespace syncer |