diff options
author | adorokhine <adorokhine@google.com> | 2016-12-16 20:55:22 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-16 20:55:22 -0800 |
commit | 4440d4703224ccb815b4d8db647d58a244240571 (patch) | |
tree | 11599a5d2a1cc81de2033445110e2e6e9f2f0175 /third_party/sl4a/src | |
parent | 5b63815253ce5a6c13e30d102ea830ed6fac61c0 (diff) | |
download | mobly-snippet-lib-4440d4703224ccb815b4d8db647d58a244240571.tar.gz |
Propagate exceptions out of SimpleServer instead of returning null. (#9)
Diffstat (limited to 'third_party/sl4a/src')
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 { |