Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 1 | // Copyright (C) 2017 The Android Open Source Project |
| 2 | // |
| 3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | // you may not use this file except in compliance with the License. |
| 5 | // You may obtain a copy of the License at |
| 6 | // |
| 7 | // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | // |
| 9 | // Unless required by applicable law or agreed to in writing, software |
| 10 | // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | // See the License for the specific language governing permissions and |
| 13 | // limitations under the License. |
| 14 | |
| 15 | #include <gtest/gtest.h> |
| 16 | #include <log/log_event_list.h> |
| 17 | #include "src/logd/LogEvent.h" |
| 18 | |
| 19 | #ifdef __ANDROID__ |
| 20 | |
| 21 | namespace android { |
| 22 | namespace os { |
| 23 | namespace statsd { |
| 24 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 25 | TEST(LogEventTest, TestLogParsing) { |
| 26 | LogEvent event1(1, 2000); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 27 | |
Yao Chen | 9c1debe | 2018-02-19 14:39:19 -0800 | [diff] [blame^] | 28 | std::vector<AttributionNodeInternal> nodes; |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 29 | |
Yao Chen | 9c1debe | 2018-02-19 14:39:19 -0800 | [diff] [blame^] | 30 | AttributionNodeInternal node1; |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 31 | node1.set_uid(1000); |
| 32 | node1.set_tag("tag1"); |
| 33 | nodes.push_back(node1); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 34 | |
Yao Chen | 9c1debe | 2018-02-19 14:39:19 -0800 | [diff] [blame^] | 35 | AttributionNodeInternal node2; |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 36 | node2.set_uid(2000); |
| 37 | node2.set_tag("tag2"); |
| 38 | nodes.push_back(node2); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 39 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 40 | event1.write(nodes); |
| 41 | event1.write("hello"); |
| 42 | event1.write((int32_t)10); |
| 43 | event1.write((int64_t)20); |
| 44 | event1.write((float)1.1); |
| 45 | event1.init(); |
| 46 | |
| 47 | const auto& items = event1.getValues(); |
| 48 | EXPECT_EQ((size_t)8, items.size()); |
| 49 | EXPECT_EQ(1, event1.GetTagId()); |
| 50 | |
| 51 | const FieldValue& item0 = event1.getValues()[0]; |
| 52 | EXPECT_EQ(0x2010101, item0.mField.getField()); |
| 53 | EXPECT_EQ(Type::INT, item0.mValue.getType()); |
| 54 | EXPECT_EQ(1000, item0.mValue.int_value); |
| 55 | |
| 56 | const FieldValue& item1 = event1.getValues()[1]; |
| 57 | EXPECT_EQ(0x2010182, item1.mField.getField()); |
| 58 | EXPECT_EQ(Type::STRING, item1.mValue.getType()); |
| 59 | EXPECT_EQ("tag1", item1.mValue.str_value); |
| 60 | |
| 61 | const FieldValue& item2 = event1.getValues()[2]; |
| 62 | EXPECT_EQ(0x2018201, item2.mField.getField()); |
| 63 | EXPECT_EQ(Type::INT, item2.mValue.getType()); |
| 64 | EXPECT_EQ(2000, item2.mValue.int_value); |
| 65 | |
| 66 | const FieldValue& item3 = event1.getValues()[3]; |
| 67 | EXPECT_EQ(0x2018282, item3.mField.getField()); |
| 68 | EXPECT_EQ(Type::STRING, item3.mValue.getType()); |
| 69 | EXPECT_EQ("tag2", item3.mValue.str_value); |
| 70 | |
| 71 | const FieldValue& item4 = event1.getValues()[4]; |
| 72 | EXPECT_EQ(0x20000, item4.mField.getField()); |
| 73 | EXPECT_EQ(Type::STRING, item4.mValue.getType()); |
| 74 | EXPECT_EQ("hello", item4.mValue.str_value); |
| 75 | |
| 76 | const FieldValue& item5 = event1.getValues()[5]; |
| 77 | EXPECT_EQ(0x30000, item5.mField.getField()); |
| 78 | EXPECT_EQ(Type::INT, item5.mValue.getType()); |
| 79 | EXPECT_EQ(10, item5.mValue.int_value); |
| 80 | |
| 81 | const FieldValue& item6 = event1.getValues()[6]; |
| 82 | EXPECT_EQ(0x40000, item6.mField.getField()); |
| 83 | EXPECT_EQ(Type::LONG, item6.mValue.getType()); |
| 84 | EXPECT_EQ((int64_t)20, item6.mValue.long_value); |
| 85 | |
| 86 | const FieldValue& item7 = event1.getValues()[7]; |
| 87 | EXPECT_EQ(0x50000, item7.mField.getField()); |
| 88 | EXPECT_EQ(Type::FLOAT, item7.mValue.getType()); |
| 89 | EXPECT_EQ((float)1.1, item7.mValue.float_value); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 90 | } |
| 91 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 92 | TEST(LogEventTest, TestLogParsing2) { |
| 93 | LogEvent event1(1, 2000); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 94 | |
Yao Chen | 9c1debe | 2018-02-19 14:39:19 -0800 | [diff] [blame^] | 95 | std::vector<AttributionNodeInternal> nodes; |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 96 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 97 | event1.write("hello"); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 98 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 99 | // repeated msg can be in the middle |
Yao Chen | 9c1debe | 2018-02-19 14:39:19 -0800 | [diff] [blame^] | 100 | AttributionNodeInternal node1; |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 101 | node1.set_uid(1000); |
| 102 | node1.set_tag("tag1"); |
| 103 | nodes.push_back(node1); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 104 | |
Yao Chen | 9c1debe | 2018-02-19 14:39:19 -0800 | [diff] [blame^] | 105 | AttributionNodeInternal node2; |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 106 | node2.set_uid(2000); |
| 107 | node2.set_tag("tag2"); |
| 108 | nodes.push_back(node2); |
| 109 | event1.write(nodes); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 110 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 111 | event1.write((int32_t)10); |
| 112 | event1.write((int64_t)20); |
| 113 | event1.write((float)1.1); |
| 114 | event1.init(); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 115 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 116 | const auto& items = event1.getValues(); |
| 117 | EXPECT_EQ((size_t)8, items.size()); |
| 118 | EXPECT_EQ(1, event1.GetTagId()); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 119 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 120 | const FieldValue& item = event1.getValues()[0]; |
| 121 | EXPECT_EQ(0x00010000, item.mField.getField()); |
| 122 | EXPECT_EQ(Type::STRING, item.mValue.getType()); |
| 123 | EXPECT_EQ("hello", item.mValue.str_value); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 124 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 125 | const FieldValue& item0 = event1.getValues()[1]; |
| 126 | EXPECT_EQ(0x2020101, item0.mField.getField()); |
| 127 | EXPECT_EQ(Type::INT, item0.mValue.getType()); |
| 128 | EXPECT_EQ(1000, item0.mValue.int_value); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 129 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 130 | const FieldValue& item1 = event1.getValues()[2]; |
| 131 | EXPECT_EQ(0x2020182, item1.mField.getField()); |
| 132 | EXPECT_EQ(Type::STRING, item1.mValue.getType()); |
| 133 | EXPECT_EQ("tag1", item1.mValue.str_value); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 134 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 135 | const FieldValue& item2 = event1.getValues()[3]; |
| 136 | EXPECT_EQ(0x2028201, item2.mField.getField()); |
| 137 | EXPECT_EQ(Type::INT, item2.mValue.getType()); |
| 138 | EXPECT_EQ(2000, item2.mValue.int_value); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 139 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 140 | const FieldValue& item3 = event1.getValues()[4]; |
| 141 | EXPECT_EQ(0x2028282, item3.mField.getField()); |
| 142 | EXPECT_EQ(Type::STRING, item3.mValue.getType()); |
| 143 | EXPECT_EQ("tag2", item3.mValue.str_value); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 144 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 145 | const FieldValue& item5 = event1.getValues()[5]; |
| 146 | EXPECT_EQ(0x30000, item5.mField.getField()); |
| 147 | EXPECT_EQ(Type::INT, item5.mValue.getType()); |
| 148 | EXPECT_EQ(10, item5.mValue.int_value); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 149 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 150 | const FieldValue& item6 = event1.getValues()[6]; |
| 151 | EXPECT_EQ(0x40000, item6.mField.getField()); |
| 152 | EXPECT_EQ(Type::LONG, item6.mValue.getType()); |
| 153 | EXPECT_EQ((int64_t)20, item6.mValue.long_value); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 154 | |
Yao Chen | 8a8d16c | 2018-02-08 14:50:40 -0800 | [diff] [blame] | 155 | const FieldValue& item7 = event1.getValues()[7]; |
| 156 | EXPECT_EQ(0x50000, item7.mField.getField()); |
| 157 | EXPECT_EQ(Type::FLOAT, item7.mValue.getType()); |
| 158 | EXPECT_EQ((float)1.1, item7.mValue.float_value); |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 159 | } |
| 160 | |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 161 | |
| 162 | } // namespace statsd |
| 163 | } // namespace os |
| 164 | } // namespace android |
| 165 | #else |
| 166 | GTEST_LOG_(INFO) << "This test does nothing.\n"; |
| 167 | #endif |