| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.net; |
| |
| import android.content.Context; |
| |
| import org.jni_zero.JNINamespace; |
| import org.jni_zero.NativeMethods; |
| |
| import org.chromium.base.ContextUtils; |
| import org.chromium.base.test.util.UrlUtils; |
| |
| /** Wrapper class to start a Quic test server. */ |
| @JNINamespace("cronet") |
| public final class QuicTestServer { |
| private static final String TAG = QuicTestServer.class.getSimpleName(); |
| |
| private static final String CERT_USED = "quic-chain.pem"; |
| private static final String KEY_USED = "quic-leaf-cert.key"; |
| private static final String[] CERTS_USED = {CERT_USED}; |
| |
| private static boolean sServerRunning; |
| |
| /* |
| * Starts the server. |
| */ |
| public static void startQuicTestServer(Context context) { |
| if (sServerRunning) { |
| throw new IllegalStateException("Quic server is already running"); |
| } |
| TestFilesInstaller.installIfNeeded(context); |
| QuicTestServerJni.get() |
| .startQuicTestServer( |
| TestFilesInstaller.getInstalledPath(context), |
| UrlUtils.getIsolatedTestRoot()); |
| sServerRunning = true; |
| } |
| |
| /** Shuts down the server. No-op if the server is already shut down. */ |
| public static void shutdownQuicTestServer() { |
| if (!sServerRunning) { |
| return; |
| } |
| QuicTestServerJni.get().shutdownQuicTestServer(); |
| sServerRunning = false; |
| } |
| |
| public static String getServerURL() { |
| return "https://" + getServerHost() + ":" + getServerPort(); |
| } |
| |
| public static String getServerHost() { |
| return CronetTestUtil.QUIC_FAKE_HOST; |
| } |
| |
| public static int getServerPort() { |
| return QuicTestServerJni.get().getServerPort(); |
| } |
| |
| public static void delayResponse(String path, int delayInSeconds) { |
| QuicTestServerJni.get().delayResponse(path, delayInSeconds); |
| } |
| |
| public static final String getServerCert() { |
| return CERT_USED; |
| } |
| |
| public static final String getServerCertKey() { |
| return KEY_USED; |
| } |
| |
| public static long createMockCertVerifier() { |
| TestFilesInstaller.installIfNeeded(ContextUtils.getApplicationContext()); |
| return MockCertVerifier.createMockCertVerifier(CERTS_USED, true); |
| } |
| |
| @NativeMethods("cronet_tests") |
| interface Natives { |
| /* |
| * Runs a quic test server synchronously. |
| */ |
| void startQuicTestServer(String filePath, String testDataDir); |
| |
| /* |
| * Shutdowns the quic test-server synchronously. |
| * |
| * Calling this without calling startQuicTestServer first will lead to unexpected |
| * behavior if not compiled in debug mode. |
| */ |
| void shutdownQuicTestServer(); |
| |
| int getServerPort(); |
| |
| /* |
| * Responses for path will be delayed by delayInSeconds. |
| * |
| * Ideally this wouldn't take a delay. Instead, it should provide a synchronization |
| * mechanism that allows the caller to unblock the request. This would require changes all |
| * the way down to QUICHE though. |
| */ |
| void delayResponse(String path, int delayInSeconds); |
| } |
| } |