blob: a64a9007f57244a37d26e73e436a07595208f376 [file] [log] [blame]
/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.cts.process;
import java.util.List;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.test.AndroidTestCase;
import com.android.cts.process.activity.NoSharePidActivity;
import com.android.cts.process.activity.SharePidActivity;
import com.android.cts.process.activity.SharePidSubActivity;
public class ProcessTest extends AndroidTestCase {
private final int WAIT_TIME = 2000;
public void testUid() throws Exception {
String enableApp = "com.android.cts.process.shareuidapp";
String disableApp = "com.android.cts.process.noshareuidapp";
String testApp = mContext.getPackageName();
int uid1 = mContext.getPackageManager().getApplicationInfo(enableApp,
PackageManager.GET_META_DATA).uid;
int uid2 = mContext.getPackageManager().getApplicationInfo(disableApp,
PackageManager.GET_META_DATA).uid;
int uid3 = mContext.getPackageManager().getApplicationInfo(testApp,
PackageManager.GET_META_DATA).uid;
assertEquals(uid1, uid3);
assertNotSame(uid2, uid3);
}
public void testPid() throws Exception {
ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
String shareProcessName = mContext.getPackageName() + ":shareProcess";
String noShareProcessName = mContext.getPackageName() + ":noShareProcess";
List<RunningAppProcessInfo> list = am.getRunningAppProcesses();
assertEquals(-1, getPid(shareProcessName, list));
// share pid will use same process
Intent sharePidIntent = new Intent();
sharePidIntent.setClass(mContext, SharePidActivity.class);
sharePidIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(sharePidIntent);
Thread.sleep(WAIT_TIME);
List<RunningAppProcessInfo> sharelist = am.getRunningAppProcesses();
int sharePid = getPid(shareProcessName, sharelist);
assertTrue(-1 != sharePid);
Intent sharePidStubIntent = new Intent();
sharePidStubIntent.setClass(mContext, SharePidSubActivity.class);
sharePidStubIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(sharePidStubIntent);
Thread.sleep(WAIT_TIME);
List<RunningAppProcessInfo> shareStublist = am.getRunningAppProcesses();
int shareStubPid = getPid(shareProcessName, shareStublist);
assertTrue(-1 != shareStubPid);
assertEquals(sharePid, shareStubPid);
// no share pid will create a new process
Intent noSharePidIntent = new Intent();
noSharePidIntent.setClass(mContext, NoSharePidActivity.class);
noSharePidIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(noSharePidIntent);
Thread.sleep(WAIT_TIME);
List<RunningAppProcessInfo> noShareStublist = am.getRunningAppProcesses();
int noSharePid = getPid(noShareProcessName, noShareStublist);
assertTrue(-1 != noSharePid);
assertTrue(sharePid != noSharePid);
// kill the process after test
android.os.Process.killProcess(noSharePid);
android.os.Process.killProcess(sharePid);
}
private int getPid(String processName, List<RunningAppProcessInfo> list) {
for (RunningAppProcessInfo rai : list) {
if (processName.equals(rai.processName))
return rai.pid;
}
return -1;
}
}