LogMakerTest.java revision b62371434c9b63560c78a85123fe9386edac1205
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 Object[] out = builder.serialize(); 104 assertEquals("onetwothree", out[1]); 105 assertEquals(123, out[3]); 106 assertEquals(123L, out[5]); 107 assertEquals(123.0F, out[7]); 108 } 109 110 public void testCategoryDefault() { 111 LogMaker builder = new LogMaker(10); 112 Object[] out = builder.serialize(); 113 assertEquals(MetricsEvent.RESERVED_FOR_LOGBUILDER_CATEGORY, out[0]); 114 assertEquals(10, out[1]); 115 } 116 117 public void testGiantLogOmitted() { 118 LogMaker badBuilder = new LogMaker(0); 119 StringBuilder b = new StringBuilder(); 120 for (int i = 0; i < 4000; i++) { 121 b.append("test, " + i); 122 } 123 badBuilder.addTaggedData(100, b.toString()); 124 assertTrue(badBuilder.serialize().length < LogMaker.MAX_SERIALIZED_SIZE); 125 } 126 127} 128