blob: 0f05212986417a946a77993a05a2845c1bfb164d [file] [log] [blame]
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<SecurityEvent> 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<EventLog.Event> 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<SecurityEvent> securityEvents = new ArrayList<>();
for (int i = events.size() - numEvents; i < events.size(); i++) {
securityEvents.add(new SecurityEvent(id++, events.get(i).getBytes()));
}
return securityEvents;
}
}