Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Unified Diff: chrome/android/junit/src/org/chromium/chrome/browser/payments/PaymentManifestVerifierTest.java

Issue 2645813006: Download web payment manifests. (Closed)
Patch Set: Rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698