aboutsummaryrefslogtreecommitdiff
path: root/third_party/sl4a/src
diff options
context:
space:
mode:
authoradorokhine <adorokhine@google.com>2016-12-16 20:55:22 -0800
committerGitHub <noreply@github.com>2016-12-16 20:55:22 -0800
commit4440d4703224ccb815b4d8db647d58a244240571 (patch)
tree11599a5d2a1cc81de2033445110e2e6e9f2f0175 /third_party/sl4a/src
parent5b63815253ce5a6c13e30d102ea830ed6fac61c0 (diff)
downloadmobly-snippet-lib-4440d4703224ccb815b4d8db647d58a244240571.tar.gz
Propagate exceptions out of SimpleServer instead of returning null. (#9)
Diffstat (limited to 'third_party/sl4a/src')
-rw-r--r--third_party/sl4a/src/main/java/com/google/android/mobly/snippet/SnippetRunner.java15
-rw-r--r--third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/AndroidProxy.java7
-rw-r--r--third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/SimpleServer.java29
3 files changed, 22 insertions, 29 deletions
diff --git a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/SnippetRunner.java b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/SnippetRunner.java
index ffa6a2e..6bfa87c 100644
--- a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/SnippetRunner.java
+++ b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/SnippetRunner.java
@@ -25,6 +25,8 @@ import android.support.test.runner.AndroidJUnitRunner;
import com.google.android.mobly.snippet.rpc.AndroidProxy;
import com.google.android.mobly.snippet.util.Log;
import com.google.android.mobly.snippet.util.NotificationIdFactory;
+import java.io.IOException;
+import java.net.SocketException;
/**
* A launcher that starts the snippet server as an instrumentation so that it has access to the
@@ -77,8 +79,17 @@ public class SnippetRunner extends AndroidJUnitRunner {
private void startServer(int port) {
AndroidProxy androidProxy = new AndroidProxy(getContext());
- if (androidProxy.startLocal(port) == null) {
- throw new RuntimeException("Failed to start server on port " + port);
+ try {
+ androidProxy.startLocal(port);
+ } catch (SocketException e) {
+ if (e.getMessage().equals("Permission denied")) {
+ throw new RuntimeException("Failed to start server on port "
+ + port + ". No permission to create a socket. Does the *MAIN* app manifest "
+ + "declare the INTERNET permission?", e);
+ }
+ throw new RuntimeException("Failed to start server on port " + port, e);
+ } catch (IOException e) {
+ throw new RuntimeException("Failed to start server on port " + port, e);
}
createNotification();
Log.i("Snippet server started for process " + Process.myPid() + " on port " + port);
diff --git a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/AndroidProxy.java b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/AndroidProxy.java
index 0ae764f..de122c6 100644
--- a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/AndroidProxy.java
+++ b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/AndroidProxy.java
@@ -21,11 +21,11 @@ import android.content.Context;
import com.google.android.mobly.snippet.manager.ReflectionSnippetManagerFactory;
import com.google.android.mobly.snippet.manager.SnippetManagerFactory;
+import java.io.IOException;
import java.net.InetSocketAddress;
public class AndroidProxy {
- private InetSocketAddress mAddress;
private final JsonRpcServer mJsonRpcServer;
private final SnippetManagerFactory mSnippetManagerFactory;
@@ -34,8 +34,7 @@ public class AndroidProxy {
mJsonRpcServer = new JsonRpcServer(mSnippetManagerFactory);
}
- public InetSocketAddress startLocal(int port) {
- mAddress = mJsonRpcServer.startLocal(port);
- return mAddress;
+ public void startLocal(int port) throws IOException {
+ mJsonRpcServer.startLocal(port);
}
}
diff --git a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/SimpleServer.java b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/SimpleServer.java
index eaadf66..617140b 100644
--- a/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/SimpleServer.java
+++ b/third_party/sl4a/src/main/java/com/google/android/mobly/snippet/rpc/SimpleServer.java
@@ -191,33 +191,17 @@ public abstract class SimpleServer {
* @param port
* the port to bind to or 0 to pick any unused port
*
- * @return the port that the server is bound to
* @throws IOException
*/
- public InetSocketAddress startLocal(int port) {
+ public void startLocal(int port) throws IOException {
InetAddress address;
- try {
- // address = InetAddress.getLocalHost();
- address = getPrivateInetAddress();
- mServer = new ServerSocket(port, 5, address);
- } catch (BindException e) {
- Log.e("Port " + port + " already in use.");
- try {
- address = getPrivateInetAddress();
- mServer = new ServerSocket(0, 5, address);
- } catch (IOException e1) {
- e1.printStackTrace();
- return null;
- }
- } catch (Exception e) {
- Log.e("Failed to start server.", e);
- return null;
- }
- int boundPort = start();
- return InetSocketAddress.createUnresolved(mServer.getInetAddress().getHostAddress(), boundPort);
+ // address = InetAddress.getLocalHost();
+ address = getPrivateInetAddress();
+ mServer = new ServerSocket(port, 5, address);
+ start();
}
- private int start() {
+ private void start() {
mServerThread = new Thread() {
@Override
public void run() {
@@ -243,7 +227,6 @@ public abstract class SimpleServer {
};
mServerThread.start();
Log.v("Bound to " + mServer.getInetAddress());
- return mServer.getLocalPort();
}
private void startConnectionThread(final Socket sock) throws IOException, JSONException {