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 25 TEST(LogEventTest, TestLogParsing) { 26 LogEvent event1(1, 2000); 27 28 std::vector<AttributionNodeInternal> nodes; 29 30 AttributionNodeInternal node1; 31 node1.set_uid(1000); 32 node1.set_tag("tag1"); 33 nodes.push_back(node1); 34 35 AttributionNodeInternal node2; 36 node2.set_uid(2000); 37 node2.set_tag("tag2"); 38 nodes.push_back(node2); 39 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); 90 } 91 92 TEST(LogEventTest, TestLogParsing2) { 93 LogEvent event1(1, 2000); 94 95 std::vector<AttributionNodeInternal> nodes; 96 97 event1.write("hello"); 98 99 // repeated msg can be in the middle 100 AttributionNodeInternal node1; 101 node1.set_uid(1000); 102 node1.set_tag("tag1"); 103 nodes.push_back(node1); 104 105 AttributionNodeInternal node2; 106 node2.set_uid(2000); 107 node2.set_tag("tag2"); 108 nodes.push_back(node2); 109 event1.write(nodes); 110 111 event1.write((int32_t)10); 112 event1.write((int64_t)20); 113 event1.write((float)1.1); 114 event1.init(); 115 116 const auto& items = event1.getValues(); 117 EXPECT_EQ((size_t)8, items.size()); 118 EXPECT_EQ(1, event1.GetTagId()); 119 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); 124 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); 129 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); 134 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); 139 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); 144 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); 149 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); 154 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); 159 } 160 161 162 } // namespace statsd 163 } // namespace os 164 } // namespace android 165 #else 166 GTEST_LOG_(INFO) << "This test does nothing.\n"; 167 #endif