10fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski/* 20fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * Copyright (C) 2016 The Android Open Source Project 30fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * 40fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * Licensed under the Apache License, Version 2.0 (the "License"); 50fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * you may not use this file except in compliance with the License. 60fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * You may obtain a copy of the License at 70fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * 80fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * http://www.apache.org/licenses/LICENSE-2.0 90fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * 100fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * Unless required by applicable law or agreed to in writing, software 110fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * distributed under the License is distributed on an "AS IS" BASIS, 120fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * See the License for the specific language governing permissions and 140fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * limitations under the License. 150fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski */ 160fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 170fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskipackage com.android.server.wifi; 180fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 190fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport static org.junit.Assert.assertEquals; 200fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport static org.junit.Assert.assertFalse; 210fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 220fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport android.os.Binder; 230fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport android.test.suitebuilder.annotation.SmallTest; 240fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 250fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport org.junit.After; 260fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport org.junit.Before; 270fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskiimport org.junit.Test; 280fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 290fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski/** 300fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * Unit tests for {@link com.android.server.wifi.BinderUtil}. 310fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski */ 320fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski@SmallTest 330fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowskipublic class BinderUtilTest { 340fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski static final int FAKE_UID = 30000000; 350fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 360fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski private long mToken; 370fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 380fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski /** 390fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * Sets up the test harness before running a test. 400fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski */ 410fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski @Before 420fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski public void setUp() { 430fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski mToken = Binder.clearCallingIdentity(); 440fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski } 450fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 460fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski /** 470fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * Cleans up the test harness after running a test. 480fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski */ 490fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski @After 500fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski public void cleanUp() { 510fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski Binder.restoreCallingIdentity(mToken); 520fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski } 530fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 540fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski /** 550fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * Test using {@link BinderUtil.setUid} to set and restore the Binder uid. 560fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski */ 570fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski @Test 580fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski public void setUid() { 590fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski final int pid = Binder.getCallingPid(); 600fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski final int uid = Binder.getCallingUid(); 610fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertFalse(uid == FAKE_UID); 620fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 630fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski // Verify that setUid() can be used to fake the Binder uid without affecting the pid. 640fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski BinderUtil.setUid(FAKE_UID); 650fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertEquals(pid, Binder.getCallingPid()); 660fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertEquals(FAKE_UID, Binder.getCallingUid()); 670fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 680fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski // Verify that setUid() can be used to restore the original Binder uid without affecting the 690fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski // pid. 700fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski BinderUtil.setUid(uid); 710fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertEquals(pid, Binder.getCallingPid()); 720fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertEquals(uid, Binder.getCallingUid()); 730fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski } 740fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 750fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski /** 760fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * Test using {@link BinderUtil.setUid} to set the Binder uid and 770fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski * {@link Binder.restoreCallingIdentity} to restore it. 780fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski */ 790fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski @Test 800fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski public void setUidAndRestoreCallingIdentity() { 810fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski final int pid = Binder.getCallingPid(); 820fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski final int uid = Binder.getCallingUid(); 830fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertFalse(uid == FAKE_UID); 840fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 850fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski // Verify that setUid() can be used to fake the Binder uid without affecting the pid. 860fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski BinderUtil.setUid(FAKE_UID); 870fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertEquals(pid, Binder.getCallingPid()); 880fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertEquals(FAKE_UID, Binder.getCallingUid()); 890fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski 900fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski // Verify that the setUid() calls above did not break Binder.restoreCallingIdentity(). 910fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski Binder.restoreCallingIdentity(mToken); 920fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertEquals(pid, Binder.getCallingPid()); 930fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski assertEquals(uid, Binder.getCallingUid()); 940fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski } 950fb9cf43830d67894b519c9a6271320c4842a5c0Bartosz Fabianowski} 96