LogMakerTest.java revision a7c1b80f5ffda9866f570658460df5a67a84c08e
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 */ 16package android.metrics; 17 18import com.android.internal.logging.nano.MetricsProto.MetricsEvent; 19import junit.framework.TestCase; 20 21public class LogMakerTest extends TestCase { 22 23 public void testSerialize() { 24 LogMaker builder = new LogMaker(0); 25 builder.addTaggedData(1, "one"); 26 builder.addTaggedData(2, "two"); 27 Object[] out = builder.serialize(); 28 assertEquals(1, out[0]); 29 assertEquals("one", out[1]); 30 assertEquals(2, out[2]); 31 assertEquals("two", out[3]); 32 } 33 34 public void testSerializeDeserialize() { 35 int category = 10; 36 int type = 11; 37 int subtype = 12; 38 long timestamp = 1484669007890L; 39 String packageName = "com.foo.bar"; 40 String counterName = "sheep"; 41 int bucket = 13; 42 int value = 14; 43 44 LogMaker builder = new LogMaker(category); 45 builder.setType(type); 46 builder.setSubtype(subtype); 47 builder.setTimestamp(timestamp); 48 builder.setPackageName(packageName); 49 builder.setCounterName(counterName); 50 builder.setCounterBucket(bucket); 51 builder.setCounterValue(value); 52 builder.addTaggedData(1, "one"); 53 builder.addTaggedData(2, "two"); 54 55 Object[] out = builder.serialize(); 56 LogMaker parsed = new LogMaker(out); 57 58 assertEquals(category, parsed.getCategory()); 59 assertEquals(type, parsed.getType()); 60 assertEquals(subtype, parsed.getSubtype()); 61 assertEquals(timestamp, parsed.getTimestamp()); 62 assertEquals(packageName, parsed.getPackageName()); 63 assertEquals(counterName, parsed.getCounterName()); 64 assertEquals(bucket, parsed.getCounterBucket()); 65 assertEquals(value, parsed.getCounterValue()); 66 assertEquals("one", parsed.getTaggedData(1)); 67 assertEquals("two", parsed.getTaggedData(2)); 68 } 69 70 public void testIntBucket() { 71 LogMaker builder = new LogMaker(0); 72 builder.setCounterBucket(100); 73 assertEquals(100, builder.getCounterBucket()); 74 assertEquals(false, builder.isLongCounterBucket()); 75 } 76 77 public void testLongBucket() { 78 long longBucket = Long.MAX_VALUE; 79 LogMaker builder = new LogMaker(0); 80 builder.setCounterBucket(longBucket); 81 assertEquals(longBucket, builder.getCounterBucket()); 82 assertEquals(true, builder.isLongCounterBucket()); 83 } 84 85 public void testInvalidInputThrows() { 86 LogMaker builder = new LogMaker(0); 87 boolean threw = false; 88 try { 89 builder.addTaggedData(0, new Object()); 90 } catch (IllegalArgumentException e) { 91 threw = true; 92 } 93 assertTrue(threw); 94 assertEquals(2, builder.serialize().length); 95 } 96 97 public void testValidInputTypes() { 98 LogMaker builder = new LogMaker(0); 99 builder.addTaggedData(1, "onetwothree"); 100 builder.addTaggedData(2, 123); 101 builder.addTaggedData(3, 123L); 102 builder.addTaggedData(4, 123.0F); 103 builder.addTaggedData(5, null); 104 Object[] out = builder.serialize(); 105 assertEquals("onetwothree", out[1]); 106 assertEquals(123, out[3]); 107 assertEquals(123L, out[5]); 108 assertEquals(123.0F, out[7]); 109 } 110 111 public void testCategoryDefault() { 112 LogMaker builder = new LogMaker(10); 113 Object[] out = builder.serialize(); 114 assertEquals(MetricsEvent.RESERVED_FOR_LOGBUILDER_CATEGORY, out[0]); 115 assertEquals(10, out[1]); 116 } 117 118 public void testClearData() { 119 LogMaker builder = new LogMaker(0); 120 builder.addTaggedData(1, "onetwothree"); 121 builder.clearTaggedData(1); 122 assertEquals(null, builder.getTaggedData(1)); 123 } 124 125 public void testClearFieldLeavesOtherFieldsIntact() { 126 LogMaker builder = new LogMaker(0); 127 builder.setPackageName("package.name"); 128 builder.setSubtype(10); 129 builder.clearPackageName(); 130 assertEquals(null, builder.getPackageName()); 131 assertEquals(10, builder.getSubtype()); 132 } 133 134 public void testSetAndClearCategory() { 135 LogMaker builder = new LogMaker(0); 136 builder.setCategory(MetricsEvent.MAIN_SETTINGS); 137 assertEquals(MetricsEvent.MAIN_SETTINGS, builder.getCategory()); 138 builder.clearCategory(); 139 assertEquals(MetricsEvent.VIEW_UNKNOWN, builder.getCategory()); 140 } 141 142 public void testSetAndClearType() { 143 LogMaker builder = new LogMaker(0); 144 builder.setType(MetricsEvent.TYPE_OPEN); 145 assertEquals(MetricsEvent.TYPE_OPEN, builder.getType()); 146 builder.clearType(); 147 assertEquals(MetricsEvent.TYPE_UNKNOWN, builder.getType()); 148 } 149 150 public void testSetAndClearSubtype() { 151 LogMaker builder = new LogMaker(0); 152 builder.setSubtype(1); 153 assertEquals(1, builder.getSubtype()); 154 builder.clearSubtype(); 155 assertEquals(0, builder.getSubtype()); 156 } 157 158 public void testSetAndClearTimestamp() { 159 LogMaker builder = new LogMaker(0); 160 builder.setTimestamp(1); 161 assertEquals(1, builder.getTimestamp()); 162 builder.clearTimestamp(); 163 assertEquals(0, builder.getTimestamp()); 164 } 165 166 public void testSetAndClearPackageName() { 167 LogMaker builder = new LogMaker(0); 168 builder.setPackageName("package.name"); 169 assertEquals("package.name", builder.getPackageName()); 170 builder.clearPackageName(); 171 assertEquals(null, builder.getPackageName()); 172 } 173 174 public void testGiantLogOmitted() { 175 LogMaker badBuilder = new LogMaker(0); 176 StringBuilder b = new StringBuilder(); 177 for (int i = 0; i < 4000; i++) { 178 b.append("test, " + i); 179 } 180 badBuilder.addTaggedData(100, b.toString()); 181 assertTrue(badBuilder.serialize().length < LogMaker.MAX_SERIALIZED_SIZE); 182 } 183 184 public void testIdentityEquality() { 185 LogMaker a = new LogMaker(0); 186 a.addTaggedData(1, "onetwothree"); 187 a.addTaggedData(2, 123); 188 a.addTaggedData(3, 123L); 189 190 assertTrue("objects should be equal to themselves", a.isSubsetOf(a)); 191 } 192 193 public void testExactEquality() { 194 LogMaker a = new LogMaker(0); 195 a.addTaggedData(1, "onetwothree"); 196 a.addTaggedData(2, 123); 197 a.addTaggedData(3, 123L); 198 LogMaker b = new LogMaker(0); 199 b.addTaggedData(1, "onetwothree"); 200 b.addTaggedData(2, 123); 201 b.addTaggedData(3, 123L); 202 203 assertTrue("deep equality should be true", a.isSubsetOf(b)); 204 assertTrue("deep equality shoudl be true", b.isSubsetOf(a)); 205 } 206 207 public void testSubsetEquality() { 208 LogMaker a = new LogMaker(0); 209 a.addTaggedData(1, "onetwothree"); 210 a.addTaggedData(2, 123); 211 LogMaker b = new LogMaker(0); 212 b.addTaggedData(1, "onetwothree"); 213 b.addTaggedData(2, 123); 214 b.addTaggedData(3, 123L); 215 216 assertTrue("a is a strict subset of b", a.isSubsetOf(b)); 217 assertTrue("b is not a strict subset of a", !b.isSubsetOf(a)); 218 } 219 220 public void testInequality() { 221 LogMaker a = new LogMaker(0); 222 a.addTaggedData(1, "onetwofour"); 223 a.addTaggedData(2, 1234); 224 LogMaker b = new LogMaker(0); 225 b.addTaggedData(1, "onetwothree"); 226 b.addTaggedData(2, 123); 227 b.addTaggedData(3, 123L); 228 229 assertTrue("a is not a subset of b", !a.isSubsetOf(b)); 230 assertTrue("b is not a subset of a", !b.isSubsetOf(a)); 231 } 232 233 public void testWildcardEquality() { 234 LogMaker empty = new LogMaker(0); 235 empty.clearTaggedData(MetricsEvent.RESERVED_FOR_LOGBUILDER_CATEGORY); //dirty trick 236 LogMaker b = new LogMaker(0); 237 b.addTaggedData(1, "onetwothree"); 238 b.addTaggedData(2, 123); 239 b.addTaggedData(3, 123L); 240 241 assertTrue("empty builder is a subset of anything", empty.isSubsetOf(b)); 242 } 243 244 public void testNullEquality() { 245 LogMaker a = new LogMaker(0); 246 a.addTaggedData(1, "onetwofour"); 247 a.addTaggedData(2, 1234); 248 249 assertTrue("a is not a subset of null", !a.isSubsetOf(null)); 250 } 251 252 public void testMajorCategory() { 253 LogMaker a = new LogMaker(1); 254 LogMaker b = new LogMaker(2); 255 assertFalse(a.isSubsetOf(b)); 256 assertFalse(b.isSubsetOf(a)); 257 } 258} 259