Skip to content

Commit 83301ef

Browse files
committed
added more ISupportTest-based tests
1 parent e0920a0 commit 83301ef

11 files changed

+733
-20
lines changed

app/src/main/java/net/zetetic/QueryHelper.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package net.zetetic;
22

33
import android.database.Cursor;
4-
import net.sqlcipher.database.SQLiteDatabase;
4+
import androidx.sqlite.db.SupportSQLiteDatabase;
55

66

77
public class QueryHelper {
88

9-
public static String singleValueFromQuery(SQLiteDatabase database, String query){
10-
Cursor cursor = database.rawQuery(query, new String[]{});
9+
public static String singleValueFromQuery(SupportSQLiteDatabase database, String query){
10+
Cursor cursor = database.query(query, new String[]{});
1111
String value = "";
1212
if(cursor != null){
1313
cursor.moveToFirst();
@@ -17,8 +17,8 @@ public static String singleValueFromQuery(SQLiteDatabase database, String query)
1717
return value;
1818
}
1919

20-
public static int singleIntegerValueFromQuery(SQLiteDatabase database, String query){
21-
Cursor cursor = database.rawQuery(query, new String[]{});
20+
public static int singleIntegerValueFromQuery(SupportSQLiteDatabase database, String query){
21+
Cursor cursor = database.query(query, new String[]{});
2222
int value = 0;
2323
if(cursor != null){
2424
cursor.moveToFirst();
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package net.zetetic.tests.support;
2+
3+
import android.database.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.sqlcipher.database.SupportFactory;
6+
import net.zetetic.ZeteticApplication;
7+
import net.zetetic.tests.TestResult;
8+
import java.io.File;
9+
import java.util.Random;
10+
import androidx.sqlite.db.SupportSQLiteDatabase;
11+
import androidx.sqlite.db.SupportSQLiteOpenHelper;
12+
13+
public class CursorAccessTest implements ISupportTest {
14+
@Override
15+
public TestResult run() {
16+
TestResult result = new TestResult(getName(), false);
17+
18+
ZeteticApplication.getInstance().deleteDatabaseFileAndSiblings(ZeteticApplication.DATABASE_NAME);
19+
String databasesFolderPath = ZeteticApplication.getInstance()
20+
.getDatabasePath(ZeteticApplication.DATABASE_NAME).getParent();
21+
File databasesFolder = new File(databasesFolderPath);
22+
databasesFolder.delete();
23+
24+
byte[] passphrase = SQLiteDatabase.getBytes(ZeteticApplication.DATABASE_PASSWORD.toCharArray());
25+
SupportFactory factory = new SupportFactory(passphrase);
26+
SupportSQLiteOpenHelper.Configuration cfg =
27+
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
28+
.name(ZeteticApplication.DATABASE_NAME)
29+
.callback(new SupportSQLiteOpenHelper.Callback(1) {
30+
@Override
31+
public void onCreate(SupportSQLiteDatabase db) {
32+
db.execSQL("create table t1(a text, b integer, c text, d real, e blob)");
33+
byte[] data = new byte[10];
34+
new Random().nextBytes(data);
35+
db.execSQL("insert into t1(a, b, c, d, e) values(?, ?, ?, ?, ?)", new Object[]{"test1", 100, null, 3.25, data});
36+
}
37+
38+
@Override
39+
public void onUpgrade(SupportSQLiteDatabase db, int oldVersion,
40+
int newVersion) {
41+
// unused
42+
}
43+
})
44+
.build();
45+
SupportSQLiteOpenHelper helper = factory.create(cfg);
46+
SupportSQLiteDatabase database = helper.getWritableDatabase();
47+
48+
Cursor results = database.query("select * from t1", new String[]{});
49+
results.moveToFirst();
50+
int type_a = results.getType(0);
51+
int type_b = results.getType(1);
52+
int type_c = results.getType(2);
53+
int type_d = results.getType(3);
54+
int type_e = results.getType(4);
55+
56+
results.close();
57+
helper.close();
58+
59+
result.setResult(type_a == Cursor.FIELD_TYPE_STRING &&
60+
type_b == Cursor.FIELD_TYPE_INTEGER &&
61+
type_c == Cursor.FIELD_TYPE_NULL &&
62+
type_d == Cursor.FIELD_TYPE_FLOAT &&
63+
type_e == Cursor.FIELD_TYPE_BLOB);
64+
65+
return result;
66+
}
67+
68+
@Override
69+
public String getName() {
70+
return "Cursor Access Test";
71+
}
72+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package net.zetetic.tests.support;
2+
3+
import android.database.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.sqlcipher.database.SupportFactory;
6+
import net.zetetic.ZeteticApplication;
7+
import net.zetetic.tests.SQLCipherTest;
8+
import net.zetetic.tests.TestResult;
9+
import java.io.File;
10+
import androidx.sqlite.db.SupportSQLiteDatabase;
11+
import androidx.sqlite.db.SupportSQLiteOpenHelper;
12+
13+
public class ExportToUnencryptedDatabase implements ISupportTest {
14+
15+
File unencryptedFile;
16+
17+
@Override
18+
public TestResult run() {
19+
TestResult result = new TestResult(getName(), false);
20+
21+
ZeteticApplication.getInstance().deleteDatabase(ZeteticApplication.DATABASE_NAME);
22+
23+
byte[] passphrase = SQLiteDatabase.getBytes(ZeteticApplication.DATABASE_PASSWORD.toCharArray());
24+
SupportFactory
25+
factory = new SupportFactory(passphrase);
26+
SupportSQLiteOpenHelper.Configuration cfg =
27+
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
28+
.name(ZeteticApplication.DATABASE_NAME)
29+
.callback(new SupportSQLiteOpenHelper.Callback(1) {
30+
@Override
31+
public void onCreate(SupportSQLiteDatabase db) {
32+
// unused
33+
}
34+
35+
@Override
36+
public void onUpgrade(SupportSQLiteDatabase db, int oldVersion,
37+
int newVersion) {
38+
// unused
39+
}
40+
})
41+
.build();
42+
SupportSQLiteOpenHelper helper = factory.create(cfg);
43+
SupportSQLiteDatabase database = helper.getWritableDatabase();
44+
45+
database.execSQL("create table t1(a,b);");
46+
database.execSQL("insert into t1(a,b) values(?, ?);", new Object[]{"one for the money", "two for the show"});
47+
unencryptedFile = ZeteticApplication.getInstance().getDatabasePath("plaintext.db");
48+
ZeteticApplication.getInstance().deleteDatabase("plaintext.db");
49+
database.execSQL(String.format("ATTACH DATABASE '%s' as plaintext KEY '';",
50+
unencryptedFile.getAbsolutePath()));
51+
database.query("SELECT sqlcipher_export('plaintext');");
52+
database.execSQL("DETACH DATABASE plaintext;");
53+
helper.close();
54+
55+
passphrase = SQLiteDatabase.getBytes("".toCharArray());
56+
factory = new SupportFactory(passphrase);
57+
cfg =
58+
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
59+
.name(unencryptedFile.getAbsolutePath())
60+
.callback(new SupportSQLiteOpenHelper.Callback(1) {
61+
@Override
62+
public void onCreate(SupportSQLiteDatabase db) {
63+
// unused
64+
}
65+
66+
@Override
67+
public void onUpgrade(SupportSQLiteDatabase db, int oldVersion,
68+
int newVersion) {
69+
// unused
70+
}
71+
})
72+
.build();
73+
helper = factory.create(cfg);
74+
SupportSQLiteDatabase unencryptedDatabase = helper.getWritableDatabase();
75+
76+
Cursor cursor = unencryptedDatabase.query("select * from t1;", new String[]{});
77+
String a = "";
78+
String b = "";
79+
while(cursor.moveToNext()){
80+
a = cursor.getString(0);
81+
b = cursor.getString(1);
82+
}
83+
cursor.close();
84+
helper.close();
85+
86+
result.setResult(a.equals("one for the money") &&
87+
b.equals("two for the show"));
88+
89+
unencryptedFile.delete();
90+
91+
return result;
92+
}
93+
94+
@Override
95+
public String getName() {
96+
return "Export to Unencrypted Database";
97+
}
98+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package net.zetetic.tests.support;
2+
3+
import android.database.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.sqlcipher.database.SupportFactory;
6+
import net.zetetic.ZeteticApplication;
7+
import net.zetetic.tests.SQLCipherTest;
8+
import net.zetetic.tests.TestResult;
9+
import java.io.File;
10+
import java.io.IOException;
11+
import androidx.sqlite.db.SupportSQLiteDatabase;
12+
import androidx.sqlite.db.SupportSQLiteOpenHelper;
13+
14+
public class ImportUnencryptedDatabaseTest implements ISupportTest {
15+
@Override
16+
public TestResult run() {
17+
TestResult result = new TestResult(getName(), false);
18+
19+
File unencryptedDatabase = ZeteticApplication.getInstance().getDatabasePath("unencrypted.db");
20+
File encryptedDatabase = ZeteticApplication.getInstance().getDatabasePath("encrypted.db");
21+
22+
try {
23+
ZeteticApplication.getInstance().extractAssetToDatabaseDirectory("unencrypted.db");
24+
25+
SupportFactory factory = new SupportFactory(null);
26+
SupportSQLiteOpenHelper.Configuration cfg =
27+
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
28+
.name(unencryptedDatabase.getAbsolutePath())
29+
.callback(new SupportSQLiteOpenHelper.Callback(1) {
30+
@Override
31+
public void onCreate(SupportSQLiteDatabase db) {
32+
// unused
33+
}
34+
35+
@Override
36+
public void onUpgrade(SupportSQLiteDatabase db, int oldVersion,
37+
int newVersion) {
38+
// unused
39+
}
40+
})
41+
.build();
42+
SupportSQLiteOpenHelper helper = factory.create(cfg);
43+
SupportSQLiteDatabase database = helper.getWritableDatabase();
44+
45+
database.execSQL(String.format("ATTACH DATABASE '%s' AS encrypted KEY '%s'",
46+
encryptedDatabase.getAbsolutePath(), ZeteticApplication.DATABASE_PASSWORD));
47+
database.execSQL("select sqlcipher_export('encrypted')");
48+
database.execSQL("DETACH DATABASE encrypted");
49+
helper.close();
50+
51+
byte[] passphrase = SQLiteDatabase.getBytes(ZeteticApplication.DATABASE_PASSWORD.toCharArray());
52+
53+
factory = new SupportFactory(passphrase);
54+
cfg =
55+
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
56+
.name(encryptedDatabase.getAbsolutePath())
57+
.callback(new SupportSQLiteOpenHelper.Callback(1) {
58+
@Override
59+
public void onCreate(SupportSQLiteDatabase db) {
60+
// unused
61+
}
62+
63+
@Override
64+
public void onUpgrade(SupportSQLiteDatabase db, int oldVersion,
65+
int newVersion) {
66+
// unused
67+
}
68+
})
69+
.build();
70+
helper = factory.create(cfg);
71+
database = helper.getWritableDatabase();
72+
73+
Cursor cursor = database.query("select * from t1", new String[]{});
74+
cursor.moveToFirst();
75+
String a = cursor.getString(0);
76+
String b = cursor.getString(1);
77+
cursor.close();
78+
helper.close();
79+
80+
result.setResult(a.equals("one for the money") &&
81+
b.equals("two for the show"));
82+
return result;
83+
} catch (IOException e) {
84+
result.setResult(false);
85+
86+
return result;
87+
}
88+
finally {
89+
unencryptedDatabase.delete();
90+
encryptedDatabase.delete();
91+
}
92+
}
93+
94+
@Override
95+
public String getName() {
96+
return "Import Unencrypted Database Test";
97+
}
98+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
import net.sqlcipher.database.SQLiteDatabaseHook;
5+
import net.sqlcipher.database.SupportFactory;
6+
import net.zetetic.ZeteticApplication;
7+
import net.zetetic.tests.SQLCipherTest;
8+
import net.zetetic.tests.TestResult;
9+
import java.io.File;
10+
import androidx.sqlite.db.SupportSQLiteDatabase;
11+
import androidx.sqlite.db.SupportSQLiteOpenHelper;
12+
13+
public class MigrationUserVersion implements ISupportTest {
14+
15+
@Override
16+
public TestResult run() {
17+
TestResult result = new TestResult(getName(), false);
18+
19+
try {
20+
ZeteticApplication.getInstance().extractAssetToDatabaseDirectory(ZeteticApplication.ONE_X_USER_VERSION_DATABASE);
21+
22+
File sourceDatabase = ZeteticApplication.getInstance().getDatabasePath(ZeteticApplication.ONE_X_USER_VERSION_DATABASE);
23+
byte[] passphrase = SQLiteDatabase.getBytes(ZeteticApplication.DATABASE_PASSWORD.toCharArray());
24+
SupportFactory factory = new SupportFactory(passphrase, "PRAGMA cipher_migrate;");
25+
SupportSQLiteOpenHelper.Configuration cfg =
26+
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
27+
.name(sourceDatabase.getAbsolutePath())
28+
.callback(new SupportSQLiteOpenHelper.Callback(5) {
29+
@Override
30+
public void onCreate(SupportSQLiteDatabase db) {
31+
// unused
32+
}
33+
34+
@Override
35+
public void onUpgrade(SupportSQLiteDatabase db, int oldVersion,
36+
int newVersion) {
37+
// unused
38+
}
39+
})
40+
.build();
41+
SupportSQLiteOpenHelper helper = factory.create(cfg);
42+
SupportSQLiteDatabase database = helper.getWritableDatabase();
43+
44+
boolean status = database.getVersion() > 0;
45+
helper.close();
46+
result.setResult(status);
47+
48+
return result;
49+
50+
} catch (Exception e) {
51+
result.setResult(false);
52+
result.setMessage(e.getMessage());
53+
54+
return result;
55+
}
56+
}
57+
58+
@Override
59+
public String getName() {
60+
return "Migrate Database 1.x to Current with user_version";
61+
}
62+
}

0 commit comments

Comments
 (0)