Bug 1081043 - Only check for crashes if we get a MarionetteException or an instance of IOError. r=mdas
authorDave Hunt <dhunt@mozilla.com>
Mon, 13 Oct 2014 02:01:00 +0200
changeset 211198 2c52ec780e679523ae0f87cfb1d463ac551c889c
parent 211197 0ecbecdbc21ff955fb095ec8e993347249d6078c
child 211199 ce272484b1dd447955f8649d1f238ff74d575f47
push id1
push userroot
push dateMon, 20 Oct 2014 17:29:22 +0000
reviewersmdas
bugs1081043
milestone36.0a1
Bug 1081043 - Only check for crashes if we get a MarionetteException or an instance of IOError. r=mdas
testing/marionette/client/marionette/decorators.py
--- a/testing/marionette/client/marionette/decorators.py
+++ b/testing/marionette/client/marionette/decorators.py
@@ -1,14 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 from errors import MarionetteException
 from functools import wraps
+import socket
 import sys
 import traceback
 
 def _find_marionette_in_args(*args, **kwargs):
     try:
         m = [a for a in args + tuple(kwargs.values()) if hasattr(a, 'session')][0]
     except IndexError:
         print("Can only apply decorator to function using a marionette object")
@@ -28,20 +29,21 @@ def do_crash_check(func, always=False):
             try:
                 m.check_for_crash()
             except:
                 # don't want to lose the original exception
                 traceback.print_exc()
 
         try:
             return func(*args, **kwargs)
-        except (MarionetteException, IOError):
+        except (MarionetteException, socket.error, IOError) as e:
             exc, val, tb = sys.exc_info()
-            if not always:
-                check()
+            if not isinstance(e, MarionetteException) or type(e) is MarionetteException:
+                if not always:
+                    check()
             raise exc, val, tb
         finally:
             if always:
                 check()
     return _
 
 def uses_marionette(func):
     """Decorator which creates a marionette session and deletes it