Skip to content

Commit 295ac99

Browse files
Merge support API tests
2 parents 18a5c35 + 60f0f93 commit 295ac99

File tree

109 files changed

+5332
-13
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+5332
-13
lines changed

app/build.gradle

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
apply plugin: 'com.android.application'
22

33
android {
4-
compileSdkVersion 26
5-
buildToolsVersion '28.0.3'
4+
compileSdkVersion 29
5+
66
defaultConfig {
77
applicationId "net.zetetic.sqlcipher.test"
8-
minSdkVersion 14
9-
targetSdkVersion 26
8+
minSdkVersion 26
9+
targetSdkVersion 29
1010
versionCode 1
1111
versionName "1.0"
1212
}
@@ -28,5 +28,12 @@ dependencies {
2828
implementation (name: 'android-database-sqlcipher-4.2.0', ext: 'aar')
2929

3030
// For testing on remote AAR references:
31-
//implementation 'net.zetetic:android-database-sqlcipher:4.2.0@aar'
31+
implementation files('libs/android-database-sqlcipher-4.2.0.aar')
32+
implementation "androidx.sqlite:sqlite:2.0.1"
33+
implementation "androidx.room:room-runtime:2.1.0"
34+
annotationProcessor "androidx.room:room-compiler:2.1.0"
35+
36+
37+
// For testing on remote AAR references:
38+
//implementation 'net.zetetic:android-database-sqlcipher:4.0.1@aar'
3239
}
5.47 KB
Binary file not shown.

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();

app/src/main/java/net/zetetic/activities/TestRunnerSelectionActivity.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ protected void onCreate(Bundle savedInstanceState) {
1616
setContentView(R.layout.test_runners);
1717
Button behaviorSuite = findViewById(R.id.run_behavior_test_suite);
1818
Button scrollingCursorSuite = findViewById(R.id.run_scrolling_test_suite);
19+
Button supportSuite = findViewById(R.id.run_support_test_suite);
1920
if(behaviorSuite != null){
2021
behaviorSuite.setOnClickListener(new View.OnClickListener() {
2122
@Override
@@ -36,5 +37,15 @@ public void onClick(View view) {
3637
}
3738
});
3839
}
40+
if(supportSuite != null){
41+
supportSuite.setOnClickListener(new View.OnClickListener() {
42+
@Override
43+
public void onClick(View view) {
44+
Intent intent = new Intent(TestRunnerSelectionActivity.this,
45+
TestSuiteBehaviorsActivity.class).putExtra(TestSuiteBehaviorsActivity.EXTRA_IS_SUPPORT, true);
46+
startActivity(intent);
47+
}
48+
});
49+
}
3950
}
4051
}

app/src/main/java/net/zetetic/activities/TestSuiteBehaviorsActivity.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515
import net.zetetic.tests.ResultNotifier;
1616
import net.zetetic.tests.TestResult;
1717
import net.zetetic.tests.TestSuiteRunner;
18+
import net.zetetic.tests.support.SupportSuiteRunner;
1819

1920
import java.io.File;
2021
import java.io.FileOutputStream;
2122
import java.util.ArrayList;
2223
import java.util.List;
2324

