| Index: chrome/android/junit/src/org/chromium/chrome/browser/payments/ManifestParserUnitTest.java
|
| diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/payments/ManifestParserUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/payments/ManifestParserUnitTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..02539bcf83051c534248e887a35c5612b31b25b5
|
| --- /dev/null
|
| +++ b/chrome/android/junit/src/org/chromium/chrome/browser/payments/ManifestParserUnitTest.java
|
| @@ -0,0 +1,263 @@
|
| +// 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 org.junit.Assert;
|
| +import org.junit.Test;
|
| +import org.junit.runner.RunWith;
|
| +import org.robolectric.annotation.Config;
|
| +
|
| +import org.chromium.chrome.browser.payments.ManifestParser.Manifest;
|
| +import org.chromium.chrome.browser.payments.ManifestParser.ManifestParseCallback;
|
| +import org.chromium.testing.local.LocalRobolectricTestRunner;
|
| +
|
| +import java.util.HashSet;
|
| +import java.util.List;
|
| +import java.util.Set;
|
| +
|
| +/**
|
| + * Unit tests for parsing manifests of native Android payment apps.
|
| + */
|
| +@RunWith(LocalRobolectricTestRunner.class)
|
| +@Config(manifest = Config.NONE)
|
| +public class ManifestParserUnitTest {
|
| + private static class Callback implements ManifestParseCallback {
|
| + public List<Manifest> manifests;
|
| + public boolean success;
|
| +
|
| + @Override
|
| + public void onManifestParseSuccess(List<Manifest> manifests) {
|
| + success = true;
|
| + this.manifests = manifests;
|
| + }
|
| +
|
| + @Override
|
| + public void onManifestParseFailure() {
|
| + success = false;
|
| + }
|
| + }
|
| +
|
| + @Test
|
| + public void testEmptyString() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testInvalidJson() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{[", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testEmptyJsonObject() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{}", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testAndroidIsNotAnArray() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": 1}", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testAndroidIsEmptyArray() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": []}", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testAndroidListItemIsNotObject() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": [\"yes\"]}", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testAndroidListItemIsEmptyObject() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": [{}]}", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testAnyPackageAllowed() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": [{\"package\": \"*\"}]}", callback);
|
| +
|
| + Assert.assertTrue(callback.success);
|
| + Assert.assertNotNull(callback.manifests);
|
| + Assert.assertFalse(callback.manifests.isEmpty());
|
| + Assert.assertEquals(callback.manifests.size(), 1);
|
| +
|
| + Manifest manifest = callback.manifests.get(0);
|
| +
|
| + Assert.assertNotNull(manifest);
|
| + Assert.assertNotNull(manifest.packageName);
|
| + Assert.assertEquals(manifest.packageName, "*");
|
| + }
|
| +
|
| + @Test
|
| + public void testNoFingerprints() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\","
|
| + + "\"version\": 1}]}", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testFingerprintsIsNotArray() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1,"
|
| + + "\"sha256_cert_fingerprints\": 0}]}", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testFingerprintsIsEmptyArray() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1,"
|
| + + "\"sha256_cert_fingerprints\": []}]}", callback);
|
| +
|
| + Assert.assertFalse(callback.success);
|
| + }
|
| +
|
| + @Test
|
| + public void testFingerprintsAreNotStrings() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1,"
|
| + + "\"sha256_cert_fingerprints\": [0]}]}", callback);
|
| +
|
| + Assert.assertTrue(callback.success);
|
| + Assert.assertNotNull(callback.manifests);
|
| + Assert.assertFalse(callback.manifests.isEmpty());
|
| + Assert.assertEquals(callback.manifests.size(), 1);
|
| +
|
| + Manifest manifest = callback.manifests.get(0);
|
| +
|
| + Assert.assertNotNull(manifest);
|
| + Assert.assertNotNull(manifest.packageName);
|
| + Assert.assertEquals(manifest.packageName, "com.bobpay");
|
| + Assert.assertEquals(manifest.version, 1);
|
| + Assert.assertNotNull(manifest.sha256CertFingerprints);
|
| + Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty());
|
| + Assert.assertEquals(manifest.sha256CertFingerprints.size(), 1);
|
| +
|
| + String fingerprint = manifest.sha256CertFingerprints.iterator().next();
|
| +
|
| + Assert.assertEquals(fingerprint, "0"); // Built-in JSON parser coerces the value to string.
|
| + }
|
| +
|
| + @Test
|
| + public void testOneFingerprint() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1,"
|
| + + "\"sha256_cert_fingerprints\": [\"1234567890\"]}]}", callback);
|
| +
|
| + Assert.assertTrue(callback.success);
|
| + Assert.assertNotNull(callback.manifests);
|
| + Assert.assertFalse(callback.manifests.isEmpty());
|
| + Assert.assertEquals(callback.manifests.size(), 1);
|
| +
|
| + Manifest manifest = callback.manifests.get(0);
|
| +
|
| + Assert.assertNotNull(manifest);
|
| + Assert.assertNotNull(manifest.packageName);
|
| + Assert.assertEquals(manifest.packageName, "com.bobpay");
|
| + Assert.assertEquals(manifest.version, 1);
|
| + Assert.assertNotNull(manifest.sha256CertFingerprints);
|
| + Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty());
|
| + Assert.assertEquals(manifest.sha256CertFingerprints.size(), 1);
|
| +
|
| + String fingerprint = manifest.sha256CertFingerprints.iterator().next();
|
| +
|
| + Assert.assertEquals(fingerprint, "1234567890");
|
| + }
|
| +
|
| + @Test
|
| + public void testTwoFingerprints() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": [{\"package\": \"com.bobpay\", \"version\": 1,"
|
| + + "\"sha256_cert_fingerprints\": [\"1234567890\", \"0987654321\"]}]}", callback);
|
| +
|
| + Assert.assertTrue(callback.success);
|
| + Assert.assertNotNull(callback.manifests);
|
| + Assert.assertFalse(callback.manifests.isEmpty());
|
| + Assert.assertEquals(callback.manifests.size(), 1);
|
| +
|
| + Manifest manifest = callback.manifests.get(0);
|
| +
|
| + Assert.assertNotNull(manifest);
|
| + Assert.assertNotNull(manifest.packageName);
|
| + Assert.assertEquals(manifest.packageName, "com.bobpay");
|
| + Assert.assertEquals(manifest.version, 1);
|
| + Assert.assertNotNull(manifest.sha256CertFingerprints);
|
| + Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty());
|
| + Assert.assertEquals(manifest.sha256CertFingerprints.size(), 2);
|
| +
|
| + Set<String> expected = new HashSet<>();
|
| + expected.add("1234567890");
|
| + expected.add("0987654321");
|
| +
|
| + Assert.assertEquals(manifest.sha256CertFingerprints, expected);
|
| + }
|
| +
|
| + @Test
|
| + public void testTwoSections() {
|
| + Callback callback = new Callback();
|
| + ManifestParser.parse("{\"android\": ["
|
| + + "{"
|
| + + " \"package\": \"com.bobpay\","
|
| + + " \"version\": 321,"
|
| + + " \"sha256_cert_fingerprints\": [\"1234567890\"]"
|
| + + "}, {"
|
| + + " \"package\": \"com.alicepay\","
|
| + + " \"version\": 123,"
|
| + + " \"sha256_cert_fingerprints\": [\"1357913579\"]"
|
| + + "}]}", callback);
|
| +
|
| + Assert.assertTrue(callback.success);
|
| + Assert.assertNotNull(callback.manifests);
|
| + Assert.assertFalse(callback.manifests.isEmpty());
|
| + Assert.assertEquals(callback.manifests.size(), 2);
|
| +
|
| + Manifest manifest = callback.manifests.get(0);
|
| +
|
| + Assert.assertNotNull(manifest);
|
| + Assert.assertNotNull(manifest.packageName);
|
| + Assert.assertEquals(manifest.packageName, "com.bobpay");
|
| + Assert.assertEquals(manifest.version, 321);
|
| + Assert.assertNotNull(manifest.sha256CertFingerprints);
|
| + Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty());
|
| + Assert.assertEquals(manifest.sha256CertFingerprints.size(), 1);
|
| + Assert.assertEquals(manifest.sha256CertFingerprints.iterator().next(), "1234567890");
|
| +
|
| + manifest = callback.manifests.get(1);
|
| +
|
| + Assert.assertNotNull(manifest);
|
| + Assert.assertNotNull(manifest.packageName);
|
| + Assert.assertEquals(manifest.packageName, "com.alicepay");
|
| + Assert.assertEquals(manifest.version, 123);
|
| + Assert.assertNotNull(manifest.sha256CertFingerprints);
|
| + Assert.assertFalse(manifest.sha256CertFingerprints.isEmpty());
|
| + Assert.assertEquals(manifest.sha256CertFingerprints.size(), 1);
|
| + Assert.assertEquals(manifest.sha256CertFingerprints.iterator().next(), "1357913579");
|
| + }
|
| +}
|
|
|