package com.android.server.devicepolicy; import static android.app.admin.SecurityLog.TAG_ADB_SHELL_CMD; import android.app.admin.SecurityLog.SecurityEvent; import android.os.Parcel; import android.test.suitebuilder.annotation.SmallTest; import android.util.EventLog; import java.io.IOException; import java.util.ArrayList; import java.util.List; @SmallTest public class SecurityEventTest extends DpmTestBase { private static long ID = 549; private static String DATA = "adb shell some_command"; public void testSecurityEventId() { SecurityEvent event = buildSecurityEvents(1 /* generate a single event */, ID).get(0); assertEquals(ID, event.getId()); event.setId(20); assertEquals(20, event.getId()); } public void testSecurityEventParceling() { // GIVEN an event. SecurityEvent event = buildSecurityEvents(1 /* generate a single event */, ID).get(0); // WHEN parceling the event. Parcel p = Parcel.obtain(); p.writeParcelable(event, 0); p.setDataPosition(0); SecurityEvent unparceledEvent = p.readParcelable(SecurityEventTest.class.getClassLoader()); p.recycle(); // THEN the event state is preserved. assertEquals(event.getTag(), unparceledEvent.getTag()); assertEquals(event.getData(), unparceledEvent.getData()); assertEquals(event.getTimeNanos(), unparceledEvent.getTimeNanos()); assertEquals(event.getId(), unparceledEvent.getId()); } private List buildSecurityEvents(int numEvents, long id) { // Write an event to the EventLog. for (int i = 0; i < numEvents; i++) { EventLog.writeEvent(TAG_ADB_SHELL_CMD, DATA + "_" + i); } List events = new ArrayList<>(); try { EventLog.readEvents(new int[]{TAG_ADB_SHELL_CMD}, events); } catch (IOException e) { fail("Reading a test event from storage failed: " + e); } assertTrue("Unexpected number of events read from the log.", events.size() >= numEvents); // Read events generated by test, from the end of the log. List securityEvents = new ArrayList<>(); for (int i = events.size() - numEvents; i < events.size(); i++) { securityEvents.add(new SecurityEvent(id++, events.get(i).getBytes())); } return securityEvents; } }