OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 package org.chromium.chrome.browser.payments; |
| 6 |
| 7 import android.content.pm.ActivityInfo; |
| 8 import android.content.pm.PackageInfo; |
| 9 import android.content.pm.ResolveInfo; |
| 10 import android.content.pm.Signature; |
| 11 |
| 12 import org.junit.Test; |
| 13 import org.junit.runner.RunWith; |
| 14 import org.mockito.Mockito; |
| 15 import org.robolectric.RobolectricTestRunner; |
| 16 import org.robolectric.annotation.Config; |
| 17 |
| 18 import org.chromium.chrome.browser.payments.PaymentManifestVerifier.ManifestVeri
fyCallback; |
| 19 import org.chromium.components.payments.PaymentManifestDownloader; |
| 20 import org.chromium.components.payments.PaymentManifestParser; |
| 21 import org.chromium.payments.mojom.PaymentManifestSection; |
| 22 |
| 23 import java.net.URI; |
| 24 import java.net.URISyntaxException; |
| 25 import java.util.ArrayList; |
| 26 import java.util.List; |
| 27 |
| 28 /** A test for the verifier of a payment app manifest. */ |
| 29 @RunWith(RobolectricTestRunner.class) |
| 30 @Config(sdk = 21, manifest = Config.NONE) |
| 31 public class PaymentManifestVerifierTest { |
| 32 private final URI mMethodName; |
| 33 private final ResolveInfo mAlicePay; |
| 34 private final ResolveInfo mBobPay; |
| 35 private final List<ResolveInfo> mMatchingApps; |
| 36 private final PaymentManifestDownloader mDownloader; |
| 37 private final PaymentManifestParser mAnyAppAllowedParser; |
| 38 private final PackageManagerDelegate mPackageManagerDelegate; |
| 39 private final ManifestVerifyCallback mCallback; |
| 40 |
| 41 public PaymentManifestVerifierTest() throws URISyntaxException { |
| 42 mMethodName = new URI("https://example.com"); |
| 43 |
| 44 mAlicePay = new ResolveInfo(); |
| 45 mAlicePay.activityInfo = new ActivityInfo(); |
| 46 mAlicePay.activityInfo.packageName = "com.alicepay.app"; |
| 47 |
| 48 mBobPay = new ResolveInfo(); |
| 49 mBobPay.activityInfo = new ActivityInfo(); |
| 50 mBobPay.activityInfo.packageName = "com.bobpay.app"; |
| 51 |
| 52 mMatchingApps = new ArrayList<>(); |
| 53 mMatchingApps.add(mAlicePay); |
| 54 mMatchingApps.add(mBobPay); |
| 55 |
| 56 mDownloader = new PaymentManifestDownloader(null) { |
| 57 @Override |
| 58 public void download(URI uri, ManifestDownloadCallback callback) { |
| 59 callback.onManifestDownloadSuccess("some content here"); |
| 60 } |
| 61 }; |
| 62 |
| 63 mAnyAppAllowedParser = new PaymentManifestParser() { |
| 64 @Override |
| 65 public void parse(String content, ManifestParseCallback callback) { |
| 66 PaymentManifestSection[] manifest = new PaymentManifestSection[1
]; |
| 67 manifest[0] = new PaymentManifestSection(); |
| 68 manifest[0].packageName = "*"; |
| 69 callback.onManifestParseSuccess(manifest); |
| 70 } |
| 71 }; |
| 72 |
| 73 mPackageManagerDelegate = Mockito.mock(PackageManagerDelegate.class); |
| 74 |
| 75 PackageInfo bobPayPackageInfo = new PackageInfo(); |
| 76 bobPayPackageInfo.versionCode = 10; |
| 77 bobPayPackageInfo.signatures = new Signature[1]; |
| 78 bobPayPackageInfo.signatures[0] = new Signature("01020304050607080900"); |
| 79 Mockito.when(mPackageManagerDelegate.getPackageInfoWithSignatures("com.b
obpay.app")) |
| 80 .thenReturn(bobPayPackageInfo); |
| 81 |
| 82 PackageInfo alicePayPackageInfo = new PackageInfo(); |
| 83 alicePayPackageInfo.versionCode = 10; |
| 84 alicePayPackageInfo.signatures = new Signature[1]; |
| 85 alicePayPackageInfo.signatures[0] = new Signature("ABCDEFABCDEFABCDEFAB"
); |
| 86 Mockito.when(mPackageManagerDelegate.getPackageInfoWithSignatures("com.a
licepay.app")) |
| 87 .thenReturn(alicePayPackageInfo); |
| 88 |
| 89 mCallback = Mockito.mock(ManifestVerifyCallback.class); |
| 90 } |
| 91 |
| 92 @Test |
| 93 public void testUnableToDownload() { |
| 94 PaymentManifestVerifier verifier = new PaymentManifestVerifier( |
| 95 mMethodName, mMatchingApps, new PaymentManifestDownloader(null)
{ |
| 96 @Override |
| 97 public void download(URI uri, ManifestDownloadCallback callb
ack) { |
| 98 callback.onManifestDownloadFailure(); |
| 99 } |
| 100 }, mAnyAppAllowedParser, mPackageManagerDelegate, mCallback); |
| 101 |
| 102 verifier.verify(); |
| 103 |
| 104 Mockito.verify(mCallback).onInvalidManifest(mMethodName); |
| 105 } |
| 106 |
| 107 @Test |
| 108 public void testUnableToParse() { |
| 109 PaymentManifestVerifier verifier = new PaymentManifestVerifier( |
| 110 mMethodName, mMatchingApps, mDownloader, new PaymentManifestPars
er() { |
| 111 @Override |
| 112 public void parse(String content, ManifestParseCallback call
back) { |
| 113 callback.onManifestParseFailure(); |
| 114 } |
| 115 }, mPackageManagerDelegate, mCallback); |
| 116 |
| 117 verifier.verify(); |
| 118 |
| 119 Mockito.verify(mCallback).onInvalidManifest(mMethodName); |
| 120 } |
| 121 |
| 122 @Test |
| 123 public void testAnyAppAllowed() { |
| 124 PaymentManifestVerifier verifier = new PaymentManifestVerifier(mMethodNa
me, mMatchingApps, |
| 125 mDownloader, mAnyAppAllowedParser, mPackageManagerDelegate, mCal
lback); |
| 126 |
| 127 verifier.verify(); |
| 128 |
| 129 Mockito.verify(mCallback).onValidPaymentApp(mMethodName, mAlicePay); |
| 130 Mockito.verify(mCallback).onValidPaymentApp(mMethodName, mBobPay); |
| 131 } |
| 132 |
| 133 @Test |
| 134 public void testBobPayAllowed() { |
| 135 PaymentManifestVerifier verifier = new PaymentManifestVerifier( |
| 136 mMethodName, mMatchingApps, mDownloader, new PaymentManifestPars
er() { |
| 137 @Override |
| 138 public void parse(String content, ManifestParseCallback call
back) { |
| 139 PaymentManifestSection[] manifest = new PaymentManifestS
ection[1]; |
| 140 manifest[0] = new PaymentManifestSection(); |
| 141 manifest[0].packageName = "com.bobpay.app"; |
| 142 manifest[0].version = 10; |
| 143 // SHA256("01020304050607080900"): |
| 144 manifest[0].sha256CertFingerprints = new byte[][] {{(byt
e) 0x9A, |
| 145 (byte) 0x89, (byte) 0xC6, (byte) 0x8C, (byte) 0x
4C, (byte) 0x5E, |
| 146 (byte) 0x28, (byte) 0xB8, (byte) 0xC4, (byte) 0x
A5, (byte) 0x56, |
| 147 (byte) 0x76, (byte) 0x73, (byte) 0xD4, (byte) 0x
62, (byte) 0xFF, |
| 148 (byte) 0xF5, (byte) 0x15, (byte) 0xDB, (byte) 0x
46, (byte) 0x11, |
| 149 (byte) 0x6F, (byte) 0x99, (byte) 0x00, (byte) 0x
62, (byte) 0x4D, |
| 150 (byte) 0x09, (byte) 0xC4, (byte) 0x74, (byte) 0x
F5, (byte) 0x93, |
| 151 (byte) 0xFB}}; |
| 152 callback.onManifestParseSuccess(manifest); |
| 153 } |
| 154 }, mPackageManagerDelegate, mCallback); |
| 155 |
| 156 verifier.verify(); |
| 157 |
| 158 Mockito.verify(mCallback).onInvalidPaymentApp(mMethodName, mAlicePay); |
| 159 Mockito.verify(mCallback).onValidPaymentApp(mMethodName, mBobPay); |
| 160 } |
| 161 } |
OLD | NEW |