diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2014-07-10 01:38:57 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2014-07-10 01:38:57 +0200 |
commit | 90f546a4e877972d6686745aabfac1fca1178b8c (patch) | |
tree | 67ea73808bc4577009ff8d2f9bd9a8e3e7e46ae5 /OpenKeychain-Test/src/test/java/org | |
parent | 0afd979665ca17ece970df5a5f0b466346be72f1 (diff) | |
download | open-keychain-90f546a4e877972d6686745aabfac1fca1178b8c.tar.gz open-keychain-90f546a4e877972d6686745aabfac1fca1178b8c.tar.bz2 open-keychain-90f546a4e877972d6686745aabfac1fca1178b8c.zip |
tests: add testSubkeyAdd
Diffstat (limited to 'OpenKeychain-Test/src/test/java/org')
-rw-r--r-- | OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/support/KeyringTestingHelper.java | 23 | ||||
-rw-r--r-- | OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/tests/PgpKeyOperationTest.java (renamed from OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/tests/UncachedKeyringTest.java) | 58 |
2 files changed, 64 insertions, 17 deletions
diff --git a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/support/KeyringTestingHelper.java b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/support/KeyringTestingHelper.java index 4c779d2b7..ac9bed898 100644 --- a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/support/KeyringTestingHelper.java +++ b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/support/KeyringTestingHelper.java @@ -30,6 +30,7 @@ import java.io.InputStream; import java.util.Collection; import java.util.HashSet; import java.util.Set; +import java.util.SortedSet; /** * Helper for tests of the Keyring import in ProviderHelper. @@ -66,10 +67,15 @@ public class KeyringTestingHelper { return saveSuccess; } - public static class Packet { - int tag; - int length; - byte[] buf; + public static class Packet implements Comparable<Packet> { + public int position; + public int tag; + public int length; + public byte[] buf; + + public int compareTo(Packet other) { + return Integer.compare(position, other.position); + } public boolean equals(Object other) { return other instanceof Packet && Arrays.areEqual(this.buf, ((Packet) other).buf); @@ -81,7 +87,8 @@ public class KeyringTestingHelper { } } - public static boolean diffKeyrings(byte[] ringA, byte[] ringB, Set<Packet> onlyA, Set<Packet> onlyB) + public static boolean diffKeyrings(byte[] ringA, byte[] ringB, + SortedSet<Packet> onlyA, SortedSet<Packet> onlyB) throws IOException { InputStream streamA = new ByteArrayInputStream(ringA); InputStream streamB = new ByteArrayInputStream(ringB); @@ -89,18 +96,22 @@ public class KeyringTestingHelper { HashSet<Packet> a = new HashSet<Packet>(), b = new HashSet<Packet>(); Packet p; + int pos = 0; while(true) { p = readPacket(streamA); if (p == null) { break; } + p.position = pos++; a.add(p); } + pos = 0; while(true) { p = readPacket(streamB); if (p == null) { break; } + p.position = pos++; b.add(p); } @@ -109,7 +120,7 @@ public class KeyringTestingHelper { onlyB.addAll(b); onlyB.removeAll(a); - return onlyA.isEmpty() && onlyB.isEmpty(); + return !onlyA.isEmpty() || !onlyB.isEmpty(); } private static Packet readPacket(InputStream in) throws IOException { diff --git a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/tests/UncachedKeyringTest.java b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/tests/PgpKeyOperationTest.java index 1c8e6daf7..4d422f257 100644 --- a/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/tests/UncachedKeyringTest.java +++ b/OpenKeychain-Test/src/test/java/org/sufficientlysecure/keychain/tests/PgpKeyOperationTest.java @@ -7,24 +7,31 @@ import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.robolectric.*; import org.robolectric.shadows.ShadowLog; +import org.spongycastle.bcpg.PacketTags; import org.spongycastle.bcpg.sig.KeyFlags; import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.Constants.choice.algorithm; import org.sufficientlysecure.keychain.pgp.PgpKeyOperation; import org.sufficientlysecure.keychain.pgp.UncachedKeyRing; +import org.sufficientlysecure.keychain.pgp.WrappedSecretKeyRing; import org.sufficientlysecure.keychain.service.OperationResultParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel; +import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyAdd; import org.sufficientlysecure.keychain.support.KeyringBuilder; import org.sufficientlysecure.keychain.support.KeyringTestingHelper; +import org.sufficientlysecure.keychain.support.KeyringTestingHelper.Packet; import org.sufficientlysecure.keychain.support.TestDataUtil; -import java.util.HashSet; +import java.util.Iterator; +import java.util.TreeSet; @RunWith(RobolectricTestRunner.class) @org.robolectric.annotation.Config(emulateSdk = 18) // Robolectric doesn't yet support 19 -public class UncachedKeyringTest { +public class PgpKeyOperationTest { - static UncachedKeyRing staticRing; - UncachedKeyRing ring; + static WrappedSecretKeyRing staticRing; + WrappedSecretKeyRing ring; + PgpKeyOperation op; @BeforeClass public static void setUpOnce() throws Exception { SaveKeyringParcel parcel = new SaveKeyringParcel(); @@ -36,27 +43,56 @@ public class UncachedKeyringTest { PgpKeyOperation op = new PgpKeyOperation(null); OperationResultParcel.OperationLog log = new OperationResultParcel.OperationLog(); - staticRing = op.createSecretKeyRing(parcel, log, 0); + UncachedKeyRing ring = op.createSecretKeyRing(parcel, log, 0); + staticRing = new WrappedSecretKeyRing(ring.getEncoded(), false, 0); } @Before public void setUp() throws Exception { // show Log.x messages in system.out ShadowLog.stream = System.out; ring = staticRing; + + op = new PgpKeyOperation(null); } @Test - public void testCreateKey() throws Exception { + public void testCreatedKey() throws Exception { // parcel.addSubKeys.add(new SubkeyAdd(algorithm.rsa, 1024, KeyFlags.SIGN_DATA, null)); Assert.assertNotNull("key creation failed", ring); Assert.assertEquals("incorrect primary user id", - "swagerinho", ring.getPublicKey().getPrimaryUserId()); + "swagerinho", ring.getPrimaryUserId()); Assert.assertEquals("wrong number of subkeys", - 1, ring.getAvailableSubkeys().size()); + 1, ring.getUncachedKeyRing().getAvailableSubkeys().size()); + + } + + @Test + public void testSubkeyAdd() throws Exception { + + SaveKeyringParcel parcel = new SaveKeyringParcel(); + parcel.mMasterKeyId = ring.getMasterKeyId(); + parcel.mFingerprint = ring.getUncached().getFingerprint(); + parcel.addSubKeys.add(new SubkeyAdd(algorithm.rsa, 1024, KeyFlags.SIGN_DATA, null)); + + OperationResultParcel.OperationLog log = new OperationResultParcel.OperationLog(); + UncachedKeyRing modified = op.modifySecretKeyRing(ring, parcel, "swag", log, 0); + + Assert.assertNotNull("key modification failed", modified); + + TreeSet<Packet> onlyA = new TreeSet<Packet>(); + TreeSet<Packet> onlyB = new TreeSet<Packet>(); + Assert.assertTrue("keyrings do not differ", KeyringTestingHelper.diffKeyrings( + ring.getUncached().getEncoded(), modified.getEncoded(), onlyA, onlyB)); + + Assert.assertEquals("no extra packets in original", onlyA.size(), 0); + Assert.assertEquals("two extra packets in modified", onlyB.size(), 2); + Iterator<Packet> it = onlyB.iterator(); + Assert.assertEquals("first new packet must be secret subkey", it.next().tag, PacketTags.SECRET_SUBKEY); + Assert.assertEquals("second new packet must be signature", it.next().tag, PacketTags.SIGNATURE); } @@ -73,9 +109,9 @@ public class UncachedKeyringTest { throw new AssertionError("Canonicalization failed; messages: [" + log + "]"); } - HashSet onlyA = new HashSet<KeyringTestingHelper.Packet>(); - HashSet onlyB = new HashSet<KeyringTestingHelper.Packet>(); - Assert.assertTrue(KeyringTestingHelper.diffKeyrings( + TreeSet onlyA = new TreeSet<KeyringTestingHelper.Packet>(); + TreeSet onlyB = new TreeSet<KeyringTestingHelper.Packet>(); + Assert.assertTrue("keyrings differ", !KeyringTestingHelper.diffKeyrings( expectedKeyRing.getEncoded(), expectedKeyRing.getEncoded(), onlyA, onlyB)); } |