/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.util; import android.os.Process; import com.google.android.collect.Lists; import junit.framework.TestCase; import junit.framework.Assert; import java.util.ArrayList; /** * Functional tests of EventLog. */ public class EventLogFunctionalTest extends TestCase { private static final String TAG = "EventLogFunctionalTest"; private static final int TAG_SIZE = 4; private static final int TYPE_FIELD_SIZE = 1; private static final int STARTING_POS_OF_PAYLOAD = TAG_SIZE + TYPE_FIELD_SIZE; private static final int TEST_TAG = 42; private static final int TEST_TAG2 = 314; //todo: For now all we do is test the returned length. More to come. public void testLogOfPosInt() throws Exception { final int numBytes = EventLog.writeEvent(TEST_TAG, 0x01020304); Assert.assertEquals(STARTING_POS_OF_PAYLOAD + 4, numBytes); } //todo: For now all we do is test the returned length. More to come. public void testLogOfPosLong() throws Exception { final int numBytes = EventLog.writeEvent(TEST_TAG2, 0x0102030405060708L); Assert.assertEquals(STARTING_POS_OF_PAYLOAD + 8, numBytes); } //todo: For now all we do is test the returned length. More to come. public void testLogOfString() throws Exception { final String valueStr = "foo bar baz"; final int numBytes = EventLog.writeEvent(TEST_TAG, valueStr); Assert.assertEquals(STARTING_POS_OF_PAYLOAD + 4 + valueStr.length() + 1, numBytes); } public void testLogOfListWithOneInt() throws Exception { final EventLog.List list = new EventLog.List(1234); final int numBytes = EventLog.writeEvent(TEST_TAG, list); Assert.assertEquals(STARTING_POS_OF_PAYLOAD + 1 + 1 + 4 + 1, numBytes); } public void testLogOfListWithMultipleInts() throws Exception { final EventLog.List list = new EventLog.List(1234, 2345, 3456); final int numBytes = EventLog.writeEvent(TEST_TAG, list); Assert.assertEquals(STARTING_POS_OF_PAYLOAD + 1 + 1 + 4 + 1 + 4 + 1 + 4 + 1, numBytes); } public void testLogOfListWithEmbeddedList() throws Exception { final EventLog.List list = new EventLog.List( new EventLog.List(1234, 2345, 3456)); final int numBytes = EventLog.writeEvent(TEST_TAG, list); Assert.assertEquals(STARTING_POS_OF_PAYLOAD + 2 + 1 + 1 + 4 + 1 + 4 + 1 + 4 + 1, numBytes); } public void testEventLargerThanInitialBufferCapacity() throws Exception { final Integer[] array = new Integer[127]; for (int i = 0; i < array.length; i++) { array[i] = i; } final EventLog.List list = new EventLog.List((Object[]) array); final int numBytes = EventLog.writeEvent(TEST_TAG, list); Assert.assertEquals(STARTING_POS_OF_PAYLOAD + 1 + (5 * array.length) + 1, numBytes); } // This test is obsolete. See http://b/issue?id=1262082 public void disableTestReadSimpleEvent() throws Exception { long when = System.currentTimeMillis(); EventLog.writeEvent(2718, 12345); Log.i(TAG, "Wrote simple event at T=" + when); ArrayList<EventLog.Event> list = new ArrayList<EventLog.Event>(); EventLog.readEvents(new int[] { 2718 }, list); boolean found = false; for (EventLog.Event event : list) { assertEquals(event.getTag(), 2718); long eventTime = event.getTimeNanos() / 1000000; Log.i(TAG, " Found event T=" + eventTime); if (eventTime > when - 100 && eventTime < when + 1000) { assertEquals(event.getProcessId(), Process.myPid()); assertEquals(event.getThreadId(), Process.myTid()); assertEquals(event.getData(), 12345); assertFalse(found); found = true; } } assertTrue(found); } // This test is obsolete. See http://b/issue?id=1262082 public void disableTestReadCompoundEntry() throws Exception { long when = System.currentTimeMillis(); EventLog.writeEvent(2719, new EventLog.List(1l, new EventLog.List("2", "three", "4"), 5)); Log.i(TAG, "Wrote compound event at T=" + when); ArrayList<EventLog.Event> list = new ArrayList<EventLog.Event>(); EventLog.readEvents(new int[] { 2719 }, list); boolean found = false; for (EventLog.Event event : list) { long eventTime = event.getTimeNanos() / 1000000; Log.i(TAG, " Found event T=" + eventTime); if (eventTime > when - 100 && eventTime < when + 1000) { EventLog.List data = (EventLog.List) event.getData(); assertEquals(data.getNumItems(), 3); EventLog.List nested = (EventLog.List) data.getItem(1); assertEquals(nested.getNumItems(), 3); assertEquals(data.getItem(0), 1l); assertEquals(nested.getItem(0), "2"); assertEquals(nested.getItem(1), "three"); assertEquals(nested.getItem(2), "4"); assertEquals(data.getItem(2), 5); assertFalse(found); found = true; } } assertTrue(found); } public void testEventLogTagsFile() throws Exception { EventLogTags tags = new EventLogTags(); assertEquals(tags.get("answer").mTag, 42); assertEquals(tags.get("pi").mTag, 314); assertEquals(tags.get("e").mTag, 2718); assertEquals(tags.get(42).mName, "answer"); assertEquals(tags.get(314).mName, "pi"); assertEquals(tags.get(2718).mName, "e"); } }