mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-23 17:22:16 -05:00
Merge pull request #672 from artbristol/functional-testing
VERY basic test for save keyring
This commit is contained in:
commit
4cc127e460
@ -28,21 +28,7 @@ dependencies {
|
|||||||
testCompile 'org.robolectric:robolectric:2.3'
|
testCompile 'org.robolectric:robolectric:2.3'
|
||||||
testCompile 'com.squareup:fest-android:1.0.8'
|
testCompile 'com.squareup:fest-android:1.0.8'
|
||||||
testCompile 'com.google.android:android:4.1.1.4'
|
testCompile 'com.google.android:android:4.1.1.4'
|
||||||
testCompile 'com.android.support:support-v4:19.1.0'
|
// compile dependencies are automatically also included in testCompile
|
||||||
testCompile 'com.android.support:appcompat-v7:19.1.0'
|
|
||||||
testCompile project(':extern:openpgp-api-lib')
|
|
||||||
testCompile project(':extern:openkeychain-api-lib')
|
|
||||||
testCompile project(':extern:html-textview')
|
|
||||||
testCompile project(':extern:StickyListHeaders:library')
|
|
||||||
testCompile project(':extern:AndroidBootstrap:AndroidBootstrap')
|
|
||||||
testCompile project(':extern:zxing-qr-code')
|
|
||||||
testCompile project(':extern:zxing-android-integration')
|
|
||||||
testCompile project(':extern:spongycastle:core')
|
|
||||||
testCompile project(':extern:spongycastle:pg')
|
|
||||||
testCompile project(':extern:spongycastle:pkix')
|
|
||||||
testCompile project(':extern:spongycastle:prov')
|
|
||||||
testCompile project(':extern:AppMsg:library')
|
|
||||||
testCompile project(':extern:SuperToasts:supertoasts')
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
package org.sufficientlysecure.keychain.pgp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No-op implementation of Progressable
|
||||||
|
*/
|
||||||
|
public class NullProgressable implements Progressable {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProgress(String message, int current, int total) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProgress(int resourceId, int current, int total) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProgress(int current, int total) {
|
||||||
|
}
|
||||||
|
}
|
@ -29,6 +29,7 @@ import android.support.v4.util.LongSparseArray;
|
|||||||
|
|
||||||
import org.sufficientlysecure.keychain.Constants;
|
import org.sufficientlysecure.keychain.Constants;
|
||||||
import org.sufficientlysecure.keychain.pgp.KeyRing;
|
import org.sufficientlysecure.keychain.pgp.KeyRing;
|
||||||
|
import org.sufficientlysecure.keychain.pgp.NullProgressable;
|
||||||
import org.sufficientlysecure.keychain.pgp.Progressable;
|
import org.sufficientlysecure.keychain.pgp.Progressable;
|
||||||
import org.sufficientlysecure.keychain.pgp.WrappedPublicKey;
|
import org.sufficientlysecure.keychain.pgp.WrappedPublicKey;
|
||||||
import org.sufficientlysecure.keychain.service.OperationResultParcel.LogType;
|
import org.sufficientlysecure.keychain.service.OperationResultParcel.LogType;
|
||||||
@ -655,19 +656,7 @@ public class ProviderHelper {
|
|||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public SaveKeyringResult savePublicKeyRing(UncachedKeyRing keyRing) {
|
public SaveKeyringResult savePublicKeyRing(UncachedKeyRing keyRing) {
|
||||||
return savePublicKeyRing(keyRing, new Progressable() {
|
return savePublicKeyRing(keyRing, new NullProgressable());
|
||||||
@Override
|
|
||||||
public void setProgress(String message, int current, int total) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setProgress(int resourceId, int current, int total) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setProgress(int current, int total) {
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Save a public keyring into the database.
|
/** Save a public keyring into the database.
|
||||||
|
@ -0,0 +1,56 @@
|
|||||||
|
package org.sufficientlysecure.keychain.testsupport;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
import org.sufficientlysecure.keychain.pgp.NullProgressable;
|
||||||
|
import org.sufficientlysecure.keychain.pgp.UncachedKeyRing;
|
||||||
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
|
import org.sufficientlysecure.keychain.remote.AppSettings;
|
||||||
|
import org.sufficientlysecure.keychain.service.OperationResults;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper for tests of the Keyring import in ProviderHelper.
|
||||||
|
*/
|
||||||
|
public class KeyringTestingHelper {
|
||||||
|
|
||||||
|
private final Context context;
|
||||||
|
|
||||||
|
public KeyringTestingHelper(Context robolectricContext) {
|
||||||
|
this.context = robolectricContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean addKeyring() throws Exception {
|
||||||
|
|
||||||
|
ProviderHelper providerHelper = new ProviderHelper(context);
|
||||||
|
|
||||||
|
// providerHelper.insertApiApp(new AppSettings("robo-test-package", new byte[]{5, 4, 3, 2, 1}));
|
||||||
|
|
||||||
|
byte[] data = TestDataUtil.readFully(getClass().getResourceAsStream("/public-key-for-sample.blob"));
|
||||||
|
UncachedKeyRing ring = UncachedKeyRing.decodeFromData(data);
|
||||||
|
long masterKeyId = ring.getMasterKeyId();
|
||||||
|
|
||||||
|
// Should throw an exception; key is not yet saved
|
||||||
|
retrieveKeyAndExpectNotFound(providerHelper, masterKeyId);
|
||||||
|
|
||||||
|
OperationResults.SaveKeyringResult saveKeyringResult = providerHelper.savePublicKeyRing(ring, new NullProgressable());
|
||||||
|
|
||||||
|
boolean saveSuccess = saveKeyringResult.success();
|
||||||
|
|
||||||
|
// Now re-retrieve the saved key. Should not throw an exception.
|
||||||
|
providerHelper.getWrappedPublicKeyRing(masterKeyId);
|
||||||
|
|
||||||
|
// A different ID should still fail
|
||||||
|
retrieveKeyAndExpectNotFound(providerHelper, masterKeyId - 1);
|
||||||
|
|
||||||
|
return saveSuccess;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void retrieveKeyAndExpectNotFound(ProviderHelper providerHelper, long masterKeyId) {
|
||||||
|
try {
|
||||||
|
providerHelper.getWrappedPublicKeyRing(masterKeyId);
|
||||||
|
throw new AssertionError("Was expecting the previous call to fail!");
|
||||||
|
} catch (ProviderHelper.NotFoundException expectedException) {
|
||||||
|
// good
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,19 +1,14 @@
|
|||||||
package org.sufficientlysecure.keychain.testsupport;
|
package org.sufficientlysecure.keychain.testsupport;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.net.Uri;
|
|
||||||
|
|
||||||
import org.sufficientlysecure.keychain.pgp.PgpDecryptVerify;
|
import org.sufficientlysecure.keychain.pgp.PgpDecryptVerify;
|
||||||
import org.sufficientlysecure.keychain.pgp.PgpDecryptVerifyResult;
|
import org.sufficientlysecure.keychain.pgp.PgpDecryptVerifyResult;
|
||||||
import org.sufficientlysecure.keychain.pgp.WrappedPublicKeyRing;
|
|
||||||
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
import org.sufficientlysecure.keychain.util.InputData;
|
import org.sufficientlysecure.keychain.util.InputData;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
@ -25,7 +20,7 @@ public class PgpVerifyTestingHelper {
|
|||||||
private final Context context;
|
private final Context context;
|
||||||
|
|
||||||
public PgpVerifyTestingHelper(Context robolectricContext) {
|
public PgpVerifyTestingHelper(Context robolectricContext) {
|
||||||
this.context=robolectricContext;
|
this.context = robolectricContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int doTestFile(String testFileName) throws Exception {
|
public int doTestFile(String testFileName) throws Exception {
|
||||||
@ -37,7 +32,7 @@ public class PgpVerifyTestingHelper {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
byte[] sampleInputBytes = readFully(getClass().getResourceAsStream(testFileName));
|
byte[] sampleInputBytes = TestDataUtil.readFully(getClass().getResourceAsStream(testFileName));
|
||||||
|
|
||||||
InputStream sampleInput = new ByteArrayInputStream(sampleInputBytes);
|
InputStream sampleInput = new ByteArrayInputStream(sampleInputBytes);
|
||||||
|
|
||||||
@ -51,35 +46,4 @@ public class PgpVerifyTestingHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static class ProviderHelperStub extends ProviderHelper {
|
|
||||||
public ProviderHelperStub(Context context) {
|
|
||||||
super(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public WrappedPublicKeyRing getWrappedPublicKeyRing(Uri id) throws NotFoundException {
|
|
||||||
try {
|
|
||||||
byte[] data = readFully(getClass().getResourceAsStream("/public-key-for-sample.blob"));
|
|
||||||
return new WrappedPublicKeyRing(data, false, 0);
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte[] readFully(InputStream input) throws IOException
|
|
||||||
{
|
|
||||||
byte[] buffer = new byte[8192];
|
|
||||||
int bytesRead;
|
|
||||||
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
|
||||||
while ((bytesRead = input.read(buffer)) != -1)
|
|
||||||
{
|
|
||||||
output.write(buffer, 0, bytesRead);
|
|
||||||
}
|
|
||||||
return output.toByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package org.sufficientlysecure.keychain.testsupport;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
|
|
||||||
|
import org.sufficientlysecure.keychain.pgp.WrappedPublicKeyRing;
|
||||||
|
import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by art on 21/06/14.
|
||||||
|
*/
|
||||||
|
class ProviderHelperStub extends ProviderHelper {
|
||||||
|
public ProviderHelperStub(Context context) {
|
||||||
|
super(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WrappedPublicKeyRing getWrappedPublicKeyRing(Uri id) throws NotFoundException {
|
||||||
|
byte[] data = TestDataUtil.readFully(getClass().getResourceAsStream("/public-key-for-sample.blob"));
|
||||||
|
return new WrappedPublicKeyRing(data, false, 0);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package org.sufficientlysecure.keychain.testsupport;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Misc support functions. Would just use Guava / Apache Commons but
|
||||||
|
* avoiding extra dependencies.
|
||||||
|
*/
|
||||||
|
public class TestDataUtil {
|
||||||
|
public static byte[] readFully(InputStream input) {
|
||||||
|
byte[] buffer = new byte[8192];
|
||||||
|
int bytesRead;
|
||||||
|
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
||||||
|
try {
|
||||||
|
while ((bytesRead = input.read(buffer)) != -1) {
|
||||||
|
output.write(buffer, 0, bytesRead);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return output.toByteArray();
|
||||||
|
}
|
||||||
|
}
|
@ -9,7 +9,7 @@ import org.sufficientlysecure.keychain.testsupport.PgpVerifyTestingHelper;
|
|||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@org.robolectric.annotation.Config(emulateSdk = 18) // Robolectric doesn't yet support 19
|
@org.robolectric.annotation.Config(emulateSdk = 18) // Robolectric doesn't yet support 19
|
||||||
public class RoboTest {
|
public class PgpDecryptVerifyTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testVerifySuccess() throws Exception {
|
public void testVerifySuccess() throws Exception {
|
@ -0,0 +1,20 @@
|
|||||||
|
package tests;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.robolectric.*;
|
||||||
|
import org.openintents.openpgp.OpenPgpSignatureResult;
|
||||||
|
import org.sufficientlysecure.keychain.testsupport.KeyringTestingHelper;
|
||||||
|
import org.sufficientlysecure.keychain.testsupport.PgpVerifyTestingHelper;
|
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner.class)
|
||||||
|
@org.robolectric.annotation.Config(emulateSdk = 18) // Robolectric doesn't yet support 19
|
||||||
|
public class ProviderHelperKeyringTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSavePublicKeyring() throws Exception {
|
||||||
|
Assert.assertTrue(new KeyringTestingHelper(Robolectric.application).addKeyring());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user