1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.database; 18 19import android.content.Context; 20import android.database.sqlite.*; 21import android.util.Log; 22 23import android.test.AndroidTestCase; 24import android.test.suitebuilder.annotation.Suppress; 25 26import java.io.File; 27 28// This test suite is too desctructive and takes too long to be included in the 29// automated suite. 30@Suppress 31public class DatabaseStressTest extends AndroidTestCase { 32 private static final String TAG = "DatabaseStressTest"; 33 private static final int CURRENT_DATABASE_VERSION = 1; 34 private SQLiteDatabase mDatabase; 35 private File mDatabaseFile; 36 37 @Override 38 protected void setUp() throws Exception { 39 super.setUp(); 40 Context c = getContext(); 41 42 mDatabaseFile = c.getDatabasePath("database_test.db"); 43 if (mDatabaseFile.exists()) { 44 mDatabaseFile.delete(); 45 } 46 47 mDatabase = c.openOrCreateDatabase("database_test.db", 0, null); 48 49 assertNotNull(mDatabase); 50 mDatabase.setVersion(CURRENT_DATABASE_VERSION); 51 52 mDatabase.execSQL("CREATE TABLE IF NOT EXISTS test (_id INTEGER PRIMARY KEY, data TEXT);"); 53 54 } 55 56 @Override 57 protected void tearDown() throws Exception { 58 mDatabase.close(); 59 mDatabaseFile.delete(); 60 super.tearDown(); 61 } 62 63 public void testSingleThreadInsertDelete() { 64 int i = 0; 65 char[] ch = new char[100000]; 66 String str = new String(ch); 67 String[] strArr = new String[1]; 68 strArr[0] = str; 69 for (; i < 10000; ++i) { 70 try { 71 mDatabase.execSQL("INSERT INTO test (data) VALUES (?)", strArr); 72 mDatabase.execSQL("delete from test;"); 73 } catch (Exception e) { 74 Log.e(TAG, "exception " + e.getMessage()); 75 } 76 } 77 } 78 79 /** 80 * use fillup -p 90 before run the test 81 * and when disk run out 82 * start delete some fillup files 83 * and see if db recover 84 */ 85 public void testOutOfSpace() { 86 int i = 0; 87 char[] ch = new char[100000]; 88 String str = new String(ch); 89 String[] strArr = new String[1]; 90 strArr[0] = str; 91 for (; i < 10000; ++i) { 92 try { 93 mDatabase.execSQL("INSERT INTO test (data) VALUES (?)", strArr); 94 } catch (Exception e) { 95 Log.e(TAG, "exception " + e.getMessage()); 96 } 97 } 98 } 99} 100