19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.database;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.sqlite.*;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.Suppress;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// This test suite is too desctructive and takes too long to be included in the
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// automated suite.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@Suppress
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class DatabaseStressTest extends AndroidTestCase {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final String TAG = "DatabaseStressTest";
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final int CURRENT_DATABASE_VERSION = 1;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private SQLiteDatabase mDatabase;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private File mDatabaseFile;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void setUp() throws Exception {
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Context c = getContext();
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mDatabaseFile = c.getDatabasePath("database_test.db");
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mDatabaseFile.exists()) {
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mDatabaseFile.delete();
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mDatabase = c.openOrCreateDatabase("database_test.db", 0, null);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertNotNull(mDatabase);
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mDatabase.setVersion(CURRENT_DATABASE_VERSION);
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mDatabase.execSQL("CREATE TABLE IF NOT EXISTS test (_id INTEGER PRIMARY KEY, data TEXT);");
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void tearDown() throws Exception {
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mDatabase.close();
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mDatabaseFile.delete();
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.tearDown();
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testSingleThreadInsertDelete() {
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int i = 0;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char[] ch = new char[100000];
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String str = new String(ch);
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] strArr = new String[1];
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        strArr[0] = str;
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (; i < 10000; ++i) {
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mDatabase.execSQL("INSERT INTO test (data) VALUES (?)", strArr);
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mDatabase.execSQL("delete from test;");
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (Exception e) {
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e(TAG, "exception " + e.getMessage());
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * use fillup -p 90 before run the test
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and when disk run out
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * start delete some fillup files
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and see if db recover
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testOutOfSpace() {
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int i = 0;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char[] ch = new char[100000];
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String str = new String(ch);
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] strArr = new String[1];
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        strArr[0] = str;
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (; i < 10000; ++i) {
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            try {
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mDatabase.execSQL("INSERT INTO test (data) VALUES (?)", strArr);
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            } catch (Exception e) {
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Log.e(TAG, "exception " + e.getMessage());
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
100