1package com.android.server.devicepolicy; 2 3import static android.app.admin.SecurityLog.TAG_ADB_SHELL_CMD; 4 5import android.app.admin.SecurityLog.SecurityEvent; 6import android.os.Parcel; 7import android.test.suitebuilder.annotation.SmallTest; 8import android.util.EventLog; 9 10import java.io.IOException; 11import java.util.ArrayList; 12import java.util.List; 13 14@SmallTest 15public class SecurityEventTest extends DpmTestBase { 16 private static long ID = 549; 17 private static String DATA = "adb shell some_command"; 18 19 public void testSecurityEventId() { 20 SecurityEvent event = buildSecurityEvents(1 /* generate a single event */, ID).get(0); 21 assertEquals(ID, event.getId()); 22 event.setId(20); 23 assertEquals(20, event.getId()); 24 } 25 26 public void testSecurityEventParceling() { 27 // GIVEN an event. 28 SecurityEvent event = buildSecurityEvents(1 /* generate a single event */, ID).get(0); 29 // WHEN parceling the event. 30 Parcel p = Parcel.obtain(); 31 p.writeParcelable(event, 0); 32 p.setDataPosition(0); 33 SecurityEvent unparceledEvent = p.readParcelable(SecurityEventTest.class.getClassLoader()); 34 p.recycle(); 35 // THEN the event state is preserved. 36 assertEquals(event.getTag(), unparceledEvent.getTag()); 37 assertEquals(event.getData(), unparceledEvent.getData()); 38 assertEquals(event.getTimeNanos(), unparceledEvent.getTimeNanos()); 39 assertEquals(event.getId(), unparceledEvent.getId()); 40 } 41 42 private List<SecurityEvent> buildSecurityEvents(int numEvents, long id) { 43 // Write an event to the EventLog. 44 for (int i = 0; i < numEvents; i++) { 45 EventLog.writeEvent(TAG_ADB_SHELL_CMD, DATA + "_" + i); 46 } 47 List<EventLog.Event> events = new ArrayList<>(); 48 try { 49 EventLog.readEvents(new int[]{TAG_ADB_SHELL_CMD}, events); 50 } catch (IOException e) { 51 fail("Reading a test event from storage failed: " + e); 52 } 53 assertTrue("Unexpected number of events read from the log.", events.size() >= numEvents); 54 // Read events generated by test, from the end of the log. 55 List<SecurityEvent> securityEvents = new ArrayList<>(); 56 for (int i = events.size() - numEvents; i < events.size(); i++) { 57 securityEvents.add(new SecurityEvent(id++, events.get(i).getBytes())); 58 } 59 return securityEvents; 60 } 61} 62