| 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);
|
| + }
|
| +}
|
|
|