Remove more py2 workarounds. (#716)

diff --git a/mobly/records.py b/mobly/records.py
index c4f05cd..3201bed 100644
--- a/mobly/records.py
+++ b/mobly/records.py
@@ -256,15 +256,10 @@
     try:
       self.details = str(content)
     except UnicodeEncodeError:
-      if sys.version_info < (3, 0):
-        # If Py2 threw encode error, convert to unicode.
-        self.details = unicode(content)
-      else:
-        # We should never hit this in Py3, if this happens, record
-        # an encoded version of the content for users to handle.
-        logging.error('Unable to decode "%s" in Py3, encoding in utf-8.',
-                      content)
-        self.details = content.encode('utf-8')
+      # We should never hit this in Py3, But if this happens, record
+      # an encoded version of the content for users to handle.
+      logging.error('Unable to decode "%s" in Py3, encoding in utf-8.', content)
+      self.details = content.encode('utf-8')
 
   def to_dict(self):
     result = {}
diff --git a/mobly/utils.py b/mobly/utils.py
index f6c2249..5d63c1d 100644
--- a/mobly/utils.py
+++ b/mobly/utils.py
@@ -26,7 +26,6 @@
 import re
 import string
 import subprocess
-import sys
 import threading
 import time
 import traceback
@@ -298,15 +297,10 @@
         exceptions.append(exc)
     if raise_on_exception and exceptions:
       error_messages = []
-      if sys.version_info < (3, 0):
-        for exception in exceptions:
-          error_messages.append(
-              unicode(exception.message, encoding='utf-8', errors='replace'))
-      else:
-        for exception in exceptions:
-          error_messages.append(''.join(
-              traceback.format_exception(exception.__class__, exception,
-                                         exception.__traceback__)))
+      for exception in exceptions:
+        error_messages.append(''.join(
+            traceback.format_exception(exception.__class__, exception,
+                                       exception.__traceback__)))
       raise RuntimeError('\n\n'.join(error_messages))
     return return_vals
 
diff --git a/tests/mobly/base_instrumentation_test_test.py b/tests/mobly/base_instrumentation_test_test.py
index edbd73b..d42b290 100755
--- a/tests/mobly/base_instrumentation_test_test.py
+++ b/tests/mobly/base_instrumentation_test_test.py
@@ -15,7 +15,6 @@
 import os
 import mock
 import shutil
-import sys
 import tempfile
 
 from future.tests.base import unittest
@@ -129,18 +128,6 @@
     self.assertIsInstance(actual_test.termination_signal.exception,
                           expected_signal)
 
-  def convert_to_raw_output(self, test_output):
-    """Converts code-based strings into adb output strings.
-
-    In python3, adb returns 'utf-8' encoded byte arrays, which do not work
-    correctly with code-based unicode strings, so to simulate that, the raw
-    instrumentation output should be converted accordingly.
-    """
-    if sys.version_info >= (3, 0):
-      return bytes(test_output, 'utf-8')
-    else:
-      return bytes(test_output)
-
   def assert_run_instrumentation_test(self,
                                       instrumentation_output,
                                       expected_executed=[],
@@ -149,8 +136,9 @@
                                       expected_has_error=False,
                                       prefix=None,
                                       expected_executed_times=[]):
-    result = self.run_instrumentation_test(
-        self.convert_to_raw_output(instrumentation_output), prefix=prefix)
+    result = self.run_instrumentation_test(bytes(instrumentation_output,
+                                                 'utf-8'),
+                                           prefix=prefix)
     if expected_has_error:
       self.assertIsInstance(result.error, signals.TestError)
     else:
@@ -235,9 +223,6 @@
     self.assert_run_instrumentation_test(instrumentation_output,
                                          expected_completed_and_passed=True)
 
-  @unittest.skipUnless(
-      sys.version_info >= (3, 0),
-      'Only python3 displays different string types differently.')
   @mock.patch('logging.info')
   def test_run_instrumentation_test_logs_correctly(self, mock_info_logger):
     instrumentation_output = MOCK_EMPTY_INSTRUMENTATION_TEST
diff --git a/tests/mobly/controllers/android_device_lib/service_manager_test.py b/tests/mobly/controllers/android_device_lib/service_manager_test.py
index 83148ca..ce02d73 100755
--- a/tests/mobly/controllers/android_device_lib/service_manager_test.py
+++ b/tests/mobly/controllers/android_device_lib/service_manager_test.py
@@ -12,8 +12,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 """Unit tests for Mobly's ServiceManager."""
+
+import importlib
 import mock
-import sys
 
 from future.tests.base import unittest
 
@@ -58,11 +59,7 @@
 
   def setUp(self):
     # Reset hidden global `expects` state.
-    if sys.version_info < (3, 0):
-      reload(expects)
-    else:
-      import importlib
-      importlib.reload(expects)
+    importlib.reload(expects)
 
   def assert_recorded_one_error(self, message):
     self.assertEqual(expects.recorder.error_count, 1)
diff --git a/tests/mobly/controllers/android_device_lib/snippet_client_test.py b/tests/mobly/controllers/android_device_lib/snippet_client_test.py
index 5d3c684..4cfb603 100755
--- a/tests/mobly/controllers/android_device_lib/snippet_client_test.py
+++ b/tests/mobly/controllers/android_device_lib/snippet_client_test.py
@@ -16,7 +16,6 @@
 from builtins import bytes
 
 import mock
-import sys
 from future.tests.base import unittest
 
 from mobly.controllers.android_device_lib import adb
@@ -31,18 +30,6 @@
 MOCK_USER_ID = 0
 
 
-def get_print_function_name():
-  """Gets the name of the print function for mocking.
-
-  Returns:
-    A str representing the print function to mock.
-  """
-  if sys.version_info >= (3, 0):
-    return 'builtins.print'
-  else:
-    return '__builtin__.print'
-
-
 class SnippetClientTest(jsonrpc_client_test_base.JsonRpcClientTestBase):
   """Unit tests for mobly.controllers.android_device_lib.snippet_client.
   """
@@ -461,7 +448,7 @@
                                 'Unexpected EOF waiting for app to start'):
       client.start_app_and_connect()
 
-  @mock.patch(get_print_function_name())
+  @mock.patch('builtins.print')
   def test_help_rpc_when_printing_by_default(self, mock_print):
     client = self._make_client()
     mock_rpc = mock.MagicMock()
@@ -472,7 +459,7 @@
     self.assertEqual(None, result)
     mock_print.assert_called_once_with(mock_rpc.return_value)
 
-  @mock.patch(get_print_function_name())
+  @mock.patch('builtins.print')
   def test_help_rpc_when_not_printing(self, mock_print):
     client = self._make_client()
     mock_rpc = mock.MagicMock()