OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.net; | 5 package org.chromium.net; |
6 | 6 |
7 import android.test.suitebuilder.annotation.SmallTest; | 7 import android.test.suitebuilder.annotation.SmallTest; |
8 | 8 |
| 9 import org.json.JSONObject; |
| 10 |
9 import org.chromium.base.test.util.Feature; | 11 import org.chromium.base.test.util.Feature; |
10 import org.chromium.net.test.util.CertTestUtil; | 12 import org.chromium.net.test.util.CertTestUtil; |
11 import org.json.JSONObject; | |
12 | 13 |
13 import java.io.ByteArrayInputStream; | 14 import java.io.ByteArrayInputStream; |
14 import java.security.cert.CertificateFactory; | 15 import java.security.cert.CertificateFactory; |
15 import java.security.cert.X509Certificate; | 16 import java.security.cert.X509Certificate; |
16 import java.util.Arrays; | 17 import java.util.Arrays; |
17 import java.util.Calendar; | 18 import java.util.Calendar; |
18 import java.util.Date; | 19 import java.util.Date; |
19 import java.util.HashSet; | 20 import java.util.HashSet; |
20 import java.util.Set; | 21 import java.util.Set; |
21 | 22 |
22 /** | 23 /** |
23 * Public-Key-Pinning tests of Cronet Java API. | 24 * Public-Key-Pinning tests of Cronet Java API. |
24 */ | 25 */ |
25 public class PkpTest extends CronetTestBase { | 26 public class PkpTest extends CronetTestBase { |
26 private static final String CERT_USED = "quic_test.example.com.crt"; | 27 private static final String CERT_USED = "quic_test.example.com.crt"; |
27 private static final String[] CERTS_USED = {CERT_USED}; | 28 private static final String[] CERTS_USED = {CERT_USED}; |
28 private static final int DISTANT_FUTURE = Integer.MAX_VALUE; | 29 private static final int DISTANT_FUTURE = Integer.MAX_VALUE; |
29 private static final boolean INCLUDE_SUBDOMAINS = true; | 30 private static final boolean INCLUDE_SUBDOMAINS = true; |
30 private static final boolean EXCLUDE_SUBDOMAINS = false; | 31 private static final boolean EXCLUDE_SUBDOMAINS = false; |
31 private static final boolean KNOWN_ROOT = true; | 32 private static final boolean KNOWN_ROOT = true; |
32 private static final boolean UNKNOWN_ROOT = false; | 33 private static final boolean UNKNOWN_ROOT = false; |
33 private static final boolean ENABLE_PINNING_BYPASS_FOR_LOCAL_ANCHORS = true; | 34 private static final boolean ENABLE_PINNING_BYPASS_FOR_LOCAL_ANCHORS = true; |
34 private static final boolean DISABLE_PINNING_BYPASS_FOR_LOCAL_ANCHORS = fals
e; | 35 private static final boolean DISABLE_PINNING_BYPASS_FOR_LOCAL_ANCHORS = fals
e; |
35 | 36 |
36 private CronetTestFramework mTestFramework; | 37 private CronetTestFramework mTestFramework; |
37 private CronetEngine.Builder mBuilder; | 38 private ExperimentalCronetEngine.Builder mBuilder; |
38 private TestUrlRequestCallback mListener; | 39 private TestUrlRequestCallback mListener; |
39 private String mServerUrl; // https://test.example.com:6121 | 40 private String mServerUrl; // https://test.example.com:6121 |
40 private String mServerHost; // test.example.com | 41 private String mServerHost; // test.example.com |
41 private String mDomain; // example.com | 42 private String mDomain; // example.com |
42 | 43 |
43 @Override | 44 @Override |
44 protected void setUp() throws Exception { | 45 protected void setUp() throws Exception { |
45 super.setUp(); | 46 super.setUp(); |
46 // Start QUIC Test Server | 47 // Start QUIC Test Server |
47 System.loadLibrary("cronet_tests"); | 48 System.loadLibrary("cronet_tests"); |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 fail("Did not expect an error but got error code " | 381 fail("Did not expect an error but got error code " |
381 + mListener.mError.getCronetInternalErrorCode()); | 382 + mListener.mError.getCronetInternalErrorCode()); |
382 } | 383 } |
383 assertNotNull("Expected non-null response from the server", mListener.mR
esponseInfo); | 384 assertNotNull("Expected non-null response from the server", mListener.mR
esponseInfo); |
384 assertEquals(200, mListener.mResponseInfo.getHttpStatusCode()); | 385 assertEquals(200, mListener.mResponseInfo.getHttpStatusCode()); |
385 } | 386 } |
386 | 387 |
387 private void createCronetEngineBuilder(boolean bypassPinningForLocalAnchors,
boolean knownRoot) | 388 private void createCronetEngineBuilder(boolean bypassPinningForLocalAnchors,
boolean knownRoot) |
388 throws Exception { | 389 throws Exception { |
389 // Set common CronetEngine parameters | 390 // Set common CronetEngine parameters |
390 mBuilder = new CronetEngine.Builder(getContext()); | 391 mBuilder = new ExperimentalCronetEngine.Builder(getContext()); |
391 mBuilder.enablePublicKeyPinningBypassForLocalTrustAnchors(bypassPinningF
orLocalAnchors); | 392 mBuilder.enablePublicKeyPinningBypassForLocalTrustAnchors(bypassPinningF
orLocalAnchors); |
392 mBuilder.enableQuic(true); | 393 mBuilder.enableQuic(true); |
393 mBuilder.addQuicHint(QuicTestServer.getServerHost(), QuicTestServer.getS
erverPort(), | 394 mBuilder.addQuicHint(QuicTestServer.getServerHost(), QuicTestServer.getS
erverPort(), |
394 QuicTestServer.getServerPort()); | 395 QuicTestServer.getServerPort()); |
395 JSONObject quicParams = new JSONObject().put("host_whitelist", "test.exa
mple.com"); | 396 JSONObject quicParams = new JSONObject().put("host_whitelist", "test.exa
mple.com"); |
396 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules
(); | 397 JSONObject hostResolverParams = CronetTestUtil.generateHostResolverRules
(); |
397 JSONObject experimentalOptions = new JSONObject() | 398 JSONObject experimentalOptions = new JSONObject() |
398 .put("QUIC", quicParams) | 399 .put("QUIC", quicParams) |
399 .put("HostResolverRules", hostR
esolverParams); | 400 .put("HostResolverRules", hostR
esolverParams); |
400 mBuilder.setExperimentalOptions(experimentalOptions.toString()); | 401 mBuilder.setExperimentalOptions(experimentalOptions.toString()); |
401 mBuilder.setStoragePath(CronetTestFramework.getTestStorage(getContext())
); | 402 mBuilder.setStoragePath(CronetTestFramework.getTestStorage(getContext())
); |
402 mBuilder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP, 1
000 * 1024); | 403 mBuilder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP, 1
000 * 1024); |
403 mBuilder.setMockCertVerifierForTesting( | 404 CronetTestUtil.setMockCertVerifierForTesting( |
404 MockCertVerifier.createMockCertVerifier(CERTS_USED, knownRoot)); | 405 mBuilder, MockCertVerifier.createMockCertVerifier(CERTS_USED, kn
ownRoot)); |
405 } | 406 } |
406 | 407 |
407 private void startCronetFramework() { | 408 private void startCronetFramework() { |
408 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, mBuilder); | 409 mTestFramework = startCronetTestFrameworkWithUrlAndCronetEngineBuilder(n
ull, mBuilder); |
409 } | 410 } |
410 | 411 |
411 private void shutdownCronetEngine() { | 412 private void shutdownCronetEngine() { |
412 if (mTestFramework != null && mTestFramework.mCronetEngine != null) { | 413 if (mTestFramework != null && mTestFramework.mCronetEngine != null) { |
413 mTestFramework.mCronetEngine.shutdown(); | 414 mTestFramework.mCronetEngine.shutdown(); |
414 } | 415 } |
415 } | 416 } |
416 | 417 |
417 private byte[] generateSomeSha256() { | 418 private byte[] generateSomeSha256() { |
418 byte[] sha256 = new byte[32]; | 419 byte[] sha256 = new byte[32]; |
419 Arrays.fill(sha256, (byte) 58); | 420 Arrays.fill(sha256, (byte) 58); |
420 return sha256; | 421 return sha256; |
421 } | 422 } |
422 | 423 |
423 private void addPkpSha256( | 424 private void addPkpSha256( |
424 String host, byte[] pinHashValue, boolean includeSubdomain, int maxA
geInSec) { | 425 String host, byte[] pinHashValue, boolean includeSubdomain, int maxA
geInSec) { |
425 Set<byte[]> hashes = new HashSet<>(); | 426 Set<byte[]> hashes = new HashSet<>(); |
426 hashes.add(pinHashValue); | 427 hashes.add(pinHashValue); |
427 mBuilder.addPublicKeyPins(host, hashes, includeSubdomain, dateInFuture(m
axAgeInSec)); | 428 mBuilder.addPublicKeyPins(host, hashes, includeSubdomain, dateInFuture(m
axAgeInSec)); |
428 } | 429 } |
429 | 430 |
430 private void sendRequestAndWaitForResult() { | 431 private void sendRequestAndWaitForResult() { |
431 mListener = new TestUrlRequestCallback(); | 432 mListener = new TestUrlRequestCallback(); |
432 | 433 |
433 String quicURL = mServerUrl + "/simple.txt"; | 434 String quicURL = mServerUrl + "/simple.txt"; |
434 UrlRequest.Builder requestBuilder = new UrlRequest.Builder( | 435 UrlRequest.Builder requestBuilder = mTestFramework.mCronetEngine.newUrlR
equestBuilder( |
435 quicURL, mListener, mListener.getExecutor(), mTestFramework.mCro
netEngine); | 436 quicURL, mListener, mListener.getExecutor()); |
436 requestBuilder.build().start(); | 437 requestBuilder.build().start(); |
437 mListener.blockForDone(); | 438 mListener.blockForDone(); |
438 } | 439 } |
439 | 440 |
440 private X509Certificate readCertFromFileInPemFormat(String certFileName) thr
ows Exception { | 441 private X509Certificate readCertFromFileInPemFormat(String certFileName) thr
ows Exception { |
441 byte[] certDer = CertTestUtil.pemToDer(CertTestUtil.CERTS_DIRECTORY + ce
rtFileName); | 442 byte[] certDer = CertTestUtil.pemToDer(CertTestUtil.CERTS_DIRECTORY + ce
rtFileName); |
442 CertificateFactory certFactory = CertificateFactory.getInstance("X.509")
; | 443 CertificateFactory certFactory = CertificateFactory.getInstance("X.509")
; |
443 return (X509Certificate) certFactory.generateCertificate(new ByteArrayIn
putStream(certDer)); | 444 return (X509Certificate) certFactory.generateCertificate(new ByteArrayIn
putStream(certDer)); |
444 } | 445 } |
445 | 446 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 if (!shouldThrowNpe) { | 482 if (!shouldThrowNpe) { |
482 fail("Null pointer exception was not expected: " + ex.toString()
); | 483 fail("Null pointer exception was not expected: " + ex.toString()
); |
483 } | 484 } |
484 return; | 485 return; |
485 } | 486 } |
486 if (shouldThrowNpe) { | 487 if (shouldThrowNpe) { |
487 fail("NullPointerException was expected"); | 488 fail("NullPointerException was expected"); |
488 } | 489 } |
489 } | 490 } |
490 } | 491 } |
OLD | NEW |