summaryrefslogtreecommitdiffstats
path: root/tests/CoreTests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/CoreTests')
-rw-r--r--tests/CoreTests/android/core/DatabaseSessionCache.java312
-rw-r--r--tests/CoreTests/android/core/SSLPerformanceTest.java432
-rw-r--r--tests/CoreTests/android/core/SSLSocketTest.java243
-rw-r--r--tests/CoreTests/android/location/LocationManagerProximityTest.java49
-rwxr-xr-xtests/CoreTests/run_core_test.sh4
5 files changed, 51 insertions, 989 deletions
diff --git a/tests/CoreTests/android/core/DatabaseSessionCache.java b/tests/CoreTests/android/core/DatabaseSessionCache.java
deleted file mode 100644
index c344d9c..0000000
--- a/tests/CoreTests/android/core/DatabaseSessionCache.java
+++ /dev/null
@@ -1,312 +0,0 @@
-// Copyright 2009 The Android Open Source Project
-
-package android.core;
-
-import android.database.Cursor;
-import android.database.SQLException;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteOpenHelper;
-import android.util.Log;
-import android.content.ContentValues;
-import android.content.Context;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-import javax.net.ssl.SSLSession;
-
-/**
- * Hook into harmony SSL cache to persist the SSL sessions.
- *
- * Current implementation is suitable for saving a small number of hosts -
- * like google services. It can be extended with expiration and more features
- * to support more hosts.
- *
- * {@hide}
- */
-public class DatabaseSessionCache implements SSLClientSessionCache {
- private static final String TAG = "SslSessionCache";
- static DatabaseHelper sDefaultDatabaseHelper;
-
- private DatabaseHelper mDatabaseHelper;
-
- /**
- * Table where sessions are stored.
- */
- public static final String SSL_CACHE_TABLE = "ssl_sessions";
-
- private static final String SSL_CACHE_ID = "_id";
-
- /**
- * Key is host:port - port is not optional.
- */
- private static final String SSL_CACHE_HOSTPORT = "hostport";
-
- /**
- * Base64-encoded DER value of the session.
- */
- private static final String SSL_CACHE_SESSION = "session";
-
- /**
- * Time when the record was added - should be close to the time
- * of the initial session negotiation.
- */
- private static final String SSL_CACHE_TIME_SEC = "time_sec";
-
- public static final String DATABASE_NAME = "ssl_sessions.db";
-
- public static final int DATABASE_VERSION = 1;
-
- /** public for testing
- */
- public static final int SSL_CACHE_ID_COL = 0;
- public static final int SSL_CACHE_HOSTPORT_COL = 1;
- public static final int SSL_CACHE_SESSION_COL = 2;
- public static final int SSL_CACHE_TIME_SEC_COL = 3;
-
- private static final String SAVE_ON_ADD = "save_on_add";
-
- static boolean sHookInitializationDone = false;
-
- public static final int MAX_CACHE_SIZE = 256;
-
- private static final Map<String, byte[]> mExternalCache =
- new LinkedHashMap<String, byte[]>(MAX_CACHE_SIZE, 0.75f, true) {
- @Override
- public boolean removeEldestEntry(
- Map.Entry<String, byte[]> eldest) {
- boolean shouldDelete = this.size() > MAX_CACHE_SIZE;
-
- // TODO: delete from DB
- return shouldDelete;
- }
- };
- static boolean mNeedsCacheLoad = true;
-
- public static final String[] PROJECTION = new String[] {
- SSL_CACHE_ID,
- SSL_CACHE_HOSTPORT,
- SSL_CACHE_SESSION,
- SSL_CACHE_TIME_SEC
- };
-
- /**
- * This class needs to be installed as a hook, if the security property
- * is set. Getting the right classloader may be fun since we don't use
- * Provider to get its classloader, but in android this is in same
- * loader with AndroidHttpClient.
- *
- * This constructor will use the default database. You must
- * call init() before to specify the context used for the database and
- * check settings.
- */
- public DatabaseSessionCache() {
- Log.v(TAG, "Instance created.");
- // May be null if caching is disabled - no sessions will be persisted.
- this.mDatabaseHelper = sDefaultDatabaseHelper;
- }
-
- /**
- * Create a SslSessionCache instance, using the specified context to
- * initialize the database.
- *
- * This constructor will use the default database - created the first
- * time.
- *
- * @param activityContext
- */
- public DatabaseSessionCache(Context activityContext) {
- // Static init - only one initialization will happen.
- // Each SslSessionCache is using the same DB.
- init(activityContext);
- // May be null if caching is disabled - no sessions will be persisted.
- this.mDatabaseHelper = sDefaultDatabaseHelper;
- }
-
- /**
- * Create a SslSessionCache that uses a specific database.
- *
- * @param database
- */
- public DatabaseSessionCache(DatabaseHelper database) {
- this.mDatabaseHelper = database;
- }
-
-// public static boolean enabled(Context androidContext) {
-// String sslCache = Settings.Gservices.getString(androidContext.getContentResolver(),
-// Settings.Gservices.SSL_SESSION_CACHE);
-//
-// if (Log.isLoggable(TAG, Log.DEBUG)) {
-// Log.d(TAG, "enabled " + sslCache + " " + androidContext.getPackageName());
-// }
-//
-// return SAVE_ON_ADD.equals(sslCache);
-// }
-
- /**
- * You must call this method to enable SSL session caching for an app.
- */
- public synchronized static void init(Context activityContext) {
- // It is possible that multiple provider will try to install this hook.
- // We want a single db per VM.
- if (sHookInitializationDone) {
- return;
- }
-
-
-// // More values can be added in future to provide different
-// // behaviours, like 'batch save'.
-// if (enabled(activityContext)) {
- Context appContext = activityContext.getApplicationContext();
- sDefaultDatabaseHelper = new DatabaseHelper(appContext);
-
- // Set default SSLSocketFactory
- // The property is defined in the javadocs for javax.net.SSLSocketFactory
- // (no constant defined there)
- // This should cover all code using SSLSocketFactory.getDefault(),
- // including native http client and apache httpclient.
- // MCS is using its own custom factory - will need special code.
-// Security.setProperty("ssl.SocketFactory.provider",
-// SslSocketFactoryWithCache.class.getName());
-// }
-
- // Won't try again.
- sHookInitializationDone = true;
- }
-
- public void putSessionData(SSLSession session, byte[] der) {
- if (mDatabaseHelper == null) {
- return;
- }
- if (mExternalCache.size() > MAX_CACHE_SIZE) {
- // remove oldest.
- Cursor byTime = mDatabaseHelper.getWritableDatabase().query(SSL_CACHE_TABLE,
- PROJECTION, null, null, null, null, SSL_CACHE_TIME_SEC);
- byTime.moveToFirst();
- // TODO: can I do byTime.deleteRow() ?
- String hostPort = byTime.getString(SSL_CACHE_HOSTPORT_COL);
-
- mDatabaseHelper.getWritableDatabase().delete(SSL_CACHE_TABLE,
- SSL_CACHE_HOSTPORT + "= ?" , new String[] { hostPort });
- }
- // Serialize native session to standard DER encoding
- long t0 = System.currentTimeMillis();
-
- String b64 = new String(Base64.encodeBase64(der));
- String key = session.getPeerHost() + ":" + session.getPeerPort();
-
- ContentValues values = new ContentValues();
- values.put(SSL_CACHE_HOSTPORT, key);
- values.put(SSL_CACHE_SESSION, b64);
- values.put(SSL_CACHE_TIME_SEC, System.currentTimeMillis() / 1000);
-
- synchronized (this.getClass()) {
- mExternalCache.put(key, der);
-
- try {
- mDatabaseHelper.getWritableDatabase().insert(SSL_CACHE_TABLE, null /*nullColumnHack */ , values);
- } catch(SQLException ex) {
- // Ignore - nothing we can do to recover, and caller shouldn't
- // be affected.
- Log.w(TAG, "Ignoring SQL exception when caching session", ex);
- }
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- long t1 = System.currentTimeMillis();
- Log.d(TAG, "New SSL session " + session.getPeerHost() +
- " DER len: " + der.length + " " + (t1 - t0));
- }
-
- }
-
- public byte[] getSessionData(String host, int port) {
- // Current (simple) implementation does a single lookup to DB, then saves
- // all entries to the cache.
-
- // This works for google services - i.e. small number of certs.
- // If we extend this to all processes - we should hold a separate cache
- // or do lookups to DB each time.
- if (mDatabaseHelper == null) {
- return null;
- }
- synchronized(this.getClass()) {
- if (mNeedsCacheLoad) {
- // Don't try to load again, if something is wrong on the first
- // request it'll likely be wrong each time.
- mNeedsCacheLoad = false;
- long t0 = System.currentTimeMillis();
-
- Cursor cur = null;
- try {
- cur = mDatabaseHelper.getReadableDatabase().query(SSL_CACHE_TABLE, PROJECTION, null,
- null, null, null, null);
- if (cur.moveToFirst()) {
- do {
- String hostPort = cur.getString(SSL_CACHE_HOSTPORT_COL);
- String value = cur.getString(SSL_CACHE_SESSION_COL);
-
- if (hostPort == null || value == null) {
- continue;
- }
- // TODO: blob support ?
- byte[] der = Base64.decodeBase64(value.getBytes());
- mExternalCache.put(hostPort, der);
- } while (cur.moveToNext());
-
- }
- } catch (SQLException ex) {
- Log.d(TAG, "Error loading SSL cached entries ", ex);
- } finally {
- if (cur != null) {
- cur.close();
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- long t1 = System.currentTimeMillis();
- Log.d(TAG, "LOADED CACHED SSL " + (t1 - t0) + " ms");
- }
- }
- }
-
- String key = host + ":" + port;
-
- return mExternalCache.get(key);
- }
- }
-
- public byte[] getSessionData(byte[] id) {
- // We support client side only - the cache will do nothing on client.
- return null;
- }
-
- /** Visible for testing.
- */
- public static class DatabaseHelper extends SQLiteOpenHelper {
-
- public DatabaseHelper(Context context) {
- super(context, DATABASE_NAME, null /* factory */, DATABASE_VERSION);
- }
-
- @Override
- public void onCreate(SQLiteDatabase db) {
- db.execSQL("CREATE TABLE " + SSL_CACHE_TABLE + " (" +
- SSL_CACHE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
- SSL_CACHE_HOSTPORT + " TEXT UNIQUE ON CONFLICT REPLACE," +
- SSL_CACHE_SESSION + " TEXT," +
- SSL_CACHE_TIME_SEC + " INTEGER" +
- ");");
- db.execSQL("CREATE INDEX ssl_sessions_idx1 ON ssl_sessions (" +
- SSL_CACHE_HOSTPORT + ");");
- }
-
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- db.execSQL("DROP TABLE IF EXISTS " + SSL_CACHE_TABLE );
- onCreate(db);
- }
-
- }
-
-} \ No newline at end of file
diff --git a/tests/CoreTests/android/core/SSLPerformanceTest.java b/tests/CoreTests/android/core/SSLPerformanceTest.java
deleted file mode 100644
index e2bd9c5..0000000
--- a/tests/CoreTests/android/core/SSLPerformanceTest.java
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- * 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 android.core;
-
-import android.test.AndroidTestCase;
-import android.os.Debug;
-import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.impl.conn.SingleClientConnManager;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.HttpResponse;
-
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.SSLSessionContext;
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
-import java.security.cert.Certificate;
-import java.security.Principal;
-import java.security.KeyManagementException;
-import java.util.Arrays;
-
-public class SSLPerformanceTest extends AndroidTestCase {
-
- static final byte[] SESSION_DATA = new byte[6000];
- static {
- for (int i = 0; i < SESSION_DATA.length; i++) {
- SESSION_DATA[i] = (byte) i;
- }
- }
-
- static final File dataDir = new File("/data/data/android.core/");
- static final File filesDir = new File(dataDir, "files");
- static final File dbDir = new File(dataDir, "databases");
-
- static final String CACHE_DIR
- = SSLPerformanceTest.class.getName() + "/cache";
-
- static final int ITERATIONS = 10;
-
- public void testCreateNewEmptyDatabase() {
- deleteDatabase();
-
- Stopwatch stopwatch = new Stopwatch();
-
- DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
- cache.getSessionData("crazybob.org", 443);
-
- stopwatch.stop();
- }
-
- public void testCreateNewEmptyDirectory() throws IOException {
- deleteDirectory();
-
- Stopwatch stopwatch = new Stopwatch();
-
- SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.getSessionData("crazybob.org", 443);
-
- stopwatch.stop();
- }
-
- public void testOpenDatabaseWith10Sessions() {
- deleteDatabase();
-
- DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
- putSessionsIn(cache);
- closeDatabase();
-
- System.err.println("Size of ssl_sessions.db w/ 10 sessions: "
- + new File(dbDir, "ssl_sessions.db").length());
-
- Stopwatch stopwatch = new Stopwatch();
-
- cache = new DatabaseSessionCache(getContext());
- cache.getSessionData("crazybob.org", 443);
-
- stopwatch.stop();
- }
-
- public void testOpenDirectoryWith10Sessions() throws IOException {
- deleteDirectory();
-
- SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- putSessionsIn(cache);
- closeDirectoryCache();
-
- Stopwatch stopwatch = new Stopwatch();
-
- cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.getSessionData("crazybob.org", 443);
-
- stopwatch.stop();
- }
-
- public void testGetSessionFromDatabase() {
- deleteDatabase();
-
- DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
- cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
- closeDatabase();
-
- cache = new DatabaseSessionCache(getContext());
- cache.getSessionData("crazybob.org", 443);
-
- Stopwatch stopwatch = new Stopwatch();
-
- byte[] sessionData = cache.getSessionData("foo", 443);
-
- stopwatch.stop();
-
- assertTrue(Arrays.equals(SESSION_DATA, sessionData));
- }
-
- public void testGetSessionFromDirectory() throws IOException {
- deleteDirectory();
-
- SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
- closeDirectoryCache();
-
- cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.getSessionData("crazybob.org", 443);
-
- Stopwatch stopwatch = new Stopwatch();
-
- byte[] sessionData = cache.getSessionData("foo", 443);
-
- stopwatch.stop();
-
- assertTrue(Arrays.equals(SESSION_DATA, sessionData));
- }
-
- public void testPutSessionIntoDatabase() {
- deleteDatabase();
-
- DatabaseSessionCache cache = new DatabaseSessionCache(getContext());
- cache.getSessionData("crazybob.org", 443);
-
- Stopwatch stopwatch = new Stopwatch();
-
- cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
-
- stopwatch.stop();
- }
-
- public void testPutSessionIntoDirectory() throws IOException {
- deleteDirectory();
-
- SSLClientSessionCache cache = FileClientSessionCache.usingDirectory(
- getCacheDirectory());
- cache.getSessionData("crazybob.org", 443);
-
- Stopwatch stopwatch = new Stopwatch();
-
- cache.putSessionData(new FakeSession("foo"), SESSION_DATA);
-
- stopwatch.stop();
- }
-
- public void testEngineInit() throws IOException, KeyManagementException {
- Stopwatch stopwatch = new Stopwatch();
-
- new SSLContextImpl().engineInit(null, null, null);
-
- stopwatch.stop();
- }
-
- public void testWebRequestWithoutCache() throws IOException,
- KeyManagementException {
- SSLContextImpl sslContext = new SSLContextImpl();
- sslContext.engineInit(null, null, null);
-
- Stopwatch stopwatch = new Stopwatch();
-
- getVerisignDotCom(sslContext);
-
- stopwatch.stop();
- }
-
- public void testWebRequestWithFileCache() throws IOException,
- KeyManagementException {
- deleteDirectory();
-
- SSLContextImpl sslContext = new SSLContextImpl();
- sslContext.engineInit(null, null, null,
- FileClientSessionCache.usingDirectory(getCacheDirectory()),
- null);
-
- // Make sure www.google.com is in the cache.
- getVerisignDotCom(sslContext);
-
- // Re-initialize so we hit the file cache.
- sslContext.engineInit(null, null, null,
- FileClientSessionCache.usingDirectory(getCacheDirectory()),
- null);
-
- Stopwatch stopwatch = new Stopwatch();
-
- getVerisignDotCom(sslContext);
-
- stopwatch.stop();
- }
-
- public void testWebRequestWithInMemoryCache() throws IOException,
- KeyManagementException {
- deleteDirectory();
-
- SSLContextImpl sslContext = new SSLContextImpl();
- sslContext.engineInit(null, null, null);
-
- // Make sure www.google.com is in the cache.
- getVerisignDotCom(sslContext);
-
- Stopwatch stopwatch = new Stopwatch();
-
- getVerisignDotCom(sslContext);
-
- stopwatch.stop();
- }
-
- private void getVerisignDotCom(SSLContextImpl sslContext)
- throws IOException {
- SchemeRegistry schemeRegistry = new SchemeRegistry();
- schemeRegistry.register(new Scheme("https",
- new SSLSocketFactory(sslContext.engineGetSocketFactory()),
- 443));
-
- ClientConnectionManager manager =
- new SingleClientConnManager(null, schemeRegistry);
-
- new DefaultHttpClient(manager, null).execute(
- new HttpGet("https://www.verisign.com"),
- new ResponseHandler<Object>() {
- public Object handleResponse(HttpResponse response)
- throws ClientProtocolException, IOException {
- return null;
- }
- });
- }
-
- private void putSessionsIn(SSLClientSessionCache cache) {
- for (int i = 0; i < 10; i++) {
- cache.putSessionData(new FakeSession("host" + i), SESSION_DATA);
- }
- }
-
- private void deleteDatabase() {
- closeDatabase();
- if (!new File(dbDir, "ssl_sessions.db").delete()) {
- System.err.println("Failed to delete database.");
- }
- }
-
- private void closeDatabase() {
- if (DatabaseSessionCache.sDefaultDatabaseHelper != null) {
- DatabaseSessionCache.sDefaultDatabaseHelper.close();
- }
- DatabaseSessionCache.sDefaultDatabaseHelper = null;
- DatabaseSessionCache.sHookInitializationDone = false;
- DatabaseSessionCache.mNeedsCacheLoad = true;
- }
-
- private void deleteDirectory() {
- closeDirectoryCache();
-
- File dir = getCacheDirectory();
- if (!dir.exists()) {
- return;
- }
- for (File file : dir.listFiles()) {
- file.delete();
- }
- if (!dir.delete()) {
- System.err.println("Failed to delete directory.");
- }
- }
-
- private void closeDirectoryCache() {
- try {
- Method reset = FileClientSessionCache.class
- .getDeclaredMethod("reset");
- reset.setAccessible(true);
- reset.invoke(null);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException(e);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
- } catch (InvocationTargetException e) {
- throw new RuntimeException(e);
- }
- }
-
- private File getCacheDirectory() {
- return new File(getContext().getFilesDir(), CACHE_DIR);
- }
-
- class Stopwatch {
- {
- Debug.startAllocCounting();
- }
- long start = System.nanoTime();
-
- void stop() {
- long elapsed = (System.nanoTime() - start) / 1000;
- Debug.stopAllocCounting();
- System.err.println(getName() + ": " + elapsed + "us, "
- + Debug.getThreadAllocCount() + " allocations, "
- + Debug.getThreadAllocSize() + " bytes");
- }
- }
-}
-
-class FakeSession implements SSLSession {
- final String host;
-
- FakeSession(String host) {
- this.host = host;
- }
-
- public int getApplicationBufferSize() {
- throw new UnsupportedOperationException();
- }
-
- public String getCipherSuite() {
- throw new UnsupportedOperationException();
- }
-
- public long getCreationTime() {
- throw new UnsupportedOperationException();
- }
-
- public byte[] getId() {
- return host.getBytes();
- }
-
- public long getLastAccessedTime() {
- throw new UnsupportedOperationException();
- }
-
- public Certificate[] getLocalCertificates() {
- throw new UnsupportedOperationException();
- }
-
- public Principal getLocalPrincipal() {
- throw new UnsupportedOperationException();
- }
-
- public int getPacketBufferSize() {
- throw new UnsupportedOperationException();
- }
-
- public javax.security.cert.X509Certificate[] getPeerCertificateChain() {
- throw new UnsupportedOperationException();
- }
-
- public Certificate[] getPeerCertificates() {
- throw new UnsupportedOperationException();
- }
-
- public String getPeerHost() {
- return host;
- }
-
- public int getPeerPort() {
- return 443;
- }
-
- public Principal getPeerPrincipal() {
- throw new UnsupportedOperationException();
- }
-
- public String getProtocol() {
- throw new UnsupportedOperationException();
- }
-
- public SSLSessionContext getSessionContext() {
- throw new UnsupportedOperationException();
- }
-
- public Object getValue(String name) {
- throw new UnsupportedOperationException();
- }
-
- public String[] getValueNames() {
- throw new UnsupportedOperationException();
- }
-
- public void invalidate() {
- throw new UnsupportedOperationException();
- }
-
- public boolean isValid() {
- throw new UnsupportedOperationException();
- }
-
- public void putValue(String name, Object value) {
- throw new UnsupportedOperationException();
- }
-
- public void removeValue(String name) {
- throw new UnsupportedOperationException();
- }
-}
diff --git a/tests/CoreTests/android/core/SSLSocketTest.java b/tests/CoreTests/android/core/SSLSocketTest.java
index 088fa8c..922090a 100644
--- a/tests/CoreTests/android/core/SSLSocketTest.java
+++ b/tests/CoreTests/android/core/SSLSocketTest.java
@@ -19,13 +19,9 @@ package android.core;
import junit.framework.TestCase;
import org.apache.commons.codec.binary.Base64;
-import org.apache.harmony.xnet.provider.jsse.SSLContextImpl;
-import org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache;
-import org.apache.harmony.xnet.provider.jsse.FileClientSessionCache;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -33,28 +29,18 @@ import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.security.KeyStore;
-import java.security.KeyManagementException;
import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
import java.util.Random;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLServerSocket;
-import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
-/**
- * SSL integration tests that hit real servers.
- */
public class SSLSocketTest extends TestCase {
private static SSLSocketFactory clientFactory =
@@ -75,15 +61,13 @@ public class SSLSocketTest extends TestCase {
* @param delay The delay after each request (in seconds).
* @throws IOException When a problem occurs.
*/
- private void fetch(SSLSocketFactory socketFactory, String host, int port,
- boolean secure, String path, int outerLoop, int innerLoop,
- int delay, int timeout) throws IOException {
+ private void fetch(String host, int port, boolean secure, String path,
+ int outerLoop, int innerLoop, int delay, int timeout) throws IOException {
InetSocketAddress address = new InetSocketAddress(host, port);
for (int i = 0; i < outerLoop; i++) {
// Connect to the remote host
- Socket socket = secure ? socketFactory.createSocket()
- : new Socket();
+ Socket socket = secure ? clientFactory.createSocket() : new Socket();
if (timeout >= 0) {
socket.setKeepAlive(true);
socket.setSoTimeout(timeout * 1000);
@@ -175,16 +159,6 @@ public class SSLSocketTest extends TestCase {
}
/**
- * Invokes fetch() with the default socket factory.
- */
- private void fetch(String host, int port, boolean secure, String path,
- int outerLoop, int innerLoop,
- int delay, int timeout) throws IOException {
- fetch(clientFactory, host, port, secure, path, outerLoop, innerLoop,
- delay, timeout);
- }
-
- /**
* Does a single request for each of the hosts. Consumes the response.
*
* @throws IOException If a problem occurs.
@@ -645,17 +619,13 @@ public class SSLSocketTest extends TestCase {
public void run() {
try {
- KeyManager[] keyManagers = provideKeys
- ? getKeyManagers(SERVER_KEYS_BKS) : null;
- TrustManager[] trustManagers = new TrustManager[] {
- trustManager };
+ KeyManager[] keyManagers = provideKeys ? getKeyManagers(SERVER_KEYS_BKS) : null;
+ TrustManager[] trustManagers = new TrustManager[] { trustManager };
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, trustManagers, null);
- SSLServerSocket serverSocket
- = (SSLServerSocket) sslContext.getServerSocketFactory()
- .createServerSocket();
+ SSLServerSocket serverSocket = (SSLServerSocket)sslContext.getServerSocketFactory().createServerSocket();
if (clientAuth == CLIENT_AUTH_WANTED) {
serverSocket.setWantClientAuth(true);
@@ -667,15 +637,14 @@ public class SSLSocketTest extends TestCase {
serverSocket.bind(new InetSocketAddress(port));
- SSLSocket clientSocket = (SSLSocket) serverSocket.accept();
+ SSLSocket clientSocket = (SSLSocket)serverSocket.accept();
InputStream stream = clientSocket.getInputStream();
for (int i = 0; i < 256; i++) {
int j = stream.read();
if (i != j) {
- throw new RuntimeException("Error reading socket,"
- + " expected " + i + ", got " + j);
+ throw new RuntimeException("Error reading socket, expected " + i + ", got " + j);
}
}
@@ -721,16 +690,13 @@ public class SSLSocketTest extends TestCase {
public void run() {
try {
- KeyManager[] keyManagers = provideKeys
- ? getKeyManagers(CLIENT_KEYS_BKS) : null;
- TrustManager[] trustManagers = new TrustManager[] {
- trustManager };
+ KeyManager[] keyManagers = provideKeys ? getKeyManagers(CLIENT_KEYS_BKS) : null;
+ TrustManager[] trustManagers = new TrustManager[] { trustManager };
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keyManagers, trustManagers, null);
- SSLSocket socket = (SSLSocket) sslContext.getSocketFactory()
- .createSocket();
+ SSLSocket socket = (SSLSocket)sslContext.getSocketFactory().createSocket();
socket.connect(new InetSocketAddress(port));
socket.startHandshake();
@@ -901,189 +867,6 @@ public class SSLSocketTest extends TestCase {
fail("SSL handshake should have failed.");
}
}
-
- /**
- * Tests our in-memory and persistent caching support.
- */
- public void testClientSessionCaching() throws IOException,
- KeyManagementException {
- SSLContextImpl context = new SSLContextImpl();
-
- // Cache size = 2.
- FakeClientSessionCache fakeCache = new FakeClientSessionCache();
- context.engineInit(null, null, null, fakeCache, null);
- SSLSocketFactory socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(2);
- makeRequests(socketFactory);
- List<String> smallCacheOps = Arrays.asList(
- "get www.fortify.net",
- "put www.fortify.net",
- "get www.paypal.com",
- "put www.paypal.com",
- "get www.yellownet.ch",
- "put www.yellownet.ch",
-
- // At this point, all in-memory cache requests should miss,
- // but the sessions will still be in the persistent cache.
- "get www.fortify.net",
- "get www.paypal.com",
- "get www.yellownet.ch"
- );
- assertEquals(smallCacheOps, fakeCache.ops);
-
- // Cache size = 3.
- fakeCache = new FakeClientSessionCache();
- context.engineInit(null, null, null, fakeCache, null);
- socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(3);
- makeRequests(socketFactory);
- List<String> bigCacheOps = Arrays.asList(
- "get www.fortify.net",
- "put www.fortify.net",
- "get www.paypal.com",
- "put www.paypal.com",
- "get www.yellownet.ch",
- "put www.yellownet.ch"
-
- // At this point, all results should be in the in-memory
- // cache, and the persistent cache shouldn't be hit anymore.
- );
- assertEquals(bigCacheOps, fakeCache.ops);
-
- // Cache size = 4.
- fakeCache = new FakeClientSessionCache();
- context.engineInit(null, null, null, fakeCache, null);
- socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(4);
- makeRequests(socketFactory);
- assertEquals(bigCacheOps, fakeCache.ops);
- }
-
- /**
- * Executes sequence of requests twice using given socket factory.
- */
- private void makeRequests(SSLSocketFactory socketFactory)
- throws IOException {
- for (int i = 0; i < 2; i++) {
- fetch(socketFactory, "www.fortify.net", 443, true, "/sslcheck.html",
- 1, 1, 0, 60);
- fetch(socketFactory, "www.paypal.com", 443, true, "/",
- 1, 1, 0, 60);
- fetch(socketFactory, "www.yellownet.ch", 443, true, "/",
- 1, 1, 0, 60);
- }
- }
-
- /**
- * Fake in the sense that it doesn't actually persist anything.
- */
- static class FakeClientSessionCache implements SSLClientSessionCache {
-
- List<String> ops = new ArrayList<String>();
- Map<String, byte[]> sessions = new HashMap<String, byte[]>();
-
- public byte[] getSessionData(String host, int port) {
- ops.add("get " + host);
- return sessions.get(host);
- }
-
- public void putSessionData(SSLSession session, byte[] sessionData) {
- String host = session.getPeerHost();
- System.err.println("length: " + sessionData.length);
- ops.add("put " + host);
- sessions.put(host, sessionData);
- }
- }
-
- public void testFileBasedClientSessionCache() throws IOException,
- KeyManagementException {
- SSLContextImpl context = new SSLContextImpl();
- String tmpDir = System.getProperty("java.io.tmpdir");
- if (tmpDir == null) {
- fail("Please set 'java.io.tmpdir' system property.");
- }
- File cacheDir = new File(tmpDir
- + "/" + SSLSocketTest.class.getName() + "/cache");
- deleteDir(cacheDir);
- SSLClientSessionCache fileCache
- = FileClientSessionCache.usingDirectory(cacheDir);
- try {
- ClientSessionCacheProxy cacheProxy
- = new ClientSessionCacheProxy(fileCache);
- context.engineInit(null, null, null, cacheProxy, null);
- SSLSocketFactory socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(1);
- makeRequests(socketFactory);
- List<String> expected = Arrays.asList(
- "unsuccessful get www.fortify.net",
- "put www.fortify.net",
- "unsuccessful get www.paypal.com",
- "put www.paypal.com",
- "unsuccessful get www.yellownet.ch",
- "put www.yellownet.ch",
-
- // At this point, all in-memory cache requests should miss,
- // but the sessions will still be in the persistent cache.
- "successful get www.fortify.net",
- "successful get www.paypal.com",
- "successful get www.yellownet.ch"
- );
- assertEquals(expected, cacheProxy.ops);
-
- // Try again now that file-based cache is populated.
- fileCache = FileClientSessionCache.usingDirectory(cacheDir);
- cacheProxy = new ClientSessionCacheProxy(fileCache);
- context.engineInit(null, null, null, cacheProxy, null);
- socketFactory = context.engineGetSocketFactory();
- context.engineGetClientSessionContext().setSessionCacheSize(1);
- makeRequests(socketFactory);
- expected = Arrays.asList(
- "successful get www.fortify.net",
- "successful get www.paypal.com",
- "successful get www.yellownet.ch",
- "successful get www.fortify.net",
- "successful get www.paypal.com",
- "successful get www.yellownet.ch"
- );
- assertEquals(expected, cacheProxy.ops);
- } finally {
- deleteDir(cacheDir);
- }
- }
-
- private static void deleteDir(File directory) {
- if (!directory.exists()) {
- return;
- }
- for (File file : directory.listFiles()) {
- file.delete();
- }
- directory.delete();
- }
-
- static class ClientSessionCacheProxy implements SSLClientSessionCache {
-
- final SSLClientSessionCache delegate;
- final List<String> ops = new ArrayList<String>();
-
- ClientSessionCacheProxy(SSLClientSessionCache delegate) {
- this.delegate = delegate;
- }
-
- public byte[] getSessionData(String host, int port) {
- byte[] sessionData = delegate.getSessionData(host, port);
- ops.add((sessionData == null ? "unsuccessful" : "successful")
- + " get " + host);
- return sessionData;
- }
-
- public void putSessionData(SSLSession session, byte[] sessionData) {
- delegate.putSessionData(session, sessionData);
- ops.add("put " + session.getPeerHost());
- }
- }
-
- public static void main(String[] args) throws KeyManagementException, IOException {
- new SSLSocketTest().testFileBasedClientSessionCache();
- }
+
+
}
diff --git a/tests/CoreTests/android/location/LocationManagerProximityTest.java b/tests/CoreTests/android/location/LocationManagerProximityTest.java
index e1501e3..5f62983 100644
--- a/tests/CoreTests/android/location/LocationManagerProximityTest.java
+++ b/tests/CoreTests/android/location/LocationManagerProximityTest.java
@@ -23,7 +23,6 @@ import android.content.IntentFilter;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
-import android.provider.Settings;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import android.util.Log;
@@ -34,10 +33,8 @@ import android.util.Log;
* TODO: add tests for more scenarios
*
* To run:
- * adb shell am instrument -e class android.location.LocationManagerProximityTest \
- * -w android.core/android.test.InstrumentationTestRunner
- *
- * This test requires that the "Allow mock locations" setting be enabled
+ * adb shell am instrument -e class com.google.android.mapstests.api.LocationProximityTest \
+ * -w com.google.android.mapstests/.MapInstrumentationTestRunner
*
*/
@MediumTest
@@ -49,6 +46,8 @@ public class LocationManagerProximityTest extends AndroidTestCase {
private LocationManager mLocationManager;
private PendingIntent mPendingIntent;
private TestIntentReceiver mIntentReceiver;
+ private String mOriginalAllowedProviders;
+ private int mOriginalMocksAllowed;
private static final String LOG_TAG = "LocationProximityTest";
@@ -61,13 +60,27 @@ public class LocationManagerProximityTest extends AndroidTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
-
- // test that mock locations are allowed so a more descriptive error message can be logged
- if (Settings.Secure.getInt(getContext().getContentResolver(),
- Settings.Secure.ALLOW_MOCK_LOCATION, 0) == 0) {
- fail("Mock locations are currently disabled in Settings - this test requires " +
- "mock locations");
- }
+
+ // allow mock locations
+ mOriginalMocksAllowed =
+ android.provider.Settings.Secure.getInt(getContext().getContentResolver(),
+ android.provider.Settings.Secure.ALLOW_MOCK_LOCATION, 0);
+
+ android.provider.Settings.Secure.putInt(getContext().getContentResolver(),
+ android.provider.Settings.Secure.ALLOW_MOCK_LOCATION, 1);
+
+ mOriginalAllowedProviders =
+ android.provider.Settings.Secure.getString(
+ getContext().getContentResolver(),
+ android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
+
+ // ensure 'only' the mock provider is enabled
+ // need to do this so the proximity listener does not ignore the mock
+ // updates in favor of gps updates
+ android.provider.Settings.Secure.putString(
+ getContext().getContentResolver(),
+ android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
+ PROVIDER_NAME);
mLocationManager = (LocationManager) getContext().
getSystemService(Context.LOCATION_SERVICE);
@@ -96,6 +109,18 @@ public class LocationManagerProximityTest extends AndroidTestCase {
if (mIntentReceiver != null) {
getContext().unregisterReceiver(mIntentReceiver);
}
+
+ android.provider.Settings.Secure.putInt(getContext().getContentResolver(),
+ android.provider.Settings.Secure.ALLOW_MOCK_LOCATION, mOriginalMocksAllowed);
+
+ if (mOriginalAllowedProviders != null) {
+ // restore original settings
+ android.provider.Settings.Secure.putString(
+ getContext().getContentResolver(),
+ android.provider.Settings.Secure.LOCATION_PROVIDERS_ALLOWED,
+ mOriginalAllowedProviders);
+ mLocationManager.updateProviders();
+ }
}
/**
diff --git a/tests/CoreTests/run_core_test.sh b/tests/CoreTests/run_core_test.sh
index ffa31ed..1fc3348 100755
--- a/tests/CoreTests/run_core_test.sh
+++ b/tests/CoreTests/run_core_test.sh
@@ -1,6 +1,4 @@
framework=/system/framework
bpath=$framework/core.jar:$framework/ext.jar:$framework/framework.jar:$framework/android.test.runner.jar
-adb shell exec dalvikvm -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=3001 \
- -Xbootclasspath:$bpath -cp /data/app/android.core.apk \
- -Djava.io.tmpdir=/sdcard/tmp \
+adb shell exec dalvikvm -Xbootclasspath:$bpath -cp system/app/CoreTests.apk \
com.android.internal.util.WithFramework junit.textui.TestRunner $*