Skip to content

Commit e453d41

Browse files
Additional tests for WAL/integrity check/foreign key support
1 parent ac2bf8c commit e453d41

19 files changed

+882
-258
lines changed

.idea/workspace.xml

Lines changed: 398 additions & 258 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
2.43 KB
Binary file not shown.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package net.zetetic.tests;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
5+
public class CheckIsDatabaseIntegrityOkTest extends SQLCipherTest {
6+
@Override
7+
public boolean execute(SQLiteDatabase database) {
8+
return database.isDatabaseIntegrityOk();
9+
}
10+
11+
@Override
12+
public String getName() {
13+
return "Check Database Integrity";
14+
}
15+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package net.zetetic.tests;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
5+
public class CheckIsWriteAheadLoggingEnabledTest extends SQLCipherTest {
6+
@Override
7+
public boolean execute(SQLiteDatabase database) {
8+
database.enableWriteAheadLogging();
9+
boolean statusWhenEnabled = database.isWriteAheadLoggingEnabled();
10+
database.disableWriteAheadLogging();
11+
boolean statusWhenDisabled = database.isWriteAheadLoggingEnabled();
12+
return statusWhenEnabled && !statusWhenDisabled;
13+
}
14+
15+
@Override
16+
public String getName() {
17+
return "Test isWriteAheadLoggingEnabled";
18+
}
19+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package net.zetetic.tests;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
import net.zetetic.QueryHelper;
5+
6+
public class DisableWriteAheadLoggingTest extends SQLCipherTest {
7+
@Override
8+
public boolean execute(SQLiteDatabase database) {
9+
boolean result = database.enableWriteAheadLogging();
10+
String currentMode = getJournalModeState(database);
11+
if(!result || !currentMode.equals("wal")) return false;
12+
database.disableWriteAheadLogging();
13+
currentMode = getJournalModeState(database);
14+
return currentMode.equals("delete");
15+
}
16+
17+
private String getJournalModeState(SQLiteDatabase database){
18+
return QueryHelper.singleValueFromQuery(database, "PRAGMA journal_mode;");
19+
}
20+
21+
@Override
22+
public String getName() {
23+
return "Disable WAL mode";
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package net.zetetic.tests;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
import net.zetetic.QueryHelper;
5+
6+
public class EnableForeignKeyConstraintsTest extends SQLCipherTest {
7+
@Override
8+
public boolean execute(SQLiteDatabase database) {
9+
String initialState = getForeignKeyState(database);
10+
if(!initialState.equals("0")) return false;
11+
database.setForeignKeyConstraintsEnabled(true);
12+
String currentState = getForeignKeyState(database);
13+
if(!currentState.equals("1")) return false;
14+
return true;
15+
}
16+
17+
private String getForeignKeyState(SQLiteDatabase database){
18+
return QueryHelper.singleValueFromQuery(database, "PRAGMA foreign_keys");
19+
}
20+
21+
@Override
22+
public String getName() {
23+
return "Enable Foreign Key Constraints";
24+
}
25+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package net.zetetic.tests;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
import net.zetetic.QueryHelper;
5+
6+
public class EnableWriteAheadLoggingTest extends SQLCipherTest {
7+
@Override
8+
public boolean execute(SQLiteDatabase database) {
9+
boolean result = database.enableWriteAheadLogging();
10+
String currentMode = QueryHelper.singleValueFromQuery(database, "PRAGMA journal_mode;");
11+
return result && currentMode.equals("wal");
12+
}
13+
14+
@Override
15+
public String getName() {
16+
return "Enable WAL mode";
17+
}
18+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package net.zetetic.tests;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
5+
public class ForeignKeyConstraintsEnabledWithTransactionTest extends SQLCipherTest {
6+
@Override
7+
public boolean execute(SQLiteDatabase database) {
8+
database.beginTransaction();
9+
try {
10+
database.setForeignKeyConstraintsEnabled(true);
11+
}catch (IllegalStateException ex){
12+
if(ex.getMessage().equals("Foreign key constraints may not be changed while in a transaction")) {
13+
return true;
14+
}
15+
}
16+
return false;
17+
}
18+
19+
@Override
20+
public String getName() {
21+
return "Disallow foreign key constraints in transaction";
22+
}
23+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package net.zetetic.tests;
2+
3+
import android.util.Pair;
4+
5+
import net.sqlcipher.database.SQLiteDatabase;
6+
import net.zetetic.ZeteticApplication;
7+
8+
import java.io.File;
9+
import java.util.List;
10+
import java.util.UUID;
11+
12+
public class GetAttachedDatabasesTest extends SQLCipherTest {
13+
@Override
14+
public boolean execute(SQLiteDatabase database) {
15+
UUID id = UUID.randomUUID();
16+
File databasePath = ZeteticApplication.getInstance().getDatabasePath(id.toString());
17+
List<Pair<String, String>> attached = database.getAttachedDbs();
18+
boolean initialAttach = attached.size() == 1 && attached.get(0).first.equals("main");
19+
database.execSQL("ATTACH database ? as foo;",
20+
new Object[]{databasePath.getAbsolutePath()});
21+
attached = database.getAttachedDbs();
22+
return initialAttach && attached.size() == 2;
23+
}
24+
25+
@Override
26+
public String getName() {
27+
return "Get Attached Databases Test";
28+
}
29+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package net.zetetic.tests;
2+
3+
import android.content.Context;
4+
5+
import net.sqlcipher.database.SQLiteDatabase;
6+
import net.sqlcipher.database.SQLiteOpenHelper;
7+
import net.zetetic.ZeteticApplication;
8+
9+
import java.io.File;
10+
import java.util.UUID;
11+
12+
public class SQLiteOpenHelperConfigureTest extends SQLCipherTest {
13+
@Override
14+
public boolean execute(SQLiteDatabase database) {
15+
16+
UUID name = UUID.randomUUID();
17+
File databasePath = ZeteticApplication.getInstance().getDatabasePath(name.toString());
18+
ConfigureHelper helper = new ConfigureHelper(ZeteticApplication.getInstance(),
19+
databasePath.getAbsolutePath());
20+
helper.getWritableDatabase("foo");
21+
return helper.onConfigureCalled;
22+
}
23+
24+
@Override
25+
public String getName() {
26+
return "SQLiteOpenHelper Configure Test";
27+
}
28+
29+
class ConfigureHelper extends SQLiteOpenHelper {
30+
31+
public boolean onConfigureCalled = false;
32+
33+
public ConfigureHelper(Context context, String databasePath) {
34+
super(context, ZeteticApplication.DATABASE_NAME, null, 1);
35+
}
36+
37+
public void onConfigure(SQLiteDatabase database){
38+
onConfigureCalled = true;
39+
}
40+
41+
@Override
42+
public void onCreate(SQLiteDatabase sqLiteDatabase) {
43+
44+
}
45+
46+
@Override
47+
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
48+
}
49+
}
50+
51+
}

0 commit comments

Comments
 (0)