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