Skip to content

Commit 5ba1046

Browse files
committed
add more tests
1 parent 83301ef commit 5ba1046

File tree

5 files changed

+156
-12
lines changed

5 files changed

+156
-12
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package net.zetetic.tests.support;
2+
3+
import android.util.Log;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.sqlcipher.database.SQLiteDatabaseHook;
6+
import net.sqlcipher.database.SupportFactory;
7+
import net.zetetic.QueryHelper;
8+
import net.zetetic.ZeteticApplication;
9+
import net.zetetic.tests.SQLCipherTest;
10+
import net.zetetic.tests.TestResult;
11+
import java.io.File;
12+
import androidx.sqlite.db.SupportSQLiteDatabase;
13+
import androidx.sqlite.db.SupportSQLiteOpenHelper;
14+
15+
public class CipherMigrateTest implements ISupportTest {
16+
17+
File olderFormatDatabase = ZeteticApplication.getInstance().getDatabasePath("2x.db");
18+
19+
@Override
20+
public TestResult run() {
21+
TestResult result = new TestResult(getName(), false);
22+
23+
final boolean[] status = {false};
24+
try {
25+
ZeteticApplication.getInstance().extractAssetToDatabaseDirectory("2x.db");
26+
SQLiteDatabaseHook hook = new SQLiteDatabaseHook() {
27+
public void preKey(SQLiteDatabase database) {}
28+
public void postKey(SQLiteDatabase database) {
29+
String value = QueryHelper.singleValueFromQuery(database, "PRAGMA cipher_migrate");
30+
status[0] = Integer.valueOf(value) == 0;
31+
}
32+
};
33+
byte[] passphrase = SQLiteDatabase.getBytes(ZeteticApplication.DATABASE_PASSWORD.toCharArray());
34+
SupportFactory factory = new SupportFactory(passphrase, hook);
35+
SupportSQLiteOpenHelper.Configuration cfg =
36+
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
37+
.name(olderFormatDatabase.getAbsolutePath())
38+
.callback(new SupportSQLiteOpenHelper.Callback(1) {
39+
@Override
40+
public void onCreate(SupportSQLiteDatabase db) {
41+
// unused
42+
}
43+
44+
@Override
45+
public void onUpgrade(SupportSQLiteDatabase db, int oldVersion,
46+
int newVersion) {
47+
// unused
48+
}
49+
})
50+
.build();
51+
SupportSQLiteOpenHelper helper = factory.create(cfg);
52+
SupportSQLiteDatabase database = helper.getWritableDatabase();
53+
54+
if(database != null){
55+
database.close();
56+
}
57+
} catch (Exception e) {
58+
Log.i("CipherMigrateTest", "error", e);
59+
}
60+
result.setResult(status[0]);
61+
62+
return result;
63+
}
64+
65+
@Override
66+
public String getName() {
67+
return "Cipher Migrate Test";
68+
}
69+
}

app/src/main/java/net/zetetic/tests/support/ExportToUnencryptedDatabase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ public void onUpgrade(SupportSQLiteDatabase db, int oldVersion,
4848
ZeteticApplication.getInstance().deleteDatabase("plaintext.db");
4949
database.execSQL(String.format("ATTACH DATABASE '%s' as plaintext KEY '';",
5050
unencryptedFile.getAbsolutePath()));
51-
database.query("SELECT sqlcipher_export('plaintext');");
51+
((SQLiteDatabase)database).rawExecSQL("SELECT sqlcipher_export('plaintext');");
5252
database.execSQL("DETACH DATABASE plaintext;");
5353
helper.close();
5454

55-
passphrase = SQLiteDatabase.getBytes("".toCharArray());
55+
passphrase = new byte[0];
5656
factory = new SupportFactory(passphrase);
5757
cfg =
5858
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())

