1d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov/*
2d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * Copyright (C) 2017 The Android Open Source Project
3d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov *
4d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * Licensed under the Apache License, Version 2.0 (the "License");
5d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * you may not use this file except in compliance with the License.
6d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * You may obtain a copy of the License at
7d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov *
8d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov *      http://www.apache.org/licenses/LICENSE-2.0
9d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov *
10d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * Unless required by applicable law or agreed to in writing, software
11d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * distributed under the License is distributed on an "AS IS" BASIS,
12d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * See the License for the specific language governing permissions and
14d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * limitations under the License.
15d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov */
16d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
17d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovpackage android.database;
18d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
1913a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolovimport static org.junit.Assert.assertEquals;
20d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport static org.junit.Assert.assertNotNull;
21d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport static org.junit.Assert.assertTrue;
22d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport static org.junit.Assert.fail;
23d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
24d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport android.content.Context;
25d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport android.database.sqlite.SQLiteDatabase;
26d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport android.database.sqlite.SQLiteDatabaseConfiguration;
27d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport android.database.sqlite.SQLiteDebug;
28d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport android.database.sqlite.SQLiteOpenHelper;
29d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport android.support.test.InstrumentationRegistry;
30d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport android.support.test.filters.SmallTest;
31d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport android.support.test.runner.AndroidJUnit4;
32d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport android.util.Log;
33d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
34d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport org.junit.After;
35d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport org.junit.Before;
36d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport org.junit.Test;
37d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport org.junit.runner.RunWith;
38d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
39d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport java.util.ArrayList;
40d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovimport java.util.List;
41d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
42d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov/**
43d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * Tests for {@link SQLiteOpenHelper}
44d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov *
45d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov * <p>Run with:  bit FrameworksCoreTests:android.database.SQLiteOpenHelperTest
46d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov */
47d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov@RunWith(AndroidJUnit4.class)
48d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov@SmallTest
49d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolovpublic class SQLiteOpenHelperTest {
50d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    private static final String TAG = "SQLiteOpenHelperTest";
51d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
52d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    private TestHelper mTestHelper;
53d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    private Context mContext;
54d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    private List<SQLiteOpenHelper> mHelpersToClose;
55d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
56d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    private static class TestHelper extends SQLiteOpenHelper {
57d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        TestHelper(Context context) { // In-memory
58d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            super(context, null, null, 1);
59d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
60d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
61d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        TestHelper(Context context, String name) {
62d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            super(context, name, null, 1);
63d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
64d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
6513a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov        TestHelper(Context context, String name, int version, SQLiteDatabase.OpenParams params) {
6613a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov            super(context, name, version, params);
6713a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov        }
6813a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov
69d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        @Override
70d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        public void onCreate(SQLiteDatabase db) {
71d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
72d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
73d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        @Override
74d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
75d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
76d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
77d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
78d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    @Before
79d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    public void setup() {
80d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        mContext = InstrumentationRegistry.getContext();
81d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        mTestHelper = new TestHelper(mContext, "openhelper_test");
82d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        mHelpersToClose = new ArrayList<>();
83d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        mHelpersToClose.add(mTestHelper);
84d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
85d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
86d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    @After
87d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    public void teardown() {
88d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        for (SQLiteOpenHelper helper : mHelpersToClose) {
89d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            try {
90d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                helper.close();
91d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                if (mTestHelper.getDatabaseName() != null) {
92d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                    SQLiteDatabase.deleteDatabase(
93d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                            mContext.getDatabasePath(mTestHelper.getDatabaseName()));
94d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                }
95d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            } catch (RuntimeException ex) {
96d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                Log.w(TAG, "Error occured when closing db helper " + helper, ex);
97d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            }
98d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
99d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
100d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
101d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    @Test
102d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    public void testLookasideDefault() throws Exception {
103d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        assertNotNull(mTestHelper.getWritableDatabase());
104d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        verifyLookasideStats(false);
105d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
106d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
107d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    @Test
108d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    public void testLookasideDisabled() throws Exception {
109d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        mTestHelper.setLookasideConfig(0, 0);
110d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        assertNotNull(mTestHelper.getWritableDatabase());
111d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        verifyLookasideStats(true);
112d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
113d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
114d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    @Test
115d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    public void testInMemoryLookasideDisabled() throws Exception {
116d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        TestHelper memHelper = new TestHelper(mContext);
117d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        mHelpersToClose.add(memHelper);
118d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        memHelper.setLookasideConfig(0, 0);
119d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        assertNotNull(memHelper.getWritableDatabase());
120d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        verifyLookasideStats(SQLiteDatabaseConfiguration.MEMORY_DB_PATH, true);
121d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
122d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
123d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    @Test
124d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    public void testInMemoryLookasideDefault() throws Exception {
125d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        TestHelper memHelper = new TestHelper(mContext);
126d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        mHelpersToClose.add(memHelper);
127d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        assertNotNull(memHelper.getWritableDatabase());
128d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        verifyLookasideStats(SQLiteDatabaseConfiguration.MEMORY_DB_PATH, false);
129d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
130d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
131d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    @Test
132d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    public void testSetLookasideConfigValidation() {
133d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        try {
134d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            mTestHelper.setLookasideConfig(-1, 0);
135d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            fail("Negative slot size should be rejected");
136d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        } catch (IllegalArgumentException expected) {
137d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
138d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        try {
139d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            mTestHelper.setLookasideConfig(0, -10);
140d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            fail("Negative slot count should be rejected");
141d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        } catch (IllegalArgumentException expected) {
142d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
143d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        try {
144d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            mTestHelper.setLookasideConfig(1, 0);
145d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            fail("Illegal config should be rejected");
146d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        } catch (IllegalArgumentException expected) {
147d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
148d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        try {
149d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            mTestHelper.setLookasideConfig(0, 1);
150d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            fail("Illegal config should be rejected");
151d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        } catch (IllegalArgumentException expected) {
152d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
153d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
154d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
155d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    private void verifyLookasideStats(boolean expectDisabled) {
156d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        verifyLookasideStats(mTestHelper.getDatabaseName(), expectDisabled);
157d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
158d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov
159d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    private static void verifyLookasideStats(String dbName, boolean expectDisabled) {
160d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        boolean dbStatFound = false;
161d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        SQLiteDebug.PagerStats info = SQLiteDebug.getDatabaseInfo();
162d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        for (SQLiteDebug.DbStats dbStat : info.dbStats) {
163d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            if (dbStat.dbName.endsWith(dbName)) {
164d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                dbStatFound = true;
165d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                Log.i(TAG, "Lookaside for " + dbStat.dbName + " " + dbStat.lookaside);
166d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                if (expectDisabled) {
167d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                    assertTrue("lookaside slots count should be zero", dbStat.lookaside == 0);
168d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                } else {
169d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                    assertTrue("lookaside slots count should be greater than zero",
170d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                            dbStat.lookaside > 0);
171d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov                }
172d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov            }
173d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        }
174d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov        assertTrue("No dbstat found for " + dbName, dbStatFound);
175d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov    }
17613a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov
17713a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov    @Test
17813a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov    public void testOpenParamsConstructor() {
17913a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov        SQLiteDatabase.OpenParams params = new SQLiteDatabase.OpenParams.Builder()
18013a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov                .setJournalMode("DELETE")
18113a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov                .setSynchronousMode("OFF")
18213a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov                .build();
18313a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov
18413a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov        TestHelper helper = new TestHelper(mContext, "openhelper_test_constructor", 1, params);
18513a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov        mHelpersToClose.add(helper);
18613a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov
18713a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov        String journalMode = DatabaseUtils
18813a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov                .stringForQuery(helper.getReadableDatabase(), "PRAGMA journal_mode", null);
18913a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov
19013a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov        assertEquals("DELETE", journalMode.toUpperCase());
19113a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov        String syncMode = DatabaseUtils
19213a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov                .stringForQuery(helper.getReadableDatabase(), "PRAGMA synchronous", null);
19313a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov
19413a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov        assertEquals("0", syncMode);
19513a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov    }
19613a4b37e87c0a66d5b6b3eec3fa3df088abc696cFyodor Kupolov
197d3b0c7e7e23c4f1d8db5a084befe4653dcb5e1d5Fyodor Kupolov}
198