1741143878b23d22cd9cb7b9cba8055179115ce17msarettpackage com.android.server.devicepolicy; 2741143878b23d22cd9cb7b9cba8055179115ce17msarett 3741143878b23d22cd9cb7b9cba8055179115ce17msarettimport static android.app.admin.SecurityLog.TAG_ADB_SHELL_CMD; 4741143878b23d22cd9cb7b9cba8055179115ce17msarett 5741143878b23d22cd9cb7b9cba8055179115ce17msarettimport android.app.admin.SecurityLog.SecurityEvent; 6741143878b23d22cd9cb7b9cba8055179115ce17msarettimport android.os.Parcel; 7741143878b23d22cd9cb7b9cba8055179115ce17msarettimport android.test.suitebuilder.annotation.SmallTest; 8741143878b23d22cd9cb7b9cba8055179115ce17msarettimport android.util.EventLog; 9741143878b23d22cd9cb7b9cba8055179115ce17msarett 10741143878b23d22cd9cb7b9cba8055179115ce17msarettimport java.io.IOException; 11a4083c97d48e8a4f88e2797d7363f141e3d42553Cary Clarkimport java.util.ArrayList; 12f7eb6fc71abd7649d65a877e7a10d1060afc0c88msarettimport java.util.List; 13909d3791f53eae590314992aad82c71fb45e9164Matt Sarett 149e43cabaa1ff26167e990f0bcb9a5c20d662d52cmsarett@SmallTest 151a85ca5c908b421ea8f07798d56c4481bbc5d5afMatt Sarettpublic class SecurityEventTest extends DpmTestBase { 16da3e9ad894379713cbb66779136ca6877ccac7ddLeon Scroggins III private static long ID = 549; 17741143878b23d22cd9cb7b9cba8055179115ce17msarett private static String DATA = "adb shell some_command"; 18741143878b23d22cd9cb7b9cba8055179115ce17msarett 19741143878b23d22cd9cb7b9cba8055179115ce17msarett public void testSecurityEventId() { 202cc7d139786d228bb70be2b988720c4c59329d93Leon Scroggins III SecurityEvent event = buildSecurityEvents(1 /* generate a single event */, ID).get(0); 21c5560bef14149f4c945a4536988aeba1a16adedcscroggo assertEquals(ID, event.getId()); 22c5560bef14149f4c945a4536988aeba1a16adedcscroggo event.setId(20); 23c5560bef14149f4c945a4536988aeba1a16adedcscroggo assertEquals(20, event.getId()); 24c5560bef14149f4c945a4536988aeba1a16adedcscroggo } 25c5560bef14149f4c945a4536988aeba1a16adedcscroggo 263d9d7a7213748761d46ade183e11aa7cb55313c1msarett public void testSecurityEventParceling() { 27d1ec89b1aca8f37a460a425259a23275f4d9a81dmsarett // GIVEN an event. 283d9d7a7213748761d46ade183e11aa7cb55313c1msarett SecurityEvent event = buildSecurityEvents(1 /* generate a single event */, ID).get(0); 293d9d7a7213748761d46ade183e11aa7cb55313c1msarett // WHEN parceling the event. 303d9d7a7213748761d46ade183e11aa7cb55313c1msarett Parcel p = Parcel.obtain(); 31d1ec89b1aca8f37a460a425259a23275f4d9a81dmsarett p.writeParcelable(event, 0); 323d9d7a7213748761d46ade183e11aa7cb55313c1msarett p.setDataPosition(0); 333d9d7a7213748761d46ade183e11aa7cb55313c1msarett SecurityEvent unparceledEvent = p.readParcelable(SecurityEventTest.class.getClassLoader()); 343d9d7a7213748761d46ade183e11aa7cb55313c1msarett p.recycle(); 355406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett // THEN the event state is preserved. 3610522ff4cfa3cba45881354768f6185fc1109119msarett assertEquals(event.getTag(), unparceledEvent.getTag()); 3710522ff4cfa3cba45881354768f6185fc1109119msarett assertEquals(event.getData(), unparceledEvent.getData()); 383d9d7a7213748761d46ade183e11aa7cb55313c1msarett assertEquals(event.getTimeNanos(), unparceledEvent.getTimeNanos()); 3910522ff4cfa3cba45881354768f6185fc1109119msarett assertEquals(event.getId(), unparceledEvent.getId()); 40d1ec89b1aca8f37a460a425259a23275f4d9a81dmsarett } 4110522ff4cfa3cba45881354768f6185fc1109119msarett 4210522ff4cfa3cba45881354768f6185fc1109119msarett private List<SecurityEvent> buildSecurityEvents(int numEvents, long id) { 4310522ff4cfa3cba45881354768f6185fc1109119msarett // Write an event to the EventLog. 4410522ff4cfa3cba45881354768f6185fc1109119msarett for (int i = 0; i < numEvents; i++) { 4510522ff4cfa3cba45881354768f6185fc1109119msarett EventLog.writeEvent(TAG_ADB_SHELL_CMD, DATA + "_" + i); 4610522ff4cfa3cba45881354768f6185fc1109119msarett } 4710522ff4cfa3cba45881354768f6185fc1109119msarett List<EventLog.Event> events = new ArrayList<>(); 485406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett try { 495406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett EventLog.readEvents(new int[]{TAG_ADB_SHELL_CMD}, events); 505406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett } catch (IOException e) { 515406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett fail("Reading a test event from storage failed: " + e); 525406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett } 53d1ec89b1aca8f37a460a425259a23275f4d9a81dmsarett assertTrue("Unexpected number of events read from the log.", events.size() >= numEvents); 545406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett // Read events generated by test, from the end of the log. 555406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett List<SecurityEvent> securityEvents = new ArrayList<>(); 565406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett for (int i = events.size() - numEvents; i < events.size(); i++) { 575406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett securityEvents.add(new SecurityEvent(id++, events.get(i).getBytes())); 585406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett } 595406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett return securityEvents; 605406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett } 615406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett} 625406d6f39ad042e7a0a0d4ea16beca4fe2b66492msarett