app/src/main/java/net/zetetic/tests/support/ImportUnencryptedDatabaseTest.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public TestResult run() {
2121

2222
try {
2323
ZeteticApplication.getInstance().extractAssetToDatabaseDirectory("unencrypted.db");
24-
25-
SupportFactory factory = new SupportFactory(null);
24+
byte[] passphrase = new byte[0];
25+
SupportFactory factory = new SupportFactory(passphrase);
2626
SupportSQLiteOpenHelper.Configuration cfg =
2727
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
2828
.name(unencryptedDatabase.getAbsolutePath())
@@ -44,11 +44,12 @@ public void onUpgrade(SupportSQLiteDatabase db, int oldVersion,
4444

4545
database.execSQL(String.format("ATTACH DATABASE '%s' AS encrypted KEY '%s'",
4646
encryptedDatabase.getAbsolutePath(), ZeteticApplication.DATABASE_PASSWORD));
47-
database.execSQL("select sqlcipher_export('encrypted')");
47+
// database.execSQL("select sqlcipher_export('encrypted')");
48+
((SQLiteDatabase)database).rawExecSQL("select sqlcipher_export('encrypted')");
4849
database.execSQL("DETACH DATABASE encrypted");
4950
helper.close();
5051

51-
byte[] passphrase = SQLiteDatabase.getBytes(ZeteticApplication.DATABASE_PASSWORD.toCharArray());
52+
passphrase = SQLiteDatabase.getBytes(ZeteticApplication.DATABASE_PASSWORD.toCharArray());
5253

5354
factory = new SupportFactory(passphrase);
5455
cfg =
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package net.zetetic.tests.support;
2+
3+
import android.util.Log;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.sqlcipher.database.SQLiteException;
6+
import net.sqlcipher.database.SQLiteOpenHelper;
7+
import net.sqlcipher.database.SupportFactory;
8+
import net.zetetic.ZeteticApplication;
9+
import net.zetetic.tests.SQLCipherTest;
10+
import androidx.sqlite.db.SupportSQLiteDatabase;
11+
import androidx.sqlite.db.SupportSQLiteOpenHelper;
12+
13+
public class ReadableWritableInvalidPasswordTest extends SupportTest {
14+
15+
@Override
16+
public boolean execute(SQLiteDatabase database) {
17+
database.execSQL("CREATE TABLE tt(data);");
18+
database.execSQL("INSERT INTO tt VALUES(?)", new Object[]{"test data"});
19+
database.close();
20+
21+
try {
22+
SupportSQLiteDatabase db = open("invalid password");
23+
Log.e(ZeteticApplication.TAG, "NOT EXPECTED: successfully opened writable encrypted database with invalid password");
24+
db.close();
25+
return false;
26+
} catch (SQLiteException e) {
27+
Log.v(ZeteticApplication.TAG, "EXPECTED RESULT: SQLiteException when opening writable encrypted database with invalid password OK", e);
28+
} catch (Exception e) {
29+
Log.e(ZeteticApplication.TAG, "NOT EXPECTED: other exception when opening writable encrypted database with invalid password", e);
30+
return false;
31+
}
32+
33+
try {
34+
SupportSQLiteDatabase db = open("");
35+
Log.e(ZeteticApplication.TAG, "NOT EXPECTED: successfully opened writable encrypted database with blank password String");
36+
db.close();
37+
return false;
38+
} catch (SQLiteException e) {
39+
Log.v(ZeteticApplication.TAG, "EXPECTED RESULT: SQLiteException when opening writable encrypted database with blank password String OK", e);
40+
} catch (Exception e) {
41+
Log.e(ZeteticApplication.TAG, "NOT EXPECTED: other exception when opening writable encrypted database with blank password String", e);
42+
return false;
43+
}
44+
45+
return true;
46+
}
47+
48+
@Override
49+
public String getName() {
50+
return "Readable/Writable Invalid Password Test";
51+
}
52+
53+
private SupportSQLiteDatabase open(String password) {
54+
byte[] passphrase = SQLiteDatabase.getBytes(password.toCharArray());
55+
SupportFactory
56+
factory = new SupportFactory(passphrase);
57+
SupportSQLiteOpenHelper.Configuration cfg =
58+
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
59+
.name(ZeteticApplication.DATABASE_NAME)
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+
SupportSQLiteOpenHelper helper = factory.create(cfg);
74+
return helper.getWritableDatabase();
75+
}
76+
}

app/src/main/java/net/zetetic/tests/support/SupportSuiteRunner.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ private List<ISupportTest> getTestsToRun() {
125125
tests.add(new QueryFloatToStringTest());
126126
tests.add(new ClosedDatabaseTest());
127127
tests.add(new AttachDatabaseTest());
128-
// TODO rewrite tests.add(new CipherMigrateTest());
128+
tests.add(new CipherMigrateTest());
129129
tests.add(new GetTypeFromCrossProcessCursorWrapperTest());
130130
tests.add(new InvalidPasswordTest());
131131
tests.add(new NullQueryResultTest());
@@ -140,16 +140,15 @@ private List<ISupportTest> getTestsToRun() {
140140
tests.add(new AES128CipherTest());
141141
tests.add(new MigrateDatabaseFrom1xFormatToCurrentFormat());
142142
tests.add(new StatusMemoryUsedTest());
143-
// TODO update tests.add(new ImportUnencryptedDatabaseTest());
143+
tests.add(new ImportUnencryptedDatabaseTest());
144144
tests.add(new FullTextSearchTest());
145145
tests.add(new ReadableDatabaseTest());
146146
tests.add(new AutoVacuumOverReadTest());
147147
tests.add(new ReadableWritableAccessTest());
148148
tests.add(new CursorAccessTest());
149149
tests.add(new VerifyOnUpgradeIsCalledTest());
150150
tests.add(new MigrationUserVersion());
151-
// TODO update tests.add(new ExportToUnencryptedDatabase());
152-
// TODO rewrite tests.add(new QueryNonEncryptedDatabaseTest());
151+
tests.add(new ExportToUnencryptedDatabase());
153152
tests.add(new EnableForeignKeySupportTest());
154153
tests.add(new NestedTransactionsTest());
155154
tests.add(new ComputeKDFTest());
@@ -161,8 +160,7 @@ private List<ISupportTest> getTestsToRun() {
161160
tests.add(new TextAsIntegerTest());
162161
tests.add(new TextAsDoubleTest());
163162
tests.add(new TextAsLongTest());
164-
// TODO rewrite tests.add(new CreateNonEncryptedDatabaseTest());
165-
// TODO rewrite tests.add(new ReadableWritableInvalidPasswordTest());
163+
tests.add(new ReadableWritableInvalidPasswordTest());
166164
tests.add(new CopyStringToBufferTestFloatSmallBuffer());
167165
tests.add(new CopyStringToBufferTestFloatLargeBuffer());
168166
tests.add(new CopyStringToBufferTestIntegerSmallBuffer());

0 commit comments

Comments
 (0)