Index: chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java |
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..564d708bb8182dfa472229522feb52e43f128b4b |
--- /dev/null |
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java |
@@ -0,0 +1,161 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.payments; |
+ |
+import android.content.pm.ActivityInfo; |
+import android.content.pm.PackageInfo; |
+import android.content.pm.ResolveInfo; |
+import android.content.pm.Signature; |
+ |
+import org.junit.Test; |
+import org.junit.runner.RunWith; |
+import org.mockito.Mockito; |
+import org.robolectric.RobolectricTestRunner; |
+import org.robolectric.annotation.Config; |
+ |
+import org.chromium.chrome.browser.payments.PaymentManifestVerifier.ManifestVerifyCallback; |
+import org.chromium.components.payments.PaymentManifestDownloader; |
+import org.chromium.components.payments.PaymentManifestParser; |
+import org.chromium.payments.mojom.PaymentManifestSection; |
+ |
+import java.net.URI; |
+import java.net.URISyntaxException; |
+import java.util.ArrayList; |
+import java.util.List; |
+ |
+/** A test for the verifier of a payment app manifest. */ |
+@RunWith(RobolectricTestRunner.class) |
+@Config(sdk = 21, manifest = Config.NONE) |
+public class PaymentManifestVerifierTest { |
+ private final URI mMethodName; |
+ private final ResolveInfo mAlicePay; |
+ private final ResolveInfo mBobPay; |
+ private final List<ResolveInfo> mMatchingApps; |
+ private final PaymentManifestDownloader mDownloader; |
+ private final PaymentManifestParser mAnyAppAllowedParser; |
+ private final PackageManagerDelegate mPackageManagerDelegate; |
+ private final ManifestVerifyCallback mCallback; |
+ |
+ public PaymentManifestVerifierTest() throws URISyntaxException { |
+ mMethodName = new URI("https://example.com"); |
+ |
+ mAlicePay = new ResolveInfo(); |
+ mAlicePay.activityInfo = new ActivityInfo(); |
+ mAlicePay.activityInfo.packageName = "com.alicepay.app"; |
+ |
+ mBobPay = new ResolveInfo(); |
+ mBobPay.activityInfo = new ActivityInfo(); |
+ mBobPay.activityInfo.packageName = "com.bobpay.app"; |
+ |
+ mMatchingApps = new ArrayList<>(); |
+ mMatchingApps.add(mAlicePay); |
+ mMatchingApps.add(mBobPay); |
+ |
+ mDownloader = new PaymentManifestDownloader(null) { |
+ @Override |
+ public void download(URI uri, ManifestDownloadCallback callback) { |
+ callback.onManifestDownloadSuccess("some content here"); |
+ } |
+ }; |
+ |
+ mAnyAppAllowedParser = new PaymentManifestParser() { |
+ @Override |
+ public void parse(String content, ManifestParseCallback callback) { |
+ PaymentManifestSection[] manifest = new PaymentManifestSection[1]; |
+ manifest[0] = new PaymentManifestSection(); |
+ manifest[0].packageName = "*"; |
+ callback.onManifestParseSuccess(manifest); |
+ } |
+ }; |
+ |
+ mPackageManagerDelegate = Mockito.mock(PackageManagerDelegate.class); |
+ |
+ PackageInfo bobPayPackageInfo = new PackageInfo(); |
+ bobPayPackageInfo.versionCode = 10; |
+ bobPayPackageInfo.signatures = new Signature[1]; |
+ bobPayPackageInfo.signatures[0] = new Signature("01020304050607080900"); |
+ Mockito.when(mPackageManagerDelegate.getPackageInfoWithSignatures("com.bobpay.app")) |
+ .thenReturn(bobPayPackageInfo); |
+ |
+ PackageInfo alicePayPackageInfo = new PackageInfo(); |
+ alicePayPackageInfo.versionCode = 10; |
+ alicePayPackageInfo.signatures = new Signature[1]; |
+ alicePayPackageInfo.signatures[0] = new Signature("ABCDEFABCDEFABCDEFAB"); |
+ Mockito.when(mPackageManagerDelegate.getPackageInfoWithSignatures("com.alicepay.app")) |
+ .thenReturn(alicePayPackageInfo); |
+ |
+ mCallback = Mockito.mock(ManifestVerifyCallback.class); |
+ } |
+ |
+ @Test |
+ public void testUnableToDownload() { |
+ PaymentManifestVerifier verifier = new PaymentManifestVerifier( |
+ mMethodName, mMatchingApps, new PaymentManifestDownloader(null) { |
+ @Override |
+ public void download(URI uri, ManifestDownloadCallback callback) { |
+ callback.onManifestDownloadFailure(); |
+ } |
+ }, mAnyAppAllowedParser, mPackageManagerDelegate, mCallback); |
+ |
+ verifier.verify(); |
+ |
+ Mockito.verify(mCallback).onInvalidManifest(mMethodName); |
+ } |
+ |
+ @Test |
+ public void testUnableToParse() { |
+ PaymentManifestVerifier verifier = new PaymentManifestVerifier( |
+ mMethodName, mMatchingApps, mDownloader, new PaymentManifestParser() { |
+ @Override |
+ public void parse(String content, ManifestParseCallback callback) { |
+ callback.onManifestParseFailure(); |
+ } |
+ }, mPackageManagerDelegate, mCallback); |
+ |
+ verifier.verify(); |
+ |
+ Mockito.verify(mCallback).onInvalidManifest(mMethodName); |
+ } |
+ |
+ @Test |
+ public void testAnyAppAllowed() { |
+ PaymentManifestVerifier verifier = new PaymentManifestVerifier(mMethodName, mMatchingApps, |
+ mDownloader, mAnyAppAllowedParser, mPackageManagerDelegate, mCallback); |
+ |
+ verifier.verify(); |
+ |
+ Mockito.verify(mCallback).onValidPaymentApp(mMethodName, mAlicePay); |
+ Mockito.verify(mCallback).onValidPaymentApp(mMethodName, mBobPay); |
+ } |
+ |
+ @Test |
+ public void testBobPayAllowed() { |
+ PaymentManifestVerifier verifier = new PaymentManifestVerifier( |
+ mMethodName, mMatchingApps, mDownloader, new PaymentManifestParser() { |
+ @Override |
+ public void parse(String content, ManifestParseCallback callback) { |
+ PaymentManifestSection[] manifest = new PaymentManifestSection[1]; |
+ manifest[0] = new PaymentManifestSection(); |
+ manifest[0].packageName = "com.bobpay.app"; |
+ manifest[0].version = 10; |
+ // SHA256("01020304050607080900"): |
+ manifest[0].sha256CertFingerprints = new byte[][] {{(byte) 0x9A, |
+ (byte) 0x89, (byte) 0xC6, (byte) 0x8C, (byte) 0x4C, (byte) 0x5E, |
+ (byte) 0x28, (byte) 0xB8, (byte) 0xC4, (byte) 0xA5, (byte) 0x56, |
+ (byte) 0x76, (byte) 0x73, (byte) 0xD4, (byte) 0x62, (byte) 0xFF, |
+ (byte) 0xF5, (byte) 0x15, (byte) 0xDB, (byte) 0x46, (byte) 0x11, |
+ (byte) 0x6F, (byte) 0x99, (byte) 0x00, (byte) 0x62, (byte) 0x4D, |
+ (byte) 0x09, (byte) 0xC4, (byte) 0x74, (byte) 0xF5, (byte) 0x93, |
+ (byte) 0xFB}}; |
+ callback.onManifestParseSuccess(manifest); |
+ } |
+ }, mPackageManagerDelegate, mCallback); |
+ |
+ verifier.verify(); |
+ |
+ Mockito.verify(mCallback).onInvalidPaymentApp(mMethodName, mAlicePay); |
+ Mockito.verify(mCallback).onValidPaymentApp(mMethodName, mBobPay); |
+ } |
+} |