2425
public class TestSuiteBehaviorsActivity extends Activity implements ResultNotifier {
25-
26+
static final String EXTRA_IS_SUPPORT = "isSupport";
2627
private String TAG = this.getClass().getSimpleName();
2728
ListView resultsView;
2829
List<TestResult> results;
@@ -50,7 +51,13 @@ public void onButtonClick(View view) {
5051
findViewById(R.id.executeSuite).setEnabled(false);
5152
resultsView = (ListView) findViewById(R.id.test_suite_results);
5253
ZeteticApplication.getInstance().setCurrentActivity(this);
53-
new TestSuiteRunner(this).execute(this);
54+
55+
if (getIntent().getBooleanExtra(EXTRA_IS_SUPPORT, false)) {
56+
new SupportSuiteRunner(this).execute(this);
57+
}
58+
else {
59+
new TestSuiteRunner(this).execute(this);
60+
}
5461
}
5562

5663
@Override

app/src/main/java/net/zetetic/tests/RowColumnBuilder.java renamed to app/src/main/java/net/zetetic/tests/RowColumnValueBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package net.zetetic.tests;
22

3-
interface RowColumnValueBuilder {
3+
public interface RowColumnValueBuilder {
44
Object buildRowColumnValue(String[] columns, int row, int column);
55
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package net.zetetic.tests.support;
2+
3+
import android.database.Cursor;
4+
import net.sqlcipher.database.SQLiteDatabase;
5+
import net.sqlcipher.database.SQLiteDatabaseHook;
6+
import net.sqlcipher.database.SupportFactory;
7+
import net.zetetic.ZeteticApplication;
8+
import net.zetetic.tests.TestResult;
9+
import androidx.sqlite.db.SupportSQLiteDatabase;
10+
import androidx.sqlite.db.SupportSQLiteOpenHelper;
11+
12+
public class AES128CipherTest implements ISupportTest {
13+
public TestResult run() {
14+
TestResult result = new TestResult(getName(), false);
15+
16+
byte[] passphrase = SQLiteDatabase.getBytes(ZeteticApplication.DATABASE_PASSWORD.toCharArray());
17+
SQLiteDatabaseHook hook = new SQLiteDatabaseHook() {
18+
@Override
19+
public void preKey(SQLiteDatabase sqLiteDatabase) {
20+
21+
}
22+
23+
@Override
24+
public void postKey(SQLiteDatabase sqLiteDatabase) {
25+
sqLiteDatabase.rawExecSQL("PRAGMA cipher = 'aes-128-cbc'");
26+
}
27+
};
28+
SupportFactory factory = new SupportFactory(passphrase, hook);
29+
SupportSQLiteOpenHelper.Configuration cfg =
30+
SupportSQLiteOpenHelper.Configuration.builder(ZeteticApplication.getInstance())
31+
.name(ZeteticApplication.DATABASE_NAME)
32+
.callback(new SupportSQLiteOpenHelper.Callback(1) {
33+
@Override
34+
public void onCreate(SupportSQLiteDatabase db) {
35+
// unused
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+
String actual = "";
49+
String value = "hey";
50+
database.execSQL("create table t1(a)");
51+
database.execSQL("insert into t1(a) values (?)", new Object[]{value});
52+
Cursor c = database.query("select * from t1", new String[]{});
53+
if(c != null){
54+
c.moveToFirst();
55+
actual = c.getString(0);
56+
c.close();
57+
}
58+
result.setResult(actual.equals(value));
59+
60+
return result;
61+
}
62+
63+
@Override
64+
public String getName() {
65+
return "AES-128 Bit Cipher Test";
66+
}
67+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
import net.zetetic.QueryHelper;
5+
import net.zetetic.ZeteticApplication;
6+
import net.zetetic.tests.SQLCipherTest;
7+
import java.io.File;
8+
9+
public class AttachDatabaseTest extends SupportTest {
10+
@Override
11+
public boolean execute(SQLiteDatabase database) {
12+
boolean status;
13+
String password = "test123";
14+
File fooDatabase = ZeteticApplication.getInstance().getDatabasePath("foo.db");
15+
if(fooDatabase.exists()){
16+
fooDatabase.delete();
17+
}
18+
database.execSQL("ATTACH database ? AS encrypted KEY ?", new Object[]{fooDatabase.getAbsolutePath(), password});
19+
database.execSQL("create table encrypted.t1(a,b);");
20+
database.execSQL("insert into encrypted.t1(a,b) values(?,?);", new Object[]{"one for the money", "two for the show"});
21+
int rowCount = QueryHelper.singleIntegerValueFromQuery(database, "select count(*) from encrypted.t1;");
22+
status = rowCount == 1;
23+
database.close();
24+
return status;
25+
}
26+
27+
@Override
28+
public String getName() {
29+
return "Attach database test";
30+
}
31+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
import net.zetetic.ZeteticApplication;
5+
import net.zetetic.tests.SQLCipherTest;
6+
import java.io.File;
7+
8+
public class AttachNewDatabaseTest extends SupportTest {
9+
@Override
10+
public boolean execute(SQLiteDatabase encryptedDatabase) {
11+
12+
encryptedDatabase.execSQL("create table t1(a,b)");
13+
encryptedDatabase.execSQL("insert into t1(a,b) values(?, ?)", new Object[]{"one", "two"});
14+
15+
String newKey = "foo";
16+
File newDatabasePath = ZeteticApplication.getInstance().getDatabasePath("normal.db");
17+
String attachCommand = "ATTACH DATABASE ? as encrypted KEY ?";
18+
String createCommand = "create table encrypted.t1(a,b)";
19+
String insertCommand = "insert into encrypted.t1 SELECT * from t1";
20+
String detachCommand = "DETACH DATABASE encrypted";
21+
encryptedDatabase.execSQL(attachCommand, new Object[]{newDatabasePath.getAbsolutePath(), newKey});
22+
encryptedDatabase.execSQL(createCommand);
23+
encryptedDatabase.execSQL(insertCommand);
24+
encryptedDatabase.execSQL(detachCommand);
25+
26+
return true;
27+
}
28+
29+
@Override
30+
protected void tearDown(SQLiteDatabase database) {
31+
File newDatabasePath = ZeteticApplication.getInstance().getDatabasePath("normal.db");
32+
newDatabasePath.delete();
33+
}
34+
35+
@Override
36+
public String getName() {
37+
return "Attach New Database Test";
38+
}
39+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package net.zetetic.tests.support;
2+
3+
import net.sqlcipher.database.SQLiteDatabase;
4+
import net.zetetic.tests.SQLCipherTest;
5+
6+
public class AutoVacuumOverReadTest extends SupportTest {
7+
@Override
8+
public boolean execute(SQLiteDatabase database) {
9+
10+
database.execSQL("BEGIN EXCLUSIVE");
11+
12+
String createTableMessages = "create table Message (_id integer primary key autoincrement, syncServerId text, syncServerTimeStamp integer, displayName text, timeStamp integer, subject text, flagRead integer, flagLoaded integer, flagFavorite integer, flagAttachment integer, flags integer, clientId integer, messageId text, mailboxKey integer, accountKey integer, fromList text, toList text, ccList text, bccList text, replyToList text, meetingInfo text);";
13+
String createTableMessagesUpdates = "create table Message_Updates (_id integer unique, syncServerId text, syncServerTimeStamp integer, displayName text, timeStamp integer, subject text, flagRead integer, flagLoaded integer, flagFavorite integer, flagAttachment integer, flags integer, clientId integer, messageId text, mailboxKey integer, accountKey integer, fromList text, toList text, ccList text, bccList text, replyToList text, meetingInfo text);";
14+
String createTableMessageDeletes = "create table Message_Deletes (_id integer unique, syncServerId text, syncServerTimeStamp integer, displayName text, timeStamp integer, subject text, flagRead integer, flagLoaded integer, flagFavorite integer, flagAttachment integer, flags integer, clientId integer, messageId text, mailboxKey integer, accountKey integer, fromList text, toList text, ccList text, bccList text, replyToList text, meetingInfo text);";
15+
16+
database.execSQL(createTableMessageDeletes);
17+
database.execSQL(createTableMessagesUpdates);
18+
database.execSQL(createTableMessages);
19+
20+
database.execSQL("COMMIT TRANSACTION");
21+
22+
return true;
23+
}
24+
25+
@Override
26+
public String getName() {
27+
return "Autovacuum Over Read Test";
28+
}
29+
}

0 commit comments

Comments
 (0)