Skip to content

Commit d7a5e81

Browse files
Adding test for cross process cursor scenario
1 parent e4c575b commit d7a5e81

File tree

8 files changed

+242
-210
lines changed

8 files changed

+242
-210
lines changed

AndroidManifest.xml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
package="net.zetetic" android:versionCode="1" android:versionName="1.0-SNAPSHOT">
4-
5-
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name="ZeteticApplication">
6-
<activity android:name=".TestSuiteActivity">
7-
<intent-filter>
8-
<action android:name="android.intent.action.MAIN" />
9-
<category android:name="android.intent.category.LAUNCHER" />
10-
</intent-filter>
11-
</activity>
12-
</application>
3+
package="net.zetetic" android:versionCode="1" android:versionName="1.0-SNAPSHOT">
134

5+
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name="ZeteticApplication">
6+
<activity android:name=".TestSuiteActivity">
7+
<intent-filter>
8+
<action android:name="android.intent.action.MAIN"/>
9+
<category android:name="android.intent.category.LAUNCHER"/>
10+
</intent-filter>
11+
</activity>
12+
<provider android:name=".ZeteticContentProvider" android:authorities="net.zetetic.sqlcipher.zeteticprovider" />
13+
</application>
1414
</manifest>
1515

net.zetetic.sqlcipher.test.iws

Lines changed: 122 additions & 191 deletions
Large diffs are not rendered by default.

src/main/java/net/zetetic/TestSuiteActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public void onCreate(Bundle savedInstanceState) {
2323

2424
public void onButtonClick(View view) {
2525

26+
ZeteticApplication.getInstance().setCurrentActivity(this);
2627
TestSuiteRunner runner = new TestSuiteRunner();
2728
List<TestResult> results = runner.runSuite();
2829

src/main/java/net/zetetic/ZeteticApplication.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
package net.zetetic;
22

3+
import android.app.Activity;
34
import android.app.Application;
5+
import info.guardianproject.database.sqlcipher.SQLiteDatabase;
6+
7+
import java.io.File;
48

59
public class ZeteticApplication extends Application {
610

11+
public static String DATABASE_NAME = "test.db";
12+
public static String DATABASE_PASSWORD = "test";
713
private static ZeteticApplication instance;
14+
private Activity activity;
15+
public static final String TAG = "Zetetic";
816

917
public ZeteticApplication(){
1018
instance = this;
@@ -13,4 +21,19 @@ public ZeteticApplication(){
1321
public static ZeteticApplication getInstance(){
1422
return instance;
1523
}
24+
25+
public void setCurrentActivity(Activity activity){
26+
this.activity = activity;
27+
}
28+
29+
public Activity getCurrentActivity(){
30+
return activity;
31+
}
32+
33+
public SQLiteDatabase createDatabase(){
34+
File databaseFile = getDatabasePath(ZeteticApplication.DATABASE_NAME);
35+
databaseFile.mkdirs();
36+
databaseFile.delete();
37+
return SQLiteDatabase.openOrCreateDatabase(databaseFile, DATABASE_PASSWORD, null);
38+
}
1639
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package net.zetetic;
2+
3+
import android.content.ContentProvider;
4+
import android.content.ContentValues;
5+
import android.database.Cursor;
6+
import android.net.Uri;
7+
import info.guardianproject.database.sqlcipher.SQLiteDatabase;
8+
9+
public class ZeteticContentProvider extends ContentProvider {
10+
11+
public static final Uri CONTENT_URI =
12+
Uri.parse("content://net.zetetic.sqlcipher.zeteticprovider");
13+
14+
private SQLiteDatabase database;
15+
16+
public ZeteticContentProvider() {
17+
SQLiteDatabase.loadLibs(ZeteticApplication.getInstance());
18+
database = ZeteticApplication.getInstance().createDatabase();
19+
database.execSQL("create table t1(a, b);");
20+
database.execSQL("insert into t1(a, b) values('one for the money', 'two for the show');");
21+
}
22+
23+
@Override
24+
public boolean onCreate() {
25+
return true;
26+
}
27+
28+
@Override
29+
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
30+
return database.rawQuery("select * from t1", null);
31+
}
32+
33+
@Override
34+
public String getType(Uri uri) {
35+
return null;
36+
}
37+
38+
@Override
39+
public Uri insert(Uri uri, ContentValues contentValues) {
40+
return null;
41+
}
42+
43+
@Override
44+
public int delete(Uri uri, String s, String[] strings) {
45+
return 0;
46+
}
47+
48+
@Override
49+
public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
50+
return 0;
51+
}
52+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package net.zetetic.tests;
2+
3+
import android.app.Activity;
4+
import android.net.Uri;
5+
import info.guardianproject.database.sqlcipher.SQLiteDatabase;
6+
import net.zetetic.ZeteticApplication;
7+
import net.zetetic.ZeteticContentProvider;
8+
9+
public class CrossProcessCursorQueryTest extends SQLCipherTest {
10+
@Override
11+
public boolean execute(SQLiteDatabase database) {
12+
13+
Activity activity = ZeteticApplication.getInstance().getCurrentActivity();
14+
Uri providerUri = ZeteticContentProvider.CONTENT_URI;
15+
android.database.Cursor cursor = activity.managedQuery(providerUri, null, null, null, null);
16+
StringBuilder buffer = new StringBuilder();
17+
while(cursor.moveToNext()){
18+
buffer.append(cursor.getString(0));
19+
buffer.append(cursor.getString(1));
20+
}
21+
return buffer.toString().length() > 0;
22+
}
23+
24+
@Override
25+
public String getName() {
26+
return "Cross Process Cursor";
27+
}
28+
}
Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package net.zetetic.tests;
22

3-
import android.content.Context;
3+
import android.util.Log;
44
import info.guardianproject.database.sqlcipher.SQLiteDatabase;
55
import net.zetetic.ZeteticApplication;
66

7-
import java.io.File;
8-
97
public abstract class SQLCipherTest {
108

119
public abstract boolean execute(SQLiteDatabase database);
@@ -14,11 +12,7 @@ public abstract class SQLCipherTest {
1412
private SQLiteDatabase database;
1513

1614
protected void setUp() {
17-
Context context = ZeteticApplication.getInstance().getApplicationContext();
18-
File databaseFile = context.getDatabasePath("test.db");
19-
databaseFile.mkdirs();
20-
databaseFile.delete();
21-
database = SQLiteDatabase.openOrCreateDatabase(databaseFile, "test", null);
15+
database = ZeteticApplication.getInstance().createDatabase();
2216
}
2317

2418
public TestResult run() {
@@ -27,7 +21,9 @@ public TestResult run() {
2721
try {
2822
setUp();
2923
result.setResult(execute(database));
30-
} catch (Exception e) {}
24+
} catch (Exception e) {
25+
Log.v(ZeteticApplication.TAG, e.toString());
26+
}
3127
return result;
3228
}
3329
}

src/main/java/net/zetetic/tests/TestSuiteRunner.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public List<TestResult> runSuite(){
2121
private List<SQLCipherTest> getTestsToRun(){
2222
List<SQLCipherTest> tests = new ArrayList<SQLCipherTest>();
2323
tests.add(new NullQueryResultTest());
24+
tests.add(new CrossProcessCursorQueryTest());
2425
return tests;
2526
}
2627
}

0 commit comments

Comments
 (0)