Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2017, The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | #include <gtest/gtest.h> |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 18 | #include <stdio.h> |
| 19 | |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 20 | #include "Collation.h" |
| 21 | #include "frameworks/base/tools/stats_log_api_gen/test.pb.h" |
| 22 | |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 23 | namespace android { |
| 24 | namespace stats_log_api_gen { |
| 25 | |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 26 | using std::map; |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 27 | using std::set; |
| 28 | using std::vector; |
| 29 | |
| 30 | /** |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 31 | * Return whether the map contains a vector of the elements provided. |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 32 | */ |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 33 | static bool map_contains_vector(const map<vector<java_type_t>, FieldNumberToAnnotations>& s, |
| 34 | int count, ...) { |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 35 | va_list args; |
| 36 | vector<java_type_t> v; |
| 37 | |
| 38 | va_start(args, count); |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 39 | for (int i = 0; i < count; i++) { |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 40 | v.push_back((java_type_t)va_arg(args, int)); |
| 41 | } |
| 42 | va_end(args); |
| 43 | |
| 44 | return s.find(v) != s.end(); |
| 45 | } |
| 46 | |
| 47 | /** |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 48 | * Expect that the provided map contains the elements provided. |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 49 | */ |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 50 | #define EXPECT_MAP_CONTAINS_SIGNATURE(s, ...) \ |
| 51 | do { \ |
| 52 | int count = sizeof((int[]){__VA_ARGS__}) / sizeof(int); \ |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 53 | EXPECT_TRUE(map_contains_vector(s, count, __VA_ARGS__)); \ |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 54 | } while (0) |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 55 | |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 56 | /** Expects that the provided atom has no enum values for any field. */ |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 57 | #define EXPECT_NO_ENUM_FIELD(atom) \ |
| 58 | do { \ |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 59 | for (vector<AtomField>::const_iterator field = atom->fields.begin(); \ |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 60 | field != atom->fields.end(); field++) { \ |
| 61 | EXPECT_TRUE(field->enumValues.empty()); \ |
| 62 | } \ |
| 63 | } while (0) |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 64 | |
Yangster-mac | 7604aea | 2017-12-11 22:55:49 -0800 | [diff] [blame] | 65 | /** Expects that exactly one specific field has expected enum values. */ |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 66 | #define EXPECT_HAS_ENUM_FIELD(atom, field_name, values) \ |
| 67 | do { \ |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 68 | for (vector<AtomField>::const_iterator field = atom->fields.begin(); \ |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 69 | field != atom->fields.end(); field++) { \ |
| 70 | if (field->name == field_name) { \ |
| 71 | EXPECT_EQ(field->enumValues, values); \ |
| 72 | } else { \ |
| 73 | EXPECT_TRUE(field->enumValues.empty()); \ |
| 74 | } \ |
| 75 | } \ |
| 76 | } while (0) |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 77 | |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 78 | /** |
| 79 | * Test a correct collation, with all the types. |
| 80 | */ |
| 81 | TEST(CollationTest, CollateStats) { |
| 82 | Atoms atoms; |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 83 | int errorCount = collate_atoms(Event::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 84 | |
| 85 | EXPECT_EQ(0, errorCount); |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 86 | EXPECT_EQ(3ul, atoms.signatureInfoMap.size()); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 87 | |
| 88 | // IntAtom, AnotherIntAtom |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 89 | EXPECT_MAP_CONTAINS_SIGNATURE(atoms.signatureInfoMap, JAVA_TYPE_INT); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 90 | |
| 91 | // OutOfOrderAtom |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 92 | EXPECT_MAP_CONTAINS_SIGNATURE(atoms.signatureInfoMap, JAVA_TYPE_INT, JAVA_TYPE_INT); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 93 | |
| 94 | // AllTypesAtom |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 95 | EXPECT_MAP_CONTAINS_SIGNATURE(atoms.signatureInfoMap, |
| 96 | JAVA_TYPE_ATTRIBUTION_CHAIN, // AttributionChain |
| 97 | JAVA_TYPE_FLOAT, // float |
| 98 | JAVA_TYPE_LONG, // int64 |
| 99 | JAVA_TYPE_LONG, // uint64 |
| 100 | JAVA_TYPE_INT, // int32 |
| 101 | JAVA_TYPE_LONG, // fixed64 |
| 102 | JAVA_TYPE_INT, // fixed32 |
| 103 | JAVA_TYPE_BOOLEAN, // bool |
| 104 | JAVA_TYPE_STRING, // string |
| 105 | JAVA_TYPE_INT, // uint32 |
| 106 | JAVA_TYPE_INT, // AnEnum |
| 107 | JAVA_TYPE_INT, // sfixed32 |
| 108 | JAVA_TYPE_LONG, // sfixed64 |
| 109 | JAVA_TYPE_INT, // sint32 |
| 110 | JAVA_TYPE_LONG // sint64 |
Yangster-mac | 7604aea | 2017-12-11 22:55:49 -0800 | [diff] [blame] | 111 | ); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 112 | |
| 113 | set<AtomDecl>::const_iterator atom = atoms.decls.begin(); |
| 114 | EXPECT_EQ(1, atom->code); |
| 115 | EXPECT_EQ("int_atom", atom->name); |
| 116 | EXPECT_EQ("IntAtom", atom->message); |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 117 | EXPECT_NO_ENUM_FIELD(atom); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 118 | atom++; |
| 119 | |
| 120 | EXPECT_EQ(2, atom->code); |
| 121 | EXPECT_EQ("out_of_order_atom", atom->name); |
| 122 | EXPECT_EQ("OutOfOrderAtom", atom->message); |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 123 | EXPECT_NO_ENUM_FIELD(atom); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 124 | atom++; |
| 125 | |
| 126 | EXPECT_EQ(3, atom->code); |
| 127 | EXPECT_EQ("another_int_atom", atom->name); |
| 128 | EXPECT_EQ("AnotherIntAtom", atom->message); |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 129 | EXPECT_NO_ENUM_FIELD(atom); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 130 | atom++; |
| 131 | |
| 132 | EXPECT_EQ(4, atom->code); |
| 133 | EXPECT_EQ("all_types_atom", atom->name); |
| 134 | EXPECT_EQ("AllTypesAtom", atom->message); |
Stefan Lafon | 9478f35 | 2017-10-30 21:20:20 -0700 | [diff] [blame] | 135 | map<int, string> enumValues; |
| 136 | enumValues[0] = "VALUE0"; |
| 137 | enumValues[1] = "VALUE1"; |
| 138 | EXPECT_HAS_ENUM_FIELD(atom, "enum_field", enumValues); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 139 | atom++; |
| 140 | |
| 141 | EXPECT_TRUE(atom == atoms.decls.end()); |
| 142 | } |
| 143 | |
| 144 | /** |
| 145 | * Test that event class that contains stuff other than the atoms is rejected. |
| 146 | */ |
| 147 | TEST(CollationTest, NonMessageTypeFails) { |
| 148 | Atoms atoms; |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 149 | int errorCount = collate_atoms(IntAtom::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 150 | |
| 151 | EXPECT_EQ(1, errorCount); |
| 152 | } |
| 153 | |
| 154 | /** |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 155 | * Test that atoms that have non-primitive types or repeated fields are |
| 156 | * rejected. |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 157 | */ |
| 158 | TEST(CollationTest, FailOnBadTypes) { |
| 159 | Atoms atoms; |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 160 | int errorCount = collate_atoms(BadTypesEvent::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 161 | |
Tej Singh | c88fbf1 | 2020-02-20 18:14:50 -0800 | [diff] [blame] | 162 | EXPECT_EQ(4, errorCount); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 163 | } |
| 164 | |
| 165 | /** |
| 166 | * Test that atoms that skip field numbers (in the first position) are rejected. |
| 167 | */ |
| 168 | TEST(CollationTest, FailOnSkippedFieldsSingle) { |
| 169 | Atoms atoms; |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 170 | int errorCount = |
| 171 | collate_atoms(BadSkippedFieldSingle::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 172 | |
| 173 | EXPECT_EQ(1, errorCount); |
| 174 | } |
| 175 | |
| 176 | /** |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 177 | * Test that atoms that skip field numbers (not in the first position, and |
| 178 | * multiple times) are rejected. |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 179 | */ |
| 180 | TEST(CollationTest, FailOnSkippedFieldsMultiple) { |
| 181 | Atoms atoms; |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 182 | int errorCount = |
| 183 | collate_atoms(BadSkippedFieldMultiple::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 184 | |
| 185 | EXPECT_EQ(2, errorCount); |
| 186 | } |
| 187 | |
| 188 | /** |
Yangster-mac | 7604aea | 2017-12-11 22:55:49 -0800 | [diff] [blame] | 189 | * Test that atoms that have an attribution chain not in the first position are |
| 190 | * rejected. |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 191 | */ |
Yangster-mac | 2087716 | 2017-12-22 17:19:39 -0800 | [diff] [blame] | 192 | TEST(CollationTest, FailBadAttributionNodePosition) { |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 193 | Atoms atoms; |
| 194 | int errorCount = |
| 195 | collate_atoms(BadAttributionNodePosition::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 196 | |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 197 | EXPECT_EQ(1, errorCount); |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 198 | } |
| 199 | |
Yao Chen | 9c1debe | 2018-02-19 14:39:19 -0800 | [diff] [blame] | 200 | TEST(CollationTest, FailOnBadStateAtomOptions) { |
| 201 | Atoms atoms; |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 202 | int errorCount = collate_atoms(BadStateAtoms::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | 9c1debe | 2018-02-19 14:39:19 -0800 | [diff] [blame] | 203 | |
| 204 | EXPECT_EQ(3, errorCount); |
| 205 | } |
| 206 | |
| 207 | TEST(CollationTest, PassOnGoodStateAtomOptions) { |
| 208 | Atoms atoms; |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 209 | int errorCount = collate_atoms(GoodStateAtoms::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | 9c1debe | 2018-02-19 14:39:19 -0800 | [diff] [blame] | 210 | EXPECT_EQ(0, errorCount); |
| 211 | } |
| 212 | |
Yao Chen | bbdd67d | 2018-10-24 12:15:56 -0700 | [diff] [blame] | 213 | TEST(CollationTest, PassOnGoodBinaryFieldAtom) { |
| 214 | Atoms atoms; |
| 215 | int errorCount = |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 216 | collate_atoms(GoodEventWithBinaryFieldAtom::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | bbdd67d | 2018-10-24 12:15:56 -0700 | [diff] [blame] | 217 | EXPECT_EQ(0, errorCount); |
| 218 | } |
| 219 | |
| 220 | TEST(CollationTest, FailOnBadBinaryFieldAtom) { |
| 221 | Atoms atoms; |
| 222 | int errorCount = |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 223 | collate_atoms(BadEventWithBinaryFieldAtom::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Yao Chen | bbdd67d | 2018-10-24 12:15:56 -0700 | [diff] [blame] | 224 | EXPECT_TRUE(errorCount > 0); |
| 225 | } |
| 226 | |
Andrei Onea | da01ea5 | 2019-01-30 15:28:36 +0000 | [diff] [blame] | 227 | TEST(CollationTest, PassOnWhitelistedAtom) { |
| 228 | Atoms atoms; |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 229 | int errorCount = collate_atoms(ListedAtoms::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Andrei Onea | da01ea5 | 2019-01-30 15:28:36 +0000 | [diff] [blame] | 230 | EXPECT_EQ(errorCount, 0); |
| 231 | EXPECT_EQ(atoms.decls.size(), 2ul); |
| 232 | } |
| 233 | |
| 234 | TEST(CollationTest, RecogniseWhitelistedAtom) { |
| 235 | Atoms atoms; |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 236 | collate_atoms(ListedAtoms::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Andrei Onea | da01ea5 | 2019-01-30 15:28:36 +0000 | [diff] [blame] | 237 | for (const auto& atomDecl : atoms.decls) { |
| 238 | if (atomDecl.code == 1) { |
| 239 | EXPECT_TRUE(atomDecl.whitelisted); |
| 240 | } else { |
| 241 | EXPECT_FALSE(atomDecl.whitelisted); |
| 242 | } |
| 243 | } |
| 244 | } |
| 245 | |
Tej Singh | 810eeb3 | 2019-03-07 19:08:52 -0800 | [diff] [blame] | 246 | TEST(CollationTest, PassOnLogFromModuleAtom) { |
| 247 | Atoms atoms; |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 248 | int errorCount = collate_atoms(ModuleAtoms::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Tej Singh | 810eeb3 | 2019-03-07 19:08:52 -0800 | [diff] [blame] | 249 | EXPECT_EQ(errorCount, 0); |
Muhammad Qureshi | f8460f7 | 2020-03-05 09:48:48 -0800 | [diff] [blame] | 250 | EXPECT_EQ(atoms.decls.size(), 4ul); |
Tej Singh | 810eeb3 | 2019-03-07 19:08:52 -0800 | [diff] [blame] | 251 | } |
| 252 | |
| 253 | TEST(CollationTest, RecognizeModuleAtom) { |
| 254 | Atoms atoms; |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 255 | int errorCount = collate_atoms(ModuleAtoms::descriptor(), DEFAULT_MODULE_NAME, &atoms); |
Tej Singh | 810eeb3 | 2019-03-07 19:08:52 -0800 | [diff] [blame] | 256 | EXPECT_EQ(errorCount, 0); |
Muhammad Qureshi | f8460f7 | 2020-03-05 09:48:48 -0800 | [diff] [blame] | 257 | EXPECT_EQ(atoms.decls.size(), 4ul); |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 258 | EXPECT_EQ(atoms.signatureInfoMap.size(), 2u); |
| 259 | EXPECT_MAP_CONTAINS_SIGNATURE(atoms.signatureInfoMap, JAVA_TYPE_INT); |
| 260 | EXPECT_MAP_CONTAINS_SIGNATURE(atoms.signatureInfoMap, JAVA_TYPE_STRING); |
| 261 | for (auto signatureInfoMapIt : atoms.signatureInfoMap) { |
| 262 | vector<java_type_t> signature = signatureInfoMapIt.first; |
| 263 | const FieldNumberToAnnotations& fieldNumberToAnnotations = signatureInfoMapIt.second; |
| 264 | if (signature[0] == JAVA_TYPE_STRING) { |
| 265 | EXPECT_EQ(0u, fieldNumberToAnnotations.size()); |
| 266 | } else if (signature[0] == JAVA_TYPE_INT) { |
| 267 | EXPECT_EQ(1u, fieldNumberToAnnotations.size()); |
| 268 | EXPECT_NE(fieldNumberToAnnotations.end(), fieldNumberToAnnotations.find(1)); |
| 269 | const set<shared_ptr<Annotation>>& annotations = fieldNumberToAnnotations.at(1); |
| 270 | EXPECT_EQ(2u, annotations.size()); |
| 271 | for (const shared_ptr<Annotation> annotation : annotations) { |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 272 | EXPECT_TRUE(annotation->annotationId == ANNOTATION_ID_IS_UID || |
| 273 | annotation->annotationId == ANNOTATION_ID_STATE_OPTION); |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 274 | if (ANNOTATION_ID_IS_UID == annotation->annotationId) { |
| 275 | EXPECT_EQ(1, annotation->atomId); |
| 276 | EXPECT_EQ(ANNOTATION_TYPE_BOOL, annotation->type); |
| 277 | EXPECT_TRUE(annotation->value.boolValue); |
| 278 | } |
| 279 | |
| 280 | if (ANNOTATION_ID_STATE_OPTION == annotation->annotationId) { |
| 281 | EXPECT_EQ(3, annotation->atomId); |
| 282 | EXPECT_EQ(ANNOTATION_TYPE_INT, annotation->type); |
| 283 | EXPECT_EQ(os::statsd::StateField::EXCLUSIVE_STATE, annotation->value.intValue); |
| 284 | } |
| 285 | } |
Tej Singh | 810eeb3 | 2019-03-07 19:08:52 -0800 | [diff] [blame] | 286 | } |
| 287 | } |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 288 | } |
Tej Singh | 810eeb3 | 2019-03-07 19:08:52 -0800 | [diff] [blame] | 289 | |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 290 | TEST(CollationTest, RecognizeModule1Atom) { |
| 291 | Atoms atoms; |
| 292 | const string moduleName = "module1"; |
| 293 | int errorCount = collate_atoms(ModuleAtoms::descriptor(), moduleName, &atoms); |
| 294 | EXPECT_EQ(errorCount, 0); |
| 295 | EXPECT_EQ(atoms.decls.size(), 2ul); |
| 296 | EXPECT_EQ(atoms.signatureInfoMap.size(), 1u); |
| 297 | EXPECT_MAP_CONTAINS_SIGNATURE(atoms.signatureInfoMap, JAVA_TYPE_INT); |
| 298 | for (auto signatureInfoMapIt : atoms.signatureInfoMap) { |
| 299 | vector<java_type_t> signature = signatureInfoMapIt.first; |
| 300 | const FieldNumberToAnnotations& fieldNumberToAnnotations = signatureInfoMapIt.second; |
| 301 | EXPECT_EQ(JAVA_TYPE_INT, signature[0]); |
| 302 | EXPECT_EQ(1u, fieldNumberToAnnotations.size()); |
| 303 | int fieldNumber = 1; |
| 304 | EXPECT_NE(fieldNumberToAnnotations.end(), fieldNumberToAnnotations.find(fieldNumber)); |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 305 | const set<shared_ptr<Annotation>>& annotations = fieldNumberToAnnotations.at(fieldNumber); |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 306 | EXPECT_EQ(2u, annotations.size()); |
| 307 | for (const shared_ptr<Annotation> annotation : annotations) { |
Muhammad Qureshi | a345af9 | 2020-03-24 17:05:14 -0700 | [diff] [blame^] | 308 | EXPECT_TRUE(annotation->annotationId == ANNOTATION_ID_IS_UID || |
| 309 | annotation->annotationId == ANNOTATION_ID_STATE_OPTION); |
Muhammad Qureshi | b13a321 | 2020-03-12 07:37:13 -0700 | [diff] [blame] | 310 | if (ANNOTATION_ID_IS_UID == annotation->annotationId) { |
| 311 | EXPECT_EQ(1, annotation->atomId); |
| 312 | EXPECT_EQ(ANNOTATION_TYPE_BOOL, annotation->type); |
| 313 | EXPECT_TRUE(annotation->value.boolValue); |
| 314 | } |
| 315 | |
| 316 | if (ANNOTATION_ID_STATE_OPTION == annotation->annotationId) { |
| 317 | EXPECT_EQ(3, annotation->atomId); |
| 318 | EXPECT_EQ(ANNOTATION_TYPE_INT, annotation->type); |
| 319 | EXPECT_EQ(os::statsd::StateField::EXCLUSIVE_STATE, annotation->value.intValue); |
| 320 | } |
Tej Singh | 810eeb3 | 2019-03-07 19:08:52 -0800 | [diff] [blame] | 321 | } |
| 322 | } |
| 323 | } |
| 324 | |
Yao Chen | d54f9dd | 2017-10-17 17:37:48 +0000 | [diff] [blame] | 325 | } // namespace stats_log_api_gen |
Muhammad Qureshi | f8460f7 | 2020-03-05 09:48:48 -0800 | [diff] [blame] | 326 | } // namespace android |