Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(733)

Side by Side Diff: net/test/android/javatests/src/org/chromium/net/test/EmbeddedTestServer.java

Issue 1465383003: [Android] Add ChromiumNetTestSupport.apk for the java EmbeddedTestServer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: agrieve comments Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.test; 5 package org.chromium.net.test;
6 6
7 import org.chromium.base.annotations.CalledByNative; 7 import android.content.ComponentName;
8 import org.chromium.base.annotations.JNINamespace; 8 import android.content.Context;
9 import android.content.Intent;
10 import android.content.ServiceConnection;
11 import android.os.IBinder;
12 import android.os.RemoteException;
13
14 import org.chromium.base.Log;
9 15
10 import java.io.File; 16 import java.io.File;
11 17
12 /** 18 /**
13 * Java bindings for the native embedded test server. 19 * Java bindings for the native embedded test server.
14 * 20 *
15 * An example use: 21 * An example use:
16 * EmbeddedTestServer s = new EmbeddedTestServer(); 22 * EmbeddedTestServer s = new EmbeddedTestServer();
17 * s.initializeNative(); 23 * s.initializeNative();
18 * s.serveFilesFromDirectory("/path/to/my/directory"); 24 * s.serveFilesFromDirectory("/path/to/my/directory");
19 * if (!s.start()) { 25 * if (!s.start()) {
20 * throw new SomeKindOfException("Unable to initialize EmbeddedTestServer. "); 26 * throw new SomeKindOfException("Unable to initialize EmbeddedTestServer. ");
21 * } 27 * }
22 * 28 *
23 * // serve requests... 29 * // serve requests...
24 * 30 *
25 * s.shutdownAndWait(); 31 * s.shutdownAndWait();
26 * s.destroy(); 32 * s.destroy();
27 */ 33 */
28 @JNINamespace("net::test_server")
29 public class EmbeddedTestServer { 34 public class EmbeddedTestServer {
30 private long mNativeEmbeddedTestServer; 35 private static final String TAG = "cr_net_test";
31 36
32 /** Create an uninitialized EmbeddedTestServer. */ 37 private static final String EMBEDDED_TEST_SERVER_SERVICE =
33 public EmbeddedTestServer() {} 38 "org.chromium.net.test.EMBEDDED_TEST_SERVER_SERVICE";
34 39
35 /** Initialize the native EmbeddedTestServer object. */ 40 private IEmbeddedTestServerImpl mImpl;
36 public void initializeNative() { 41 private ServiceConnection mConn = new ServiceConnection() {
37 if (mNativeEmbeddedTestServer == 0) nativeInit(); 42 @Override
38 assert mNativeEmbeddedTestServer != 0; 43 public void onServiceConnected(ComponentName name, IBinder service) {
44 synchronized (mImplMonitor) {
45 mImpl = IEmbeddedTestServerImpl.Stub.asInterface(service);
46 mImplMonitor.notify();
47 }
48 }
49
50 @Override
51 public void onServiceDisconnected(ComponentName name) {
52 synchronized (mImplMonitor) {
53 mImpl = null;
54 mImplMonitor.notify();
55 }
56 }
57 };
58
59 private final Object mImplMonitor = new Object();
60
61 /**
62 * Exception class raised on failure in the EmbeddedTestServer.
63 */
64 public static final class EmbeddedTestServerFailure extends Error {
65 public EmbeddedTestServerFailure(String errorDesc) {
66 super(errorDesc);
67 }
68 }
69
70 public void initializeNative(Context context) throws InterruptedException {
71 Intent intent = new Intent(EMBEDDED_TEST_SERVER_SERVICE);
72 intent.setClassName(
73 "org.chromium.net.test.support", "org.chromium.net.test.Embedded TestServerService");
74 if (!context.bindService(intent, mConn, Context.BIND_AUTO_CREATE)) {
75 throw new EmbeddedTestServerFailure(
76 "Unable to bind to the EmbeddedTestServer service.");
77 }
78 synchronized (mImplMonitor) {
Yaron 2015/11/24 19:06:28 Nit: add logs around this so we can see in logcat
jbudorick 2015/11/25 02:43:40 Done.
79 // TODO(jbudorick): Add a fatal timeout here.
jbudorick 2015/11/25 02:43:40 TODO removed and somewhat addressed.
Yaron 2015/11/25 16:04:54 "somewhat" :)
80 while (mImpl == null) {
81 mImplMonitor.wait();
82 }
83 }
84 try {
85 mImpl.initializeNative();
86 } catch (RemoteException e) {
87 Log.e(TAG, "Failed to initialize native server.", e);
88 throw new EmbeddedTestServerFailure("Failed to initialize native ser ver.");
89 }
39 } 90 }
40 91
41 /** Serve files from the provided directory. 92 /** Serve files from the provided directory.
42 * 93 *
43 * @param directory The directory from which files should be served. 94 * @param directory The directory from which files should be served.
44 */ 95 */
45 public void serveFilesFromDirectory(File directory) { 96 public void serveFilesFromDirectory(File directory) {
46 nativeServeFilesFromDirectory(mNativeEmbeddedTestServer, directory.getPa th()); 97 serveFilesFromDirectory(directory.getPath());
47 } 98 }
48 99
49 /** Serve files from the provided directory. 100 /** Serve files from the provided directory.
50 * 101 *
51 * @param directoryPath The path of the directory from which files should b e served. 102 * @param directoryPath The path of the directory from which files should b e served.
52 */ 103 */
53 public void serveFilesFromDirectory(String directoryPath) { 104 public void serveFilesFromDirectory(String directoryPath) {
54 nativeServeFilesFromDirectory(mNativeEmbeddedTestServer, directoryPath); 105 try {
106 mImpl.serveFilesFromDirectory(directoryPath);
107 } catch (RemoteException e) {
108 throw new EmbeddedTestServerFailure(
109 "Failed to start serving files from " + directoryPath + ": " + e.toString());
110 }
55 } 111 }
56 112
57 // TODO(svaldez): Remove once all consumers have switched to start(). 113 // TODO(svaldez): Remove once all consumers have switched to start().
58 /** Wrapper for start() 114 /** Wrapper for start()
59 * 115 *
60 * start() should be used instead of this. 116 * start() should be used instead of this.
61 * 117 *
62 * @return Whether the server was successfully initialized. 118 * @return Whether the server was successfully initialized.
63 */ 119 */
64 public boolean initializeAndWaitUntilReady() { 120 public boolean initializeAndWaitUntilReady() {
65 return start(); 121 return start();
66 } 122 }
67 123
68 /** Starts the server. 124 /** Starts the server.
69 * 125 *
70 * Note that this should be called after handlers are set up, including any relevant calls 126 * Note that this should be called after handlers are set up, including any relevant calls
71 * serveFilesFromDirectory. 127 * serveFilesFromDirectory.
72 * 128 *
73 * @return Whether the server was successfully initialized. 129 * @return Whether the server was successfully initialized.
74 */ 130 */
75 public boolean start() { 131 public boolean start() {
76 return nativeStart(mNativeEmbeddedTestServer); 132 try {
133 return mImpl.start();
134 } catch (RemoteException e) {
135 throw new EmbeddedTestServerFailure("Failed to start server: " + e.t oString());
136 }
137 }
138
139 /** Create and initialize a server that serves files from the provided direc tory.
140 *
141 * This handles native object initialization, server configuration, and ser ver initialization.
142 * On returning, the server is ready for use.
143 *
144 * @param context The context in which the server is being started.
145 * @param directory The directory from which files should be served.
146 * @return The created server.
147 */
148 public static EmbeddedTestServer createAndStartFileServer(Context context, F ile directory)
149 throws InterruptedException {
150 EmbeddedTestServer server = new EmbeddedTestServer();
151 server.initializeNative(context);
152 server.serveFilesFromDirectory(directory);
153 if (!server.start()) {
154 throw new EmbeddedTestServerFailure(
155 "Failed to start serving files from " + directory.getPath()) ;
156 }
157 return server;
77 } 158 }
78 159
79 /** Get the full URL for the given relative URL. 160 /** Get the full URL for the given relative URL.
80 * 161 *
81 * @param relativeUrl The relative URL for which a full URL will be obtaine d. 162 * @param relativeUrl The relative URL for which a full URL will be obtaine d.
82 * @return The URL as a String. 163 * @return The URL as a String.
83 */ 164 */
84 public String getURL(String relativeUrl) { 165 public String getURL(String relativeUrl) {
85 return nativeGetURL(mNativeEmbeddedTestServer, relativeUrl); 166 try {
167 return mImpl.getURL(relativeUrl);
168 } catch (RemoteException e) {
169 throw new EmbeddedTestServerFailure(
170 "Failed to get URL for " + relativeUrl + ": " + e.toString() );
171 }
86 } 172 }
87 173
88 /** Shutdown the server. 174 /** Shutdown the server.
89 * 175 *
90 * @return Whether the server was successfully shut down. 176 * @return Whether the server was successfully shut down.
91 */ 177 */
92 public boolean shutdownAndWaitUntilComplete() { 178 public boolean shutdownAndWaitUntilComplete() {
93 return nativeShutdownAndWaitUntilComplete(mNativeEmbeddedTestServer); 179 try {
180 return mImpl.shutdownAndWaitUntilComplete();
181 } catch (RemoteException e) {
182 throw new EmbeddedTestServerFailure("Failed to shut down: " + e.toSt ring());
183 }
94 } 184 }
95 185
96 /** Destroy the native EmbeddedTestServer object. */ 186 /** Destroy the native EmbeddedTestServer object. */
97 public void destroy() { 187 public void destroy() {
98 assert mNativeEmbeddedTestServer != 0; 188 try {
99 nativeDestroy(mNativeEmbeddedTestServer); 189 mImpl.destroy();
100 assert mNativeEmbeddedTestServer == 0; 190 } catch (RemoteException e) {
191 throw new EmbeddedTestServerFailure("Failed to destroy native server : " + e.toString());
192 }
101 } 193 }
102 194
103 @CalledByNative 195 /** Stop and destroy the provided server.
104 private void setNativePtr(long nativePtr) { 196 *
105 assert mNativeEmbeddedTestServer == 0; 197 * This handles stopping the server and destroying the native object.
106 mNativeEmbeddedTestServer = nativePtr; 198 *
199 * @param server The server to stop and destroy.
200 */
201 public static void stopAndDestroyServer(EmbeddedTestServer server) {
202 if (!server.shutdownAndWaitUntilComplete()) {
203 throw new EmbeddedTestServerFailure("Failed to stop server.");
204 }
205 server.destroy();
107 } 206 }
108
109 @CalledByNative
110 private void clearNativePtr() {
111 assert mNativeEmbeddedTestServer != 0;
112 mNativeEmbeddedTestServer = 0;
113 }
114
115 private native void nativeInit();
116 private native void nativeDestroy(long nativeEmbeddedTestServerAndroid);
117 private native boolean nativeStart(long nativeEmbeddedTestServerAndroid);
118 private native boolean nativeShutdownAndWaitUntilComplete(long nativeEmbedde dTestServerAndroid);
119 private native String nativeGetURL(long nativeEmbeddedTestServerAndroid, Str ing relativeUrl);
120 private native void nativeServeFilesFromDirectory(
121 long nativeEmbeddedTestServerAndroid, String directoryPath);
122 } 207 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698