Home | History | Annotate | Download | only in devicepolicy
      1 package com.android.server.devicepolicy;
      2 
      3 import static android.app.admin.SecurityLog.TAG_ADB_SHELL_CMD;
      4 
      5 import android.app.admin.SecurityLog.SecurityEvent;
      6 import android.os.Parcel;
      7 import android.test.suitebuilder.annotation.SmallTest;
      8 import android.util.EventLog;
      9 
     10 import java.io.IOException;
     11 import java.util.ArrayList;
     12 import java.util.List;
     13 
     14 @SmallTest
     15 public